IPtables自动添加黑名单脚本
1、脚本需求
-
登陆服务器日志/var/log/secure
-
检测检查日志中认证失败的行以及频繁发送请求的IP地址(失败条件可自行添加)
-
添加ip进iptables防火墙并阻止 --> DROP (可根究需求换成REJECT)
-
禁止该IP访问服务器所有端口;(或者指定ip 加-s参数)
-
定时检测脚本时间。规则内,大于2小时的IP自动放通,小于的则添加入黑名单(可自行设定时间)
-
将脚本加入Crontab实现自动禁止恶意IP
-
定时清理系统安全日志备份文件
2、脚本(可以根据自己需求,更改相对应参数。)
#!/bin/bash
#Add blacklist script
#add by K_sheep
#2022年8月2日
#########################################
#判断iptables文件目录是否存在,不存在则创建
IPTABLE_DIR=/opt/iptables_script
if [ -d $IPTABLE_DIR ];then
echo "目录已存在"
tree $IPTABLE_DIR
sleep 1
else
echo “文件不存在,创建目录中....”
sleep 1
mkdir -p $IPTABLE_DIR/secure
echo "创建目录成功。"
tree $IPTABLE_DIR
sleep 1
fi
#添加返回失败ip的黑名单进iptables,2小时之后移除
DATE=$(date "+%Y%m%d%H")
FILE_TXT=/opt/iptables_script/file_ip.txt
echo -e "\033[40;33m------------欢迎使用Iptables黑名单添加功能-----------\033[0m"
for ip in $(awk '/Received disconnect/;/Invalid user/;/Connection closed/' /var/log/secure | grep -aiowE "([0-9]{1,3}\.){3}[0-9]{1,3}" |sort -r |uniq -c| awk '{if(($1>=2)) print $2}');
do
iptables -t filter -A INPUT -s $ip/32 -m tcp -p tcp -j DROP;
echo $ip $DATE >> $FILE_TXT
done
while read LINE
do
TIME=$(echo $LINE |awk '{print $2}')
IP=$(echo $LINE |awk '{print $1}')
EXPR=$(expr $DATE \- $TIME)
echo "时间参数$TIME IP参数$IP 对比差参数$EXPR"
if [[ $EXPR -gt 2 ]];then
echo $IP
sed -i "/$IP/d" $FILE_TXT
iptables -t filter -D INPUT -s $IP/32 -m tcp -p tcp -j DROP
else
echo -e "\033[40;33m------Iptables黑名单添加为-------- \033[0m"
sleep 1
echo "加入黑名单IP:$IP。"
fi
done < $FILE_TXT
#备份系统安全日志内容到指定文件
cp /var/log/secure $IPTABLE_DIR/secure/$(date "+%F-%H%M")_secure.txt
#清空系统安全日志并重启服务(防止安全日志服务无法写入)
echo '' > /var/log/secure
service rsyslog restart
#加载iptables加入规则并且重启itables
service iptables save
service iptables restart
#定时清理系统安全日志备份内容7天之内
find $IPTABLE_DIR/secure/ -mtime +7 -type f | xargs rm -f
3、最终脚本目录结构
[root@lb iptables_script]# tree /opt/iptables_script/
/opt/iptables_script/
├── file_ip.sh
├── file_ip.txt
└── secure
└── 2022-08-02-1528_secure.txt
4、加入定时任务执行脚本
crontab -e
5 * * * * /opt/iptables_script/file_ip.sh > /dev/null 2>&1