Fail2ban 通过扫描错误日志来禁止某些 IP 访问服务,它会直接修改防火墙规则来阻止来自这些 IP的请求。
我在使用 journalctl -xe --full 查日志时,发现大量的类似下面的日志:
sshd[13352]: pam_unix(sshd:auth): check pass; user unknown
sshd[13352]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=182.61.161.121
sshd[13352]: Failed password for invalid user chase from 182.61.161.121 port 58172 ssh2
sshd[13352]: Received disconnect from 182.61.161.121 port 58172:11: Bye Bye [preauth]
sshd[13352]: Disconnected from 182.61.161.121 port 58172 [preauth]
sshd[13354]: reverse mapping checking getaddrinfo for dynamic-ip-1868417225.cable.net.co [186.84.172.25] failed - POSSIBLE BREAK-IN ATTEM
sshd[13354]: Invalid user survey from 186.84.172.25 port 38058
sshd[13354]: input_userauth_request: invalid user survey [preauth]
可以发现是有陌生 IP 的用户在尝试破解 SSH 登录。
通过这条命令可以看到的确有大量失败登录的记录:
grep -o "Failed password" /var/log/secure|uniq -c
73426 Failed password
因此我采取了一些措施,首先修改了 ssh 的默认端口:
vim /etc/ssh/sshd_config
改完后需要重启 sshd:
systemctl restart sshd
然后就是安装了 Fail2ban。
安装与配置
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo
在我的 CentOS 服务器上用 yum 安装:
yum -y install fail2ban
然后进行配置:
vim /etc/fail2ban/jail.d/jail.local
ignoreip = 127.0.0.1/8 ::1
bantime = 300
findtime = 300
maxretry = 8
参数解释
#ignoreip:本部分允许我们列出 IP 白名单地址列表,Fail2Ban 不会禁止与列表中的地址匹配的主机
#bantime:主机被禁止的秒数
#findtime:如果在最近 findtime 秒期间已经发生了 maxretry 次重试,则主机会被禁止
#maxretry:是主机被禁止之前的失败次数
Fail2Ban 带有一组预定义的过滤器,用于各种服务,如 ssh、apache、nginx、squid、named、mysql、nagios 等。
不需要对配置文件进行任何更改,只需在服务区域中添加 enabled = true 这一行就可以启用任何服务。
禁用服务时则将 true 改为 false 即可
修改配置文件中sshd段如下两处
其中 22 要改为实际的 ssh 端口:
[sshd]
enabled = true
filter = sshd
action = iptables[name=ssh,port=22,protocol=tcp]
logpath = /var/log/secure
bantime = 600
maxretry = 3
保存后重启服务
systemctl restart fail2ban
查看状态
fail2ban-client status sshd 或 fail2ban-client get sshd banip
删除规则
fail2ban-client set ssh unbanip 104.218.13.80