学习 Iptables
Iptables 是 Linux 下的利器,降妖除魔,非常厉害,可以用来搭建超强的防火墙或者路由器,还可以用作端口映射、负载均衡等。要想涉足 Linux 下的网络管理,不掌握 Iptables 显然是不行的。
一直以来对 Iptables 心存敬畏,想学却又不敢下手,生怕一时半会弄不清个所以然。碰到了问题也是找 rogerz 帮忙解决,比如配置的 VPN,自己更是有了惰性。现在他已经毕业了,原水解不了近渴,非自己动手不行了。而且就像前面所说的,Iptables 实在是必修课,逃避不得。
近来服务器老是被别人的 TUNet 帐号占用,导致我们的出国包月帐号无法使用,不能访问国外网络。无奈之下,只能通过重启服务器的方式来解决,相当郁闷。猜测,很可能是某个使用 VPN 的用户没有添加路由,这样他再用 TUNet 帐号登陆的话,就给绑定到服务器的 IP。正常情况下是包月帐号使用着这个 IP,在某些偶然情况下会被其它的帐号抢占。只要禁止通过服务器来连接 TUNet,估计问题就解决了。
昨晚开始看 Iptables 的文档,找到了一篇 Oskar Andreasson 写的 Iptables 指南 1.1.19(oan@frozentux.net翻译),由文档写得非常好,翻译得也不错。非常清晰地描述了 Iptables 的工作原理和相关概念,还有详细的用法和实例。花了两三个小时一遍读下来,对它的原理和使用方法都明白了,一般的问题都能搞定,只是在针对特殊问题的经验还需要时间积累。
回到上面的问题:如何禁止通过服务器登陆TUNet。查看了一下当前的 Iptables 配置,有三条规则:
- *nat: -A POSTROUTING -s 10.0.0.0/255.255.255.0 -j MASQUERADE
- *filter: -A INPUT -s 10.0.0.0/255.255.255.0 -d 59.66.0.0/255.255.0.0 -j DROP
- *filter: -A INPUT -s 10.0.0.0/255.255.255.0 -d 166.111.0.0/255.255.0.0 -j DROP
第一条使用来实现NAT的,将来自VPN的中转包做伪装,适用于这种动态 IP 的情况。而后面两条估计也是 rogerz 添加的,似乎就是用来解决上面的问题的,要将中转至校内 IP 段的包抛弃。仔细一看,这种写法是有问题的,发到本机的包才会通过 filter 表的 INPUT 链,而中转的包应该是通过 FORWARD 链才对。而且 DROP 的处理方式也不太好,对方会等待超时,用 REJECT 更友好一点。于是就它们改成:
-A FORWARD -d 166.111.0.0/16 -j REJECT
同时加一句
-A FORWARD -d 166.111.0.0/16 -j LOG
把没有企图通过它中转的包记录下来,看看是谁还没有添加路由表,通知一下。
回过头来看,在有了这么好的中文文档的情况下,学习 iptables 也不是那么困难嘛,并没有想象中的高深。丰富并且浅显易懂的文档,正是开源社区的特色,作者都是本着为用户解决实际问题的初衷写的,往往相当实用,不好还很生动和富有文采。Gentoo 社区的文档工作也做得非常好,它的创始人Daniel Robbins就曾经呼吁更多的人来参与文档建设,说很多人就是通过他写的文档认识他,而不是代码。现在国内的中文文档建设情况也相当不错,有很多组织在做这方面的工作,不少重要的文档都有了中文版本,比如上面的 Iptables 指南。在此向所有为开源社区做出贡献的奉献者表示敬意!
davies 发表于 2006 年 12 月 3 日 | 0 条留言
服务器连续运行102天
我的Gentoo Linux服务器创造了连续运行102天的纪录,从 2006-06-10 21:17:23 到 2006-09-21 20:14:48,连续运行了 102 天22小时57分25秒。本来还可以继续稳定运行的,今晚我在宿舍用电磁炉做皮蛋瘦肉粥时把保险丝给烧了……
由于在运行期间做了不少更新和配置修改,重启系统后好多服务起不来了,都得重新编译安装,好一顿折腾。
不错的纪录,纪念一下:-)
davies 发表于 2006 年 09 月 22 日 | 5 条留言
自动清理FTP中转目录的脚本
很多ftp都有中转目录,可以让用户在相应目录中存放文件一段时间,过期后自动删除,于是写了一个Linux 下的 Shell 脚本来完成该任务。
查看中转目录中文件的上传时间,如果超过了7天则转移到to be delete目录,再保存三天然后删除。转移的时候需要保留原来的目录结构,只好先在to be delete目录中复制了一份目录结构,再把过期文件拷贝过去,并且用touch更新一下文件修改时间,因为mv命令不会改变文件的修改时间。最后清空空目录。所有操作都是依靠 find 来完成的,再一次感受到了 Linux 组合工具的强大。
将该脚本设置为可执行,并在/etc/cron.daily下创建一个链接即可让它每天定时清理中转目录。由于FTP数据是由braveheart用户所有,而该脚本是在root用户下执行的,为了不影响FTP数据的权限,需要设置该脚本的用户和组,并设定UID,如下:
davies 发表于 2006 年 09 月 19 日 | 0 条留言
升级apache和glibc
这两天把Apache升级到了2.0.58-r2, glibc-2.4-r3, 遇到了一点麻烦。
升级Apache本是很简单的事,可这回顺便把配置文件httpd.conf也升级了,改用Gentoo定制的httpd.conf, 导致所有站点无法访问,access denied。在httpd.conf中添加如下行:
<Directory "/var/www">
AllowOverride All
Order allow,deny
Allow from all
</Directory>
由于我所有域名下的站点都在/var/www下,设置Allow from all允许该目录下的所有站点被访问,AllowOveride All设置允许.htaccess进行设置覆盖。
升级完glibc-2.4-r3后,blog站点不能被访问。log中显示加载模块blogxp.publisher时出错:
/usr/sbin/apache2: relocation error: /lib/libresolv.so.2: symbol
__res_iclose, version GLIBC_PRIVATE not defined in file libc.so.6 with
link time reference
估计是glibc升级后某些文件不兼容所致,重新安装了mod_python解决了问题。
Linux下的好多软件是相互依赖的,比如mod_python要依赖于Apache和Python等,当升级了底层软件,上层软件很可能需要重新编译,否则可能出现不兼容问题。
davies 发表于 2006 年 09 月 4 日 | 0 条留言
Linux下常用的Ftp Server
Linux 下有好几款很不错的 ftp server,各有特点,适用于不同的应用场合。根据其可配置性大概可以分为三类:弱、中等、高。
功能比较简单的有ftpd和oftpd,前者与ftp客户端工具ftp类似,只有标准的功能,此外支持SSL。oftpd是一款非常小巧的匿名ftp服务器。
可配制型居中的主要是vsftpd和pure-ftpd。这两个侧重于安全、速度和轻量级,在大型ftp服务器上用得比较多,尤其是vsftpd,这类服务器对用户认证和权限控制比较简单,更注重安全型和速度。它们都支持虚拟用户,但用户权限依赖于文件的系统权限,不支持针对目录的权限配置,在配置依赖于目录的权限时很麻烦。pure-ftpd相对vsftpd要强大一些,支持的用户认证方式也比较多。
配置性强的要数proftpd、wu-ftpd和glftpd。proftpd的配置方式跟Apache非常类似,支持虚拟服务器,可针对目录、虚拟用户进行权限配制,可继承和覆盖,还支持类似于.htaccess的.ftpaccess,此外还有众多的模块可以帮助实现一些特定的功能。wu-ftpd可以说是proftpd的前身,在早期用得比较多,proftpd就是针对wu-ftpd一些致命的弱点,重新写的同样定位的ftp服务器,差不多可以取代wu-ftpd。glftpd也是以功能强大著称,可配置性非常强,能够完成一些很独特的任务,比如自动CRC校验等,在0day等组织用得很多。由于这几款软件过于强大,存在不少安全隐患,需要常打补丁。
我的使用经历:以前的ftp需求很简单:系统用户和匿名用户,用vsftpd可以很好地解决。在配置山野的ftp服务器时,有三个用户对同一堆数据的不同目录具有不同的权限,通过虚拟用户的方式也勉强解决了,比较别扭,而且有问题。后来换用proftpd,非常容易且漂亮地实现了功能需求。以前总对proftpd心存芥蒂,认为它太强大和复杂而不适用,也担心自己不会配置,昨天在rogerz的帮助下很快就搞定了,配置并没有传说中的可怕:) 也保留着vsftpd,作为系统用户的ftp服务器。
davies 发表于 2006 年 04 月 16 日 | 0 条留言
第 1 / 4 页 | 下一页