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
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 "01* * * . /etc/profile;/bin/sh /root/ip_set.sh" > /etc/crontab