使用Fail2ban保护Linux系统 <1>

  最近一直在找一个合适的sshd保护软件,因为总是有很多hacker在试服务器的口令,即使我已经关闭了口令验证,不胜其烦。网上有很多类似的软件。我本来想用sshguard的,但是新版本还在测试中,旧版本根本就和ipv6不兼容,抓不到尝试。后来又找了几个,DenyHost也是个比较成熟的软件,不过它是利用tcpd的机理,而我想找一个用iptables的,最后发现了Fail2ban。虽然Fail2ban没有本地代码的速度优势,它也是个脚本集,用python语言,不过它的屏蔽机理即可以用系统自带的防火墙,如Linux的iptables或FreeBSD的ipfw,又可以换用tcpd,此外还可以扩展到其它网络服务。0.8代码树采用客户机/服务器的模型编写,在服务运行的时候,可以用客户端直接修改核心参数。

  简而言之fail2ban的作用就是当日志的匹配项出现预设的频率时采取一定动作的软件,最普通的就是从防火墙上拦截掉。

  fail2ban看起来实在不错,但是0.8代码树需要python2.4以上,而centos4系统自带的是2.3的,贸然升级到2.4,就怕系统内一些自带工具会出错。于是首先要先配置好python,然后才能部署fail2ban。

mllm © 2004-2008, allblue
#安装至自定义目录,防止系统混乱
./configure --prefix=/usr/local/allblue/apps/Python-2.5.1
make
make install
cd /usr/local/allblue/apps/
ln -s Python-2.5.1 python
Parsed in 0.003 seconds

mllm © 2004-2008, allblue
/usr/local/allblue/apps/python/bin/python setup.py install
#移动生成的可执行文件到/usr/bin
mv /usr/local/allblue/apps/python/bin/fail2ban-* /usr/bin
Parsed in 0.002 seconds

经过上面的步骤,三个可执行文件可能会被安装到和python/bin目录下,如果这样,移动到/usr/bin,以便使用。如果被安装到/usr/bin,那么需要改动三个可执行脚本的首行,把解释器从默认的系统python改到自己刚安装的新的python。

mllm © 2004-2008, allblue
#!/usr/bin/python
Parsed in 0 seconds

改为
mllm © 2004-2008, allblue
#!/usr/local/allblue/apps/python/bin/python
Parsed in 0 seconds

拷贝源代码树files目录下的redhat-initd到init.d目录用来自启动。

mllm © 2004-2008, allblue
cp files/redhat-initd /etc/init.d/fail2ban
chmod 0755 /etc/init.d/fail2ban
Parsed in 0.001 seconds

最后写一个logrotate的配置文件,并拷贝成/etc/logrotate.d/fail2ban,用来定期清理日志文件

mllm © 2004-2008, allblue
/var/log/fail2ban.log {
    missingok
    notifempty
    size 30k
    create 0600 root root
    postrotate
        /usr/bin/fail2ban-client reload 2> /dev/null || true
    endscript
}
Parsed in 0.002 seconds

fail2ban的系统需求

看了你的博客,你装的是0.8.2吧,而我写这篇文章时,官方刚推出0.8.0,sshd.conf如果不修改默认规则会有漏洞,此外你所说的不需要安装python2.5,只是因为到了0.8.2后Minimum required Python version 从2.4重新降回2.3,这在ChangeLog里讲得很清楚了,原作者应该是考虑到了redhat以及centos巨大的用户群,做了一些妥协。而既然centos的默认python版本不支持,所以我就会安装最新版本。