今天中午,心血来潮统计了一下 ssh 失败登陆次数,发现最高的一个 ip 有 4000 多次登录失败记录。调研了一下,fail2ban 可以设置规则自动拦截尝试失败次数过多的 IP,部署方法如下:

安装 fail2ban

yum -y install fail2ban

请注意防火墙软件是firewalld而不是iptables

# 查看状态
firewall-cmd --state

# 启动 firewalld
systemctl start firewalld

# 开机启动
systemctl enable firewalld

默认的firewalld会禁用所有端口连接,因此你需要手动的放行端口,比如你的博客服务的 web 端口:

firewall-cmd --zone=public --add-port=80/tcp --permanent

# 重载配置
firewall-cmd --reload

# 查看已经放行的端口
firewall-cmd --zone=public --list-ports

配置 fail2ban

fail2ban 的配置文件位于/etc/fail2ban/, 我们在该目录新建一个自定义配置文件jail.local 然后加入如下信息:

[DEFAULT]
ignoreip = 127.0.0.1/8
bantime = 86400
findtime = 600
maxretry = 5
banaction = firewallcmd-ipset
sender = email@email.com
senername = Fail2Ban
action = %(action_mwl)s

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

启动 fail2ban

systemctl start fail2ban

查看 fail2ban 日志以及 ip 禁用列表

# 查看日志
tail -F /var/log/fail2ban

# 查看禁用 ip
fail2ban-client status sshd