一、系統:Centos6.3 64位
二、方法:讀取/var/log/secure,查找關鍵字 Failed,例如(注:文中的IP地址特意做了刪減):
Sep 17 09:08:09 localhost sshd[29087]: Failed password for root from 13.7.3.6 port 44367 ssh2
Sep 17 09:08:20 localhost sshd[29087]: Failed password for root from 13.7.3.6 port 44367 ssh2
Sep 17 09:10:02 localhost sshd[29223]: Failed password for root from 13.7.3.6 port 56482 ssh2
Sep 17 09:10:14 localhost sshd[29223]: Failed password for root from 13.7.3.6 port 56482 ssh2
從這些行中提取IP地址,如果次數達到10次(腳本中判斷次數字元長度是否大於1)則將該IP寫到 /etc/hosts.deny中。
三、步驟:
1、先把始終允許的IP填入 /etc/hosts.allow ,這很重要!比如:
sshd:19.16.18.1:allow
sshd:19.16.18.2:allow
2、腳本 /usr/local/bin/secure_ssh.sh
#! /bin/bash
cat /var/log/secure|awk ‘/Failed/{print $(NF-3)}’|sort|uniq -c|awk ‘{print $2″=”$1;}’ > /usr/local/bin/black.list
for i in `cat /usr/local/bin/black.list`
do
IP=`echo $i |awk -F= ‘{print $1}’`
NUM=`echo $i|awk -F= ‘{print $2}’`
if [ ${#NUM} -gt 1 ]; then
grep $IP /etc/hosts.deny > /dev/null
if [ $? -gt 0 ];then
echo “sshd:$IP:deny” >> /etc/hosts.deny
fi
fi
done
3、將secure_ssh.sh腳本放入cron計畫任務,每1分鐘執行一次。
# crontab -e
*/1 * * * * sh /usr/local/bin/secure_ssh.sh
四、測試:
1、開兩個終端視窗,一個ssh連上伺服器,另一個用錯誤的密碼連接伺服器幾次。
很快,伺服器上黑名單檔裡已經有記錄了:
[root@ ~]# $ cat /usr/local/bin/black.txt
13.26.21.27=3
再看看伺服器上的hosts.deny
[root@ ~]# cat /etc/hosts.deny
sshd:13.7.3.6:deny
sshd:92.4.0.4:deny
sshd:94.10.4.2:deny
sshd:94.4.1.6:deny
sshd:11.64.11.5:deny
2、從另一個終端視窗繼續“暴力”連接伺服器。
看看伺服器上的黑名單檔:
[root@ ~]# cat /usr/local/bin/black.txt
13.26.21.27=6
再看看伺服器上的hosts.deny
[root@ ~]# cat /etc/hosts.deny
sshd:13.7.3.6:deny
sshd:92.4.0.4:deny
sshd:94.10.4.2:deny
sshd:94.4.1.6:deny
sshd:11.64.11.5:deny
sshd:13.26.21.27:deny
IP 已經被加入到伺服器的hosts.deny,再用正確的密碼連接伺服器,被拒絕:
$ ssh root@myserver.mydomain.com -p 2333
ssh_exchange_identification: Connection closed by remote host
注:
1.腳本為同事編寫。
2.伺服器sshd埠已改為2333,事實證明,改了埠後,暴力破解的ssh連接數銳減,呵呵。