在 Freebsd 控制台或用 dmesg -a 查看系统消息的时候会发现类似于下面的大量信息,这是因为有人在尝试暴力破解 SSH 密码的原因。
Jun 22 06:42:00 vps sshd[80092]: error: PAM: authentication error for illegal user nuucp from 200.79.53.211
Jun 22 06:44:12 vps sshd[80118]: error: PAM: authentication error for illegal user nx from 87.139.25.251
Jun 22 06:47:00 vps sshd[80138]: error: PAM: authentication error for illegal user ocs from 85.41.229.81
Jun 22 06:49:23 vps sshd[80144]: error: PAM: authentication error for illegal user office1 from 211.25.200.194
Freebsd 下最常用的管理软件是SSH,SSH 本身可以限制一个IP输错多少次密码之后可以断掉链接,但不会封 IP ,攻击依旧可以持续链接来穷举密码。如果想在一定时间内封掉对方IP 的话,让其无法链接,可以通过 sshguard 来实现。
sshguard 可以与 Pf,IPFW,netfilter/iptables 等几个软件结合来实现输入密码错误多次之后禁止该 IP 再访问服务器的SSH端口。
安装和使用
cd /usr/ports/security/sshguard-ipfw/
make install clean
编辑 /etc/syslog.conf
把下面一行前面的 # 去掉。
#auth.info;authpriv.info |exec /usr/local/sbin/sshguard
重启 syslogd
/etc/rc.d/syslogd restart
等待一段时间,查看控制台或 dmesg -a ,出现下面类似消息说明 sshguard 已经正常运行了。
Jun 22 06:59:43 vps sshguard[79469]: Blocking 89.120.242.95:4 for >420secs: 4 failures over 0 seconds.
进一步增强安全性
FreeBSD 的 sshd_config 配置中默认允许用户输错 6 次密码,这也就是说之前设置的 sshguard 在对方尝试六次后才封 ip ,为了进一步缯强安全性,我们可以修改这一参数。
vi /etc/ssh/sshd_config
去掉 #MaxAuthTries 6 前面的 # 号,并修改为 2
MaxAuthTries 2