sshd被攻擊的自動防御方法v3
本文為sshd被攻擊的自動防御方法的第三版(改進版本),修改腳本,使之能通用,比如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、啟動命令
# /usr/bin/swatch -t /var/log/secure --daemon
Note:
至此就完畢了。各個服務共用一個數據庫,如果還有其他服務需要做防御,可以再添加相關watchfor配置,但是驗證失敗的日志需要出現(xiàn)在/var/log/secure中。這是共用一個日志文件的情況,當然了,還可以再啟動一個swatch進程。其他用途自己擴展。