使用 linuxlastb
命令,我发现我的服务器遭到了来自世界各地许多不同 IP 的暴力攻击!我开发了一个脚本来检测暴力攻击者并通过lastb
阻止他们iptables
。脚本如下:
#!/bin/bash
cd /root/
windowSize=100
tresh=10
lastb | head -n $windowSize | awk '{print $3}' | uniq -c > .ips
nlines=`wc .ips -l | awk '{print $1}'`
END=`expr $nlines - 1 `
for i in `seq 0 $END`;
do
range=`expr $nlines - $i`
count=`tail .ips -n $range | head -n 1 | awk '{print $1}'`
if [ $count -gt $tresh ] ; then
IP=`tail .ips -n $range | head -n 1 | awk '{print $2}'`
if [ ! -z .blips ] ; then
touch .blips
fi ;
blocked=`cat .blips | grep $IP -c`
if [ $blocked = '0' ] ; then
echo blocking $IP
iptables -A INPUT -s $IP -j DROP
echo $IP >> .blips
fi ;
fi;
done
rm .ips
如果我每小时通过 crond 运行该脚本,是否会引起任何问题?
答案1
是的,您没有采取任何措施来确保您连接到系统的 IP 地址被排除,因此您可能会将自己锁定在系统之外。
更好的解决方案是安装失败2ban它被广泛用于做你想做的事情。
答案2
建议的解决方案是缺乏的(或者说是不聪明的),因为它不保存 IPTABLES,所以对 IPTABLES 所做的更改将在下次启动时丢失。
你应该通过提交来保存被阻止的 IP:/sbin/service iptables save
更改完成 /sbin/service iptables 保存 rm .ips
另一方面,由于系统是自动化的,也许在看到 .blips 中的更改后才手动提交是明智的
答案3
DenyHosts 或 Fail2ban 的效果比大多数自制的自定义脚本更好。