预期目标:

通过部署fail2ban,利用其本身的过滤器,结合firewalld/iptables来ban掉多次身份验证错误或者达到自定义过滤规则的IP

组件简介:

fail2ban通过扫描日志文件,获取多次失败登陆或者达到特定过滤规则的IP地址。在配置文件中设置的时间内更新系统防火墙(firewalld/iptables)规则来拒绝这些恶意IP的新连接。
注意:fail2ban仅仅只是能够降低不正确的身份验证连续验证速度,并不能真正的消除弱身份验证的风险。

配置步骤

启动自己的防火墙(firewalld/iptables)

安装fail2ban

yum install epel-release -y
yum install fail2ban -y

修改配置文件(防御ssh暴力攻击)

(1)firewalld版本

vim /etc/fail2ban/jail.local

[DEFAULT]
ignoreip = 127.0.0.1/8
bantime  = 86400
findtime = 600
maxretry = 5
banaction = firewallcmd-ipset
action = %(action_mwl)s

[sshd]
enabled = true
filter  = sshd
port    = 22
action = %(action_mwl)s
logpath = /var/log/secure

(2)iptables版本

vim /etc/fail2ban/jail.local

[sshd]
enabled = true
filter = sshd
action = iptables[name=SSH, port=ssh, protocol=tcp]
logpath = /var/log/secure
findtime = 600
maxretry = 5
bantime = 86400

修改配置文件(防御cc攻击)

(1)firewalld

vim /etc/fail2ban/filter.d/nginx-cc.conf

[Definition]
failregex = <HOST> -.*- .*HTTP/1.* .* .*$ 
ignoreregex =

vim /etc/fail2ban/jail.local

[nginx-cc]
enabled = true
port = http,https
filter = nginx-cc
action = %(action_mwl)s
maxretry = 20
findtime = 60
bantime = 600
logpath = /var/log/nginx/access.log

(2)iptables

vim /etc/fail2ban/filter.d/nginx-cc.conf

[Definition]
failregex = <HOST> -.*- .*HTTP/1.* .* .*$ 
ignoreregex =

vim /etc/fail2ban/jail.local

[nginx-cc]
enabled = true
filter = nginx-cc
action = iptables[name=nginx-cc, port=http,https, protocol=tcp]
maxretry = 20
findtime = 60
bantime = 600
logpath = /var/log/nginx/access.log

修改配置文件(防御wordpress管理界面扫描)

(1)firewalld

vim /etc/fail2ban/filter.d/wordpress.conf

[Definition]
failregex = ^<HOST> -.* /wp-login.php.* HTTP/1\.."
ignoreregex =

vim /etc/fail2ban/jail.local

[wordpress]
enabled = true
port = http,https
filter = wordpress
action = %(action_mwl)s
maxretry = 20
findtime = 60
bantime = 600
logpath = /var/log/nginx/access.log

(2)iptables

vim /etc/fail2ban/filter.d/wordpress.conf

[Definition]
failregex = ^<HOST> -.* /wp-login.php.* HTTP/1\.."
ignoreregex =

vim /etc/fail2ban/jail.local

[wordpress]
enabled  = true
filter   = wordpress
action = iptables[name=wordpress, port=http,https, protocol=tcp]
maxretry = 20
findtime = 60
bantime = 600
logpath = /var/log/nginx/access.log

配置文件注释:

(1)ignoreip:IP白名单,白名单中的IP不会屏蔽,可填写多个以(,)分隔
(2)bantime:屏蔽时间,单位为秒(s)
(3)findtime:时间范围
(4)maxretry:最大次数
(5)banaction:屏蔽IP所使用的方法,上面使用firewalld屏蔽端口
(6)action:采取的行动
(7)[ssd]:名称,可随意填写
(8)filter:规则名称,必须填写位于/etc/fail2ban/filter.d目录里面的规则
(9)logpath:需要坚实的日志路径

启动服务

systemctl start fail2ban
systemctl enable fail2ban

查看状态( 返回“pong”为服务正常状态的响应 )

fail2ban-client ping

查看fail2ban状态

fail2ban-client status

查看某个规则的状态

fail2ban-client status 规则名称

服务动作日志路径:/var/log/fail2ban.log

解锁IP:

fail2ban-client set 规则名称 unbanip 被封IP