sshd被攻擊的自動(dòng)防御方法v3
本文為sshd被攻擊的自動(dòng)防御方法的第三版(改進(jìn)版本),修改腳本,使之能通用,比如ftp的攻擊防御。
完整的配置如下:
1、配置文件.swatchrc
# cat /root/.swatchrc
#
# bad login attempts
watchfor /pam_unix\(sshd:auth\): authentication failure; .+ rhost=([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)/
#echo magenta
bell 0
exec "/root/swatch-new.sh $1 22"
watchfor /pam_unix\(vsftpd:auth\): authentication failure; .+ rhost=([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)/
bell 0
exec "/root/swatch-new.sh $1 21"
2、處理腳本swatch-new.sh
# cat /root/swatch-new.sh
#!/bin/sh
#攻擊者ip
ip=$1
#攻擊端口
port=$2
#echo $ip >> /root/sshd_blocked_ip_list
sql="/usr/bin/sqlite3 /root/sshd_blocked_ip.db "
blockcmd="/sbin/iptables -I INPUT -s $ip -p tcp --dport $port -j DROP"
unblockcmd=${blockcmd/-I/-D}
blocktime=$($sql "select blocktime from ip where ip='$ip'")
: ${blocktime:=0}
$blockcmd || exit 1
if [ $blocktime -eq 0 ];then
/usr/bin/at "now + 1 hours" <<< "$unblockcmd 2>> /root/at_result.log"
$sql "insert into ip values('$ip',1,1)"
else
((blocktime*=2))
/usr/bin/at "now + $blocktime hours" <<< "$unblockcmd 2>> /root/at_result.log"
$sql "update ip set blocktime=$blocktime,count=count+1 where ip='$ip'"
fi
3、啟動(dòng)命令
# /usr/bin/swatch -t /var/log/secure --daemon
Note:
至此就完畢了。各個(gè)服務(wù)共用一個(gè)數(shù)據(jù)庫(kù),如果還有其他服務(wù)需要做防御,可以再添加相關(guān)watchfor配置,但是驗(yàn)證失敗的日志需要出現(xiàn)在/var/log/secure中。這是共用一個(gè)日志文件的情況,當(dāng)然了,還可以再啟動(dòng)一個(gè)swatch進(jìn)程。其他用途自己擴(kuò)展。