fail2ban可以监视你的系统日志,然后匹配日志的错误信息(正则表达式匹配)执行相应的屏蔽动作(一般情况下是调用防火墙屏蔽)。比如有人在试探你的SSH、SMTP、FTP密码,只要达到你预设的次数,fail2ban就会调用防火墙屏蔽这个IP,而且可以发送e-mail通知系统管理员。

  1. 安装EPEL源
    yum -y install epel-release.noarch
  2. 安装支持firewalld的fail2ban
    yum -y install fail2ban-firewalld fail2ban-systemd

  3. 安装相关软件,让fail2ban可以通过postfix发送提醒邮件(可选)
    安装配置postfix用于发送提醒邮件请点这里

yum -y install postfix whois fail2ban-sendmail
systemctl enable postfix
systemctl start postfix

  1. 设定fail2ban
    新建配置文件jail.local

vi /etc/fail2ban/jail.local
输入以下内容后保存退出

[DEFAULT]
bantime = 86400
findtime = 300
maxretry = 3
sender = fail2ban@ifshow.com
destemail = admin@ifshow.com
action = %(action_mwl)s
[sshd]
enabled = true
port = 2345
[sshd-ddos]
enabled = true
port = 2345
bantime是被封IP禁止访问的时间,设定值为24小时,单位是秒。
findtime是检测时间,在此时间内超过规定的次数会激活fail2ban,单位是秒。
maxretry是允许错误登录的最大次数,和findtime配合使用。
sender为邮件发送者,destemail为接收通知邮箱。
action是触发fail2ban采取的动作,action_mwl为禁IP+发通知邮件+写入日志。
sshd区块的enabled = true开启对SSH服务的防护,port为SSH的自定义端口。
sshd-ddos区块的enabled = true开启SSH-DDOS防护,port为SSH的自定义端口。

如果装有vsftpd,在配置文件最后加上以下内容(port为vsftpd的登录和数据端口)

[vsftpd]
enabled = true
port = 2121,2122

  1. 启用fail2ban并设为开机自启
    systemctl enable fail2ban
    systemctl start fail2ban
  2. fail2ban常用命令
    查看SSH服务监护状态,能看到当前被禁IP。

fail2ban-client status sshd
在SSH监护服务忽略IP列表(白名单)中添加IP 192.168.111.111

fail2ban-client set sshd addignoreip 192.168.111.111
在SSH监护服务忽略IP列表(白名单)中删除IP 192.168.111.111

fail2ban-client set sshd delignoreip 192.168.111.111
查看fail2ban日志

tail /var/log/fail2ban.log

查看禁用了那些IP和取消禁止策略
可以使用‘ firewall-cmd --direct --get-all-rules’ 查看临时策略集;也可以使用ipset list命令进行查看
如果要删除172.20.20.51 这个地址,那么可以使用下面的命令:
ipset del fail2ban-sshd 172.20.20.51 -exist

本文参考以下内容:
1,http://blog.163.com/l1_jun/blog/static/14386388201642443431107/
2,http://blog.csdn.net/xiaokurong/article/details/77369704