iptables + ipset + crontab 进行ssh登录爆破拦截
作者:互联网
#安装
yum install ipset
#常用命令
#创建一条IP地址集。参数(hash:net)是必须的,代表的是集合的类型,hash:net类型的IP集使用哈希来存储多个CIDR块
ipset create islist hash:net
#增加IP到这个集合
ipset add islist IP地址
#删除IP到这个集合
ipset del islist IP地址
#删除集合
ipset destroy 集合名
##################################################################
ipset创建基于ip hash的集合名称
例如 blacklist表示集合的名字是blacklist
hashsize 4096 表示初始值为4096个,如果满了,这个 hash 会自动扩容为之前的两倍。最大能存储的数量是 maxelem指定的值;hashsize 的默认值是 1024
maxelem 1000000表示最大元素个数为100000 ,ipset默认值为65536
timeout 3600 表示封禁3600s;
iptables开启封禁80,443策略。
ipset create blacklist hash:ip hashsize 4096 maxelem 1000000 timeout 3600
iptables -A INPUT -p tcp -m set --match-set blacklist src -m multiport --dports 443,80 -j DROP
如果我们不希望有过期时间,可以不加timeout这个参数
ipset create blacklist hash:ip
当然,也可以封禁黑名单IP的所有请求。
iptables -A INPUT -m set --match-set blacklist src -j DROP
##################################################################
#如博客设置方案
#新增地址集
ipset create islist hash:ip hashsize 4096 maxelem 1000000 timeout 3600
#设置拦截地址
iptables -A INPUT -m set --match-set islist src -j DROP
#编写自动添加shell脚本
#!/bin/bash
FILES="/var/log/secure"
DATE=`date -d -1hour +%d" "%H`
ip_file="/tmp/ip_file"
threshold=3
WORD="Failed password for invalid"
WORD2="Failed password for root"
#1小时内非root登录错误大于3次加入ipset设置的黑名单列表
grep $DATE $FILES |grep "$WORD" |awk -F " " '{print$13}'|sort |uniq -c|sort -n |tail -n 1 > $ip_file
ip_file_num=`cat /tmp/ip_file|awk -F " " '{print$1}'`
ip_file_ip=`cat /tmp/ip_file|awk -F " " '{print$2}'`
if [[ $ip_file_num -gt $threshold ]];then
ipset add islist $ip_file_ip
fi
#1小时内root登录错误大于3次加入ipset设置的黑名单列表
grep $DATE $FILES |grep "$WORD2" |awk -F " " '{print$11}'|sort |uniq -c|sort -n |tail -n 1 > $ip_file
ip_file_num=`cat /tmp/ip_file|awk -F " " '{print$1}'`
ip_file_ip=`cat /tmp/ip_file|awk -F " " '{print$2}'`
if [[ $ip_file_num -gt $threshold ]];then
ipset add islist $ip_file_ip
fi
###########################################################
#crontab加入定时任务,个人博客量小每1小时运行一次
echo "0 1 * * * . /etc/profile;/bin/sh /root/ip_set.sh" > /etc/crontab
标签:iptables,set,hash,islist,ipset,ip,crontab,file 来源: https://blog.csdn.net/zhangbaoxiang/article/details/111968461