OpenBSD
感謝iamok在腳本上的支持,他確實在寫shell方面很高。 :p
我的服務器是使用的OpenBSD 3.6,然後使用putty的公匙私匙方式登陸,並且在sshd_config裡面禁止了密碼登陸,但是仍有小人企圖暴力測試root密碼登陸,雖然無傷大雅,但是居心也叵測,所以做了一個腳本自動block這些小人。
首先,你需要在pf.conf 裡面添加一個table,不妨叫做<ssh_auto_block>,設置成presist方式,方便後面動態添加新的IP地址。
table <ssh_auto_block> persist file "/etc/pf_table/ssh_auto_block"
pf.conf在適當的地方添加
# ssh_auto_block
block in quick on $ext_if from <ssh_auto_block> to any
block out quick on $ext_if from any to <ssh_auto_block>
建立相應的文件/etc/pf_table/ssh_auto_block,一行一個需要block的IP,格式:111.111.111.111/32
然後編寫一個教本,基本思路是找到authlog中的非法登錄IP,然後使用pfctl將這些IP加入ssh_auto_bloak表。並且將當前authlog的內容存入一個以當天日期命名的文件,形如:authlog.2005-05-22 的文件,教本如下:
# This shell check the /var/log/authlog "Failed" login IP
#/bin/sh
Year=`date +"%Y-%m-%d"`
grep "Failed" /var/log/authlog | awk '{print $11}' | grep "[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}" |
awk '{count[$1]+=1}END{for(i in count)print i"/32"}' >> /etc/pf_table/ssh_auto_block
grep "Failed" /var/log/authlog | awk '{print $11}' | grep "[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}" |
awk '{count[$1]+=1}END{for(i in count)print i"/32"}' >> /tmp/ssh_auto_block
/usr/bin/more /var/log/authlog >> /var/log/authlog."$Year"
/usr/bin/true > /var/log/authlog
while read block_ip;do
pfctl -t ssh_auto_block -T add $block_ip
done < /tmp/ssh_auto_block
把這個教本設置成一個合理的執行時間,我是每2分鐘檢查一次,這樣的話,這些企圖暴力測試密碼的不法分子就會被block掉,如果不想永久加入黑名單的話,去掉上面腳本中的這一行就ok了。
grep "Failed" /var/log/authlog | awk '{print $11}' | grep "[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}" |
awk '{count[$1]+=1}END{for(i in count)print i"/32"}' >> /etc/pf_table/ssh_auto_block