当服务器上线一段时间,您可以在auth.log中发现大量的ssh扫描记录,采用密匙登陆后,在ssh安全上已经没有多大的顾虑,不爽的是这些人在不断的浪费服务器的资源。有关ssh密匙登陆请看freebsd下的ssh安全防护这篇文章。在该文的尾部我提到过可以利用sshguard来锁定ssh扫描,下面将详细讲解sshguard结合ipfw的安装及配置。
在freebsd 7.3(/8) release下,sshguard是根据不同的防火墙采用不同的包:
www[/usr/ports/security]# ls -G | grep sshguard
sshguard
sshguard-ipfilter
sshguard-ipfw
sshguard-pf
请根据您系统中防火墙的规则选择不同的安装包,本文将主要讲解sshguard + ipfw,因此:
# cd /usr/ports/security/sshguard-ipfw
#make install clean;
安装完之后得到如下结果:
##########################################################################
Sshguard installed successfully.
Verify that IPFW is active with "ipfw show".
Your /etc/syslog.conf has been added a line for sshguard; uncomment it
and use "/etc/rc.d/syslogd reload" for activating it.
See sshguard(8) and for additional info.
##########################################################################
接下来需要配置sshguard:
#touch /var/log/sshguard.fifo
# vi /etc/syslog.conf
在文件中添加如下的两行(如果已经存在则无需添加,注意前面不要有“#”):
auth.info;authpriv.info |exec /usr/local/sbin/sshguard
auth.info;authpriv.info |/var/log/sshguard.fifo
重启syslogd:
#/etc/rc.d/syslogd reload
或者#killall -HUP syslogd
启动sshguard:
#cat /var/log/sshguard.fifo | /usr/local/sbin/sshguard &
查看是否启动成功:
#top
#如果进程中有sshguard,则说明启动成功。也可以查看auth.log记录:
#cat /var/log/auth.log,如果有下列的信息,则说明启动成功:
Dec 22 12:35:06 www sshguard[18212]: Started successfully [(a,p,s)=(4, 420, 1200)], now ready to scan.
需要注意的是sshguard的ipfw规则编号是从55000到55050,而ipfw采用第一匹配原则,也就是规则一旦匹配生效后就不会再往下匹配。因此,如果你的ssh放行规则在55000之前,将使得sshguard添加的ipfw规则失效,解决的办法是把ssh的ipfw规则放到55050后面:
#vi /etc/ipfw.conf
$cmd 60000 allow tcp from any to any dst-port 22 in via $pif setup limit src-addr 2
#我这里的规则设置为
ipfw add 60001 allow tcp from any to me 22 in
ipfw add 60002 allow tcp from any to me 80 in
ipfw add 60003 allow tcp from me 22 to any out
ipfw add 60004 allow tcp from any to me 9000 in
千万需要注意的是ipfw的总拒绝规则号必须在ssh放行规则之后,否则您将把自己锁在外面!
别忘记了重新载入ipfw规则:
#sh /etc/ipfw.conf
重启看能否用ssh远程连接服务器,OK,大功告成,全文完。