使用Fail2ban保护Linux系统  

jackxiang 2015-1-6 16:10 | |

最近一直在找一个合适的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。


安装_python2.5.1
#安装至自定义目录,防止系统混乱  ./configure --prefix=/usr/local/allblue/apps/Python-2.5.1  make  make install  cd /usr/local/allblue/apps/  ln -s Python-2.5.1 pythonParsed in 0.009 seconds


安装_fail2ban0.8
/usr/local/allblue/apps/python/bin/python setup.py install  #移动生成的可执行文件到/usr/bin  mv /usr/local/allblue/apps/python/bin/fail2ban-* /usr/binParsed in 0.009 seconds

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


mllm ? 2004-2010, allblue
#!/usr/bin/pythonParsed in 0.008 seconds

改为

mllm ? 2004-2010, allblue
#!/usr/local/allblue/apps/python/bin/pythonParsed in 0.008 seconds

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

cp files/redhat-initd /etc/init.d/fail2ban chmod 0755 /etc/init.d/fail2ban

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


fail2ban
/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.009 seconds

安装完毕的Fail2ban的配置文件在/etc/fail2ban下,0.8版本有两个配置文件fail2ban.conf和jail.conf两个,前者里面是一些fail2ban本身的参数设置,后者是具体保护服务的配置。

默认fail2ban.conf里面就三个参数,而且都有注释。


#默认日志的级别  loglevel = 3  #日志的目的  logtarget = /var/log/fail2ban.log  #socket的位置  socket = /tmp/fail2ban.sock  
jail.conf配置里是fail2ban所保护的具体服务的配置,这里以SSH来讲。

在jail.conf里有一个[DEFAULT]段,在这个段下的参数是全局参数,可以被其它段所覆盖。


#忽略IP,在这个清单里的IP不会被屏蔽  ignoreip = 127.0.0.1 172.13.14.15  #屏蔽时间  bantime  = 600  #发现时间,在此期间内重试超过规定次数,会激活fail2ban  findtime  = 600  #尝试次数  maxretry = 3  #日志修改检测机制  backend = auto    [ssh-iptables]  #激活  enabled  = true  #filter的名字,在filter.d目录下  filter   = sshd  #所采用的工作,按照名字可在action.d目录下找到  action   = iptables[name=SSH, port=ssh, protocol=tcp]             mail-whois[name=SSH, dest=root]  #目的分析日志  logpath  = /var/log/secure  #覆盖全局重试次数  maxretry = 5  #覆盖全局屏蔽时间  bantime  = 3600  
对jail.conf进行一定的设置后,就可以使用fail2ban了。

启动fail2ban


/etc/init.d/fail2ban start  
启动之后,只要符合filter所定义的正则式规则的日志项出现,就会执行相应的action。由于0.8源码树采用客户机/服务器的模式,因此可以很方便的查询fail2ban的执行情况。比方所,要查询刚才定义的“ssh-iptables”段的情况,只要执行


fail2ban-client status ssh-iptables  
会打印出结果

Status for the jail: ssh-iptables  |- filter  |  |- Currently failed: 0  |  `- Total failed:     5  `- action     |- Currently banned: 1     |  `- IP list:       192.168.210.21      `- Total banned:     1  
fail2ban-client也可以直接定义运行中的fail2ban参数

比如增加屏蔽时间为一天


fail2ban-client set ssh-iptables bantime 86400  
重新读入配置文件

fail2ban-client reload  
其它还有很多用法,可以不带参数执行fail2ban-client查看更多选项。

因为fail2ban的框架,所以可以执行修改filter或者action来满足自己的特殊需要,比如我希望改变fail2ban默认的iptables规则插入方式,那么我就可以到action.d目录下,找到希望修改的action,这里的例子是iptables.conf

默认actionstart的iptables规则有一条是


iptables -I INPUT -p <protocol> --dport <port> -j fail2ban-<name>  
这样就把fail2ban的规则插到INPUT链的最前面,而我希望自己写的一条iptables -A INPUT -p ALL -s 1.2.3.4/32 -j ACCEPT一直作为第一条规则从而使自己的IP作为信任IP不受防火墙后面规则的限制。那么就要修改fail2ban的启动规则,把上面那条改为

iptables -I INPUT 2 -p <protocol> --dport <port> -j fail2ban-<name>  
这样fail2ban就会把自己的规则作为INPUT链的第二条规则插入,而不影响第一条。

这里只是一个很简单的例子,你可以根据自己的规则,对action做更多的修改。

而在filter.d目录里就是一些日志的正则式匹配规则,系统自带了一些常见软件的匹配,如sshd,apache,postfix,vsftpd,pure-ftpd等等。来看看sshd的规则,就能了解这些filter应该怎么写,你就可以用fail2ban来保护更多自己的服务。

sshd.conf的内容


[Definition]    failregex = Authentication failure for .* from <HOST>              Failed [-/w]+ for .* from <HOST>              ROOT LOGIN REFUSED .* FROM <HOST>              [iI](?:llegal|nvalid) user .* from <HOST>    ignoreregex =  
可以看到,每行一则正则式,对应各种错误认证,如果你的sshd版本错误认证日志项不太一样,可以修改这里的,或者加入更多。
来自:http://zhumeng8337797.blog.163.com/blog/static/10076891420107181045105/

作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:http://jackxiang.com/post/7724/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!

评论列表
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]