1. 程式人生 > 其它 >iptables + ipset + crontab 進行ssh登入爆破攔截

iptables + ipset + crontab 進行ssh登入爆破攔截

技術標籤:linuxipset

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