iptables + ipset + crontab 进行ssh登录爆破拦截

本文介绍如何通过YUM安装ipset和iptables,创建自定义IP黑名单,并利用shell脚本监控登录失败,将频繁错误的IP加入黑名单,从而有效降低公网服务器被暴力破解的风险。通过定时任务实现自动化防护。

#公网服务器常常被暴力破解,零成本减少和防止爆破风险


############################示  例#################################

#安装
yum install ipset

yum install iptables

#新增地址列表,问题IP封禁7天
ipset create islist  hash:ip  hashsize 4096  maxelem 100000 timeout  604800

#设置拦截地址列表
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加入定时任务,每分钟运行
echo " * * * * *  root   /root/ip_set.sh" >> /etc/crontab

#完成效果

##################################################################

#常用命令

#创建一条IP地址集。参数(hash:net)是必须的,代表的是集合的类型,hash:net类型的IP集使用哈希来存储多个CIDR块
ipset create islist hash:net

#增加IP到地址列表
ipset add islist IP地址

#查看列表内容

ipset list

#从地址列表删除ip
ipset del islist IP地址

#删除地址列表,先清除iptables规则

iptables -F

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

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

io_py

你的鼓励是我创作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值