由于伺服器開放着SSH協定,經常在網際網路上會有一些莫名的“駭客”在掃描我伺服器的22端口并試圖登入,這給伺服器安全帶來了很多的隐患。如何保障SSH的安全,自然成為了我們管理者工作的重中之重。
BSD的Ports系統收錄了N多的 SSH保護軟體,其中有denyhosts,sshit,sshguard,file2ban(ports中無此項)等,起初,我用denyhosts來 阻擋SSH的惡意登入,發現它是調用TCP wrapper來實作的,感覺上并不是太好。後來,無意間發現了SSHguard,它可以結合BSD系統内置的防火牆(IPFW、PF、IPFILTER)來過濾SSH登入,非常不錯。實作過程如下:
1)安裝SSHguard
# cd /usr/ports/security/sshguard-pf
# make install distclean
2)删除syslogd裡的注釋,啟動SSHguard
auth.info;authpriv.info |exec /usr/local/sbin/sshguard
3)重新加載syslogd
# /etc/rc.d/syslogd reload
如看到以下資訊,證明成功啟動
Nov 20 08:00:01 test sshguard[54247]: Started successfully [(a,p,s)=(4, 420, 1200)], now ready to scan.
4)在PF裡加入以下規則,即可
# Define Tables for SSH
table <sshguard> persist
block in quick on $ext_if proto tcp from <sshguard> to any port 22 label "ssh bruteforce"
看日志,已經有人試圖登入,被SSHguard阻止了,帥吧
Nov 20 03:56:44 test sshd[52381]: Invalid user globus from 88.191.121.114
Nov 20 03:56:47 test sshd[52383]: Invalid user condor from 88.191.121.114
最後,屏蔽所有人對我伺服器外網口的icmp探測 (Default PF rules is block all)
pass out inet proto icmp all icmp-type $icmp_types keep state label "allow ping"
注意哦,是pass out,而非pass in,這樣,内網使用者依然可以檢測與外網的通訊,而外網使用者無法探測我伺服器外網口是否存活。
檢視SSH阻擊清單
#pfctl -tsshguard -Tshow
59.63.157.63
109.123.126.166
116.125.127.120
123.212.43.243
125.250.249.34
174.123.157.66
182.18.29.190
195.49.134.149
202.170.126.6
218.240.1.117
218.241.155.13
221.132.34.138
哇,這麼多IP被block了
本文轉自dongfang_09859 51CTO部落格,原文連結:http://blog.51cto.com/hellosa/540041,如需轉載請自行聯系原作者