原文出自: http://sysadmin.blog.51cto.com/83876/201082
一、Fail2ban介绍:
Fail2ban scans log files like /var/log/pwdfail or /var/log/apache/error_log and bans IP that makes too many password failures. It updates firewall rules to reject the IP address.
一句话:Fail2ban扫描应用日志,通过iptables等防火墙将有入侵威胁的IP拒之门外。
本文以Fail2ban0.8.4源码包在RHEL 5.2下安装配置为例介绍。
配置实现目标:ssh用户10分钟内4次密码验证失败,禁止用户IP访问主机1小时,1小时该限制自动解除,用户可重新登录。
二、 Fail2ban安装:
安装前需检查是否有python运行环境。
[root@sys]# rpm -qa | grep python | grep 2.4.3
python-2.4.3-21.el5
python-devel-2.4.3-21.el5
开始安装
tar xvfj fail2ban-0.8.4.tar.bz2
cd fail2ban-0.8.4
python setup.py install
执行以上三步即完成Fail2ban的安装,安装后需要根据自己的需求进行配置。
我这里以配置Fail2ban加固sshd为例。
Fail2ban主要配置文件如下:
[root@dbserver ~]# ls /etc/fail2ban/
action.d fail2ban.conf filter.d jail.conf
ufail2ban.conf
fail2ban.conf定义了fai2ban日志位置及日志级别, 此配置文件保持默认即可,一般不做修改。
默认fail2ban.conf里面就三个参数,而且都有注释。
loglevel = 3#默认日志的级别
logtarget = /var/log/fail2ban.log#日志的目的
socket = /tmp/fail2ban.sock#socket的位置
ujail.conf
jail.conf是fail2ban主要的配置文件,在jail.conf里有一个[DEFAULT]段,这个段下的参数是全局参数.
ignoreip = 127.0.0.1 #忽略IP,在这个清单里的IP不会被屏蔽
bantime = 600 #屏蔽时间,该bantime将被[ssh-iptables]中bantime覆盖;
findtime = 600 #发现时间,在此期间内重试超过规定次数,会激活fail2ban
maxretry = 3 #默认尝试次数
backend = auto #日志修改检测机制
[ssh-iptables] #该段为sshd服务小节,段内配置优先全局配置。
enabled = true #激活,默认是未激活;
filter = sshd # 过滤规则filter的名字,对应filter.d目录下的sshd.conf
#所采用的工作,按照名字可在action.d目录下找到
action = iptables[name=SSH, port=ssh, protocol=tcp]
mail-whois[name=SSH, dest=root]
logpath = /var/log/secure #sshd log,根据linux发行版本不同而不同,注意修改;
maxretry = 4 #覆盖全局重试次数
bantime = 3600 #覆盖全局屏蔽时间
ufilter.d和action.d
这个两个文件夹分别放着日志的过滤规则及所用采取的动作。
如filter.d/sshd.conf有可对sshd日志/var/log/secure进行分析。
验证过滤规则是否有效:fail2ban-regex [logfile] [filter.conf]
在我系统上,我是这样执行的:
Fail2ban-regex /var/log/secure /etc/fail2ban/filter.d/sshd.conf
注意:如果你的日志启用了压缩,默认的过滤规则无法正确解析类似 last message repeated 3 times。请根据自身情况调整findtime参数。
Action.d文件夹为根据过滤情况要执行的动作。默认是iptable+mail-whois。执行何动作在jail.conf文件中定义。如是ssh-iptables中配置如下:
action = iptables[name=SSH, port=ssh, protocol=tcp]
mail-whois[name=SSH, dest=root]
三、 fail2ban启停
Fail2ban有3个可执行程序,分别是fail2ban-server、fail2ban-client、fail2ban-regex。
u 启动fail2ban
Fail2ban-client start
u 关闭fail2ban
Fail2ban-client stop
u 验证fail2ban工作情况
观察fail2ban运行情况,我常用的有三条命令:
1、 fail2ban-client status,会看到有个Jail list名称为sshd-iptables;
2、iptables –nL 正常的话会看到多出来一个chain 名为fail2ban-SSH;
3、查看fail2ban日志/var/log/fail2ban.log,看fail2ban是否启动正常,被禁用的IP也会在这里看到;
/var/log/fail2ban.log显示如下所示:
2009-09-11 23:20:51,202 fail2ban.server : INFO Changed logging target to /var/log/fail2ban.log for Fail2ban v0.8.4
2009-09-11 23:20:51,203 fail2ban.jail : INFO Creating new jail 'ssh-iptables'
2009-09-11 23:20:51,273 fail2ban.jail : INFO Jail 'ssh-iptables' uses Gamin
2009-09-11 23:20:51,390 fail2ban.filter : INFO Added logfile = /var/log/secure
……
2009-09-11 23:20:51,395 fail2ban.actions: INFO Set banTime = 6000
2009-09-11 23:20:51,530 fail2ban.jail : INFO Jail 'ssh-iptables' started
……
2009-09-11 23:20:51,530 fail2ban.actions: WARNING [ssh-iptables] Unban 58.143.242.123
2009-09-11 23:20:52,530 fail2ban.actions: WARNING [ssh-iptables] Ban 210.51.22.207
2009-09-11 23:30:52,530 fail2ban.actions: WARNING [ssh-iptables] Unban 210.51.22.207
其他命令可以用fail2ban-server –help
u 设置fail2ban开机自动启动,
cp ./redhat-initd /etc/init.d/fail2ban #redhat-initd在解压到目录下
# chkconfig --add fail2ban
#service fail2ban start
至此,使用fail2ban0.8.4安全加固sshd服务配置完成。希望本文对你增加linux系统安全有帮助。