系统相关
首页 > 系统相关> > iptables + ipset + crontab 进行ssh登录爆破拦截

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