关于fail2ban:
fail2ban可以监视你的系统日志,然后匹配日志的错误信息(正则式匹配)执行相应的屏蔽动作(一般情况下是防火墙),而且可以发送e-mail通知系统管理员,很好、很实用、很强大!
简单来说其功能就是防止暴力破解。工作的原理是通过分析一定时间内的相关服务日志,将满足动作的相关IP利用iptables加入到dorp列表一定时间。
实战场景:
最近公网网站一直被别人暴力破解sshd服务密码。虽然没有成功,但会导致系统负载很高,原因是在暴力破解的时候,系统会不断地认证用户,从而增加了系统资源额外开销,导致访问公司网站速度很慢。
fail2ban安装:
fail2ban是python编写的,确保你的python版本大于2.4
#yum install fail2ban -y
相关主要配置文件:
/etc/fail2ban/action.d #动作文件夹,内含默认文件。iptables以及mail等动作配置
/etc/fail2ban/fail2ban.conf #定义了fai2ban日志级别、日志位置及socket文件位置
/etc/fail2ban/filter.d #条件文件夹,内含默认文件。过滤日志关键内容设置
/etc/fail2ban/jail.conf #主要配置文件,模块化。主要设置启用ban动作的服务及动作阀值等重要信息
/etc/rc.d/init.d/fail2ban #启动脚本文件
fail2ban把异常ssh ip加入iptables黑名单实战:
加入黑名单设置条件:
ssh远程登录5分钟内3次密码验证失败,禁止用户IP访问主机1小时,1小时该限制自动解除,用户可重新登录。
因为动作文件(action.d/iptables.conf)以及日志匹配条件文件(filter.d/sshd.conf )安装后是默认存在的。基本不用做任何修改。所有主要需要设置的就只有jail.conf文件。启用sshd服务的日志分析,指定动作阀值即可。
1.fail2ban.conf的相关配置:
[root@shvpuppet01 fail2ban]# egrep -v "^#|^$" fail2ban.conf
[Definition]
loglevel = INFO #logevel设置日志级别
logtarget = /var/log/fail2ban/fail2ban.log #logtarget设置日志文件存放位置
syslogsocket = auto
socket = /var/run/fail2ban/fail2ban.sock #socket存放位置
pidfile = /var/run/fail2ban/fail2ban.pid #pid存放位置
dbfile = /var/lib/fail2ban/fail2ban.sqlite3
dbpurgeage = 86400
2.jail.conf的相关配置:
全局设置:
注:单个服务检查设置,如设置bantime、findtime、maxretry和全局冲突,服务优先级大于全局设置。
[DEFAULT]
#忽略的IP列表,不受设置限制 如果有二组以上用空白做为间隔
ignoreip = 127.0.0.1/8
#屏蔽时间,单位:秒(设置IP被封锁的时间)
bantime = 600
#这个时间段内超过规定次数会被ban掉(设定多长时间内达到最大次数就解锁。)
findtime = 600
#最大尝试次数
maxretry = 3
#日志修改检测机制(gamin、polling和auto这三种)
backend = auto
#检测ssh并加入到iptables的具体设置
[ssh-iptables]
enabled = true
filter = sshd
action = iptables[name=SSH, port=ssh, protocol=tcp]
logpath = /var/log/secure
#5分钟内3次密码验证失败,禁止用户IP访问主机1小时。 配置如下
bantime = 3600 #禁止用户IP访问主机1小时
findtime = 300 #在5分钟内内出现规定次数就开始工作
maxretry = 3 #3次密码验证失败
3.iptables防火墙需要配置
因为fail2ban的工作的原理就是通过分析一定时间内的相关服务日志,将满足动作的相关IP利用iptables加入到dorp列表一定时间。
所以首先要启动防火墙iptables的相关配置:
1
2
|
#iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --name ROUTER-SSH --update --seconds 1800 --hitcount 5 -j DROP
#iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --name ROUTER-SSH --set -j ACCEPT
|
4.进行ssh加入iptables测试
随便找一台机器进行ssh测试
可以看到,尝试ssh登陆的ip被禁止了,现在来看下iptables有没有相关的规则
可以通过fail2ban-client命令,查看加入到黑名单的IP信息等内容
#fail2ban-client status ssh-iptables
5.至此实验成功,把fail2ban加入开机启动
6.fail2ban也可以实现nginx的认证,恶意扫描等并将加入黑名单
[yunvn-get-dos]
enabled = true
port = http,https
filter = nginx-bansniffer
action = iptables[name=IT300, port=http, protocol=tcp]
#sendmail-whois[name=IT300, dest=xxxxx@qq.com, sender=xxxxxx@163.com]
logpath = /var/log/nginx/access.log
maxretry = 300
findtime = 60
bantime = 3600
然后创建文件/etc/fail2ban/filter.d/nginx-bansniffer.conf,内容如下:
[Definition]
failregex = <HOST> -.*- .*HTTP/1.* .* .*$
ignoreregex =
最后重启fail2ban服务即可,在上面的配置中,我们对每60秒有超过300次访问的ip,封禁1小时。
本文转自激情燃烧的岁月博客51CTO博客,原文链接http://blog.51cto.com/liuzhengwei521/1969972如需转载请自行联系原作者
weilovepan520