通过 lastb 查看有好多失败的尝试登录,于是想着装一个 fail2ban,对于多次失败的登录限制 IP。直接 apt install fail2ban
即可。安装完以后进行配置,创建 /etc/fail2ban/jail.d/sshd.conf
文件,本来想着把 centos 7 上的配置直接拷过来,结果启动 fail2ban 服务时出错,提示 Have not found any log file for sshd jail。 这是因为 centos 中的登录日志在 /var/log/secure 文件中,所以其 logpath 设的是该 secure 文件,但是 ubuntu 下则没有该文件。ubuntu 下的登录日志是 /var/log/auth.log,配置如下:
[sshd]
ignoreip = 127.0.0.1/8 192.168.0.1/24 ...其他不受限的IP...
bantime = 3600 # -------------------------------------
findtime = 300 # 300秒内5次失败登录则会封禁IP一小时(3600s)
maxretry = 5 # -------------------------------------
enabled = true
filter = sshd
action = %(action_mwl)s
logpath = /var/log/auth.log
上面的 action 中的 mwl 表示三种操作,即禁用恶意IP(需操作防火墙)、发邮件、记录ban动作日志。然而启动 fail2ban 服务是依然提示错误,说找不到 /etc/postfix/main.cf 文件。于是想关闭发邮件功能,试着去掉 m 只保留 wl,结果不行,说没有此操作。如果 mwl 都去掉,只保留 %(action_)s 倒是能令 fail2ban 服务启动,但是此时并没有定义如何禁用IP的操作,并不是所需的。于是尝试换一个发邮件的程序,apt 安装了 sendmail 的同时会卸载 postfix。然而启动 fail2ban 时依然报错
sendmail[63499]: My unqualified host name (XXX) unknown; sleeping for retry
其中 XXX 是我的主机名。事实上,该报错来自 sendmail 服务,通过 systemctl status sendmail
可以看出其中就有该报错。网上搜索,说在 /etc/hosts 中 127.0.1.1 XXX
一行后面再加个 XXX.com
即可,也就是给主机名加个域名才行,真是莫名其妙。这回再重启 sendmail 和 fail2ban 就都正常了。
另外,可使用 fail2ban-client status sshd
来查看禁用状态。