原文:https://www.jianshu.com/p/b221b790cb1e
https://linux-audit.com/blocking-ip-addresses-in-linux-with-iptables/
iptables刪除規則
So if you would like to delete second rule :
iptables -D INPUT 2
------------------------------
如果你願意,你可以保存特定的IP集到一個文件中,以后可以從文件中還原:
ipset save banlist -f banlist.txt
-------------------------------------------------
再來說說今天的主題,黑名單。
第一階段:發現
有一天發現 服務器的 /var/log/btmp
文件有點大,所以搜索了一下
/var/log/btmp這個文件記錄錯誤的登錄嘗試,執行lastb命令就可以查看到最后一個不成功的登錄嘗試. 如果文件太大可刪除了再重新生成一個新的空文件。
得到了一個lastb
命令,發現大量的ssh登錄信息,多的令人發指。好吧,讓我來分析一下哪些IP次數最多
#存文件便於以下的操作 lastb >> lastb.log #過濾其它字段,只保留ip數據 cat lastb.log|awk -F " " '{print $3}' >> ips.log #記錄ip的出現次數 cat ips.log | sort | uniq -c >> ip_uniq.log #最終形成列表 cat ip_uniq.log|sort -k1,1nr >> output.log
有些同學說分段的命令完全可以合成一個嘛,使用高大上的管道符號。是的,形成一條命令即:
lastb | awk -F " " '{print $3}' | sort | uniq -c | sort -k1,1nr >> output.log
現在output.log的內容如下圖

到此第一階段完成,我知道了哪些IP曾對我的服務器進行過瘋狂的訪問。下一部就是寫到iptables的黑名單中。
第二階段:處理
挑選請求次數超過5次的,大概有1000來條。
問題來了,我需要一條一條加到iptables嗎? 答案是肯定的,肯定不是了。 今天我所遇到的問題,所能想到的方案,幾乎前輩們已經都已經實踐過了。
神器登場: ipset
,非自帶,請用yum install ipset
安裝
簡單講一下 ipset 的使用
#創建一個名稱為 blacklist 的IP集合,最大容量為10000 ipset create blacklist hash:ip maxelem 100000 #查看你的IP集 ipset list #增加ip ipset add blacklist 1.1.1.1 #再次查看IP集 ipset list

好的, ipset基本使用已經初見。現在將剛才的惡意IP導入到ipset中
#方法有點蹩腳 grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' output.log | awk '{print "ipset add blacklist",$0}'|sh
最后呢,將ipset與iptables關聯即可
iptables -I INPUT -m set --match-set banthis src -p tcp --destination-port 80 -j DROP /etc/init.d/iptables save
屏蔽后再嘗試ssh連接服務器,結果就如下圖,嗯 ,是的,結束。

第三階段:擴展
好文共享:linux大量屏蔽惡意IP地址
比本文針對性強,同時給出了iblocklist,這個網站已搜集了大量的惡意IP,可以拿使用來,這才是生產生。
---------------------------------------------------------------------------補充------------
自動IP地址禁用
現在你應該看到了IP集合的強大了。維護IP黑名單是一件繁瑣和費時的工作。實際上,有很多免費或者收費的服務可以來幫你完成這個。一個額外的好處是,讓我們看看如何自動將IP黑名單加到IP集中。
首先讓我們從iblocklist.com得到免費的黑名單,這個網站有不同的免費和收費的名單。免費的版本是P2P格式。
接下來我要使用一個名為iblocklist2ipset的開源Python工具來將P2P格式的黑名單轉化成IP集。
使用的下面命令安裝iblocklist2ipset:
1
|
pip install iblocklist2ipset
|
pip是python管理包的工具,一般服務器自帶,無需安裝。
在一些發行版如Fedora,你可能需要運行:
1
|
python-pip install iblocklist2ipset
|
現在到iblocklist.com,抓取任何一個P2P列表的URL(比如"level1"列表)。
粘帖URL到下面的命令中。
1
|
iblocklist2ipset generate --ipset banthis "http://list.iblocklist.com/?list=ydxerpxkpcfqjaybcssw&fileformat=p2p&archiveformat=gz" banlist.txt
|
上面的命令運行之后,你會得到一個名為banlist.txt的文件。如果查看它的內容,你會看到像這些:
1
2
3
4
5
6
7
8
|
create banlist hash:net family inet hashsize 131072 maxelem 237302
add banlist 1.2.4.0/24
add banlist 1.2.8.0/24
add banlist 1.9.75.8/32
add banlist 1.9.96.105/32
add banlist 1.9.102.251/32
add banlist 1.9.189.65/32
add banlist 1.16.0.0/14
|
你可以用下面的ipset命令來加載這個文件:
1
|
ipset restore -f banlist.txt
|
現在可以查看自動創建的IP集:
1
|
ipset list banlist
|
在寫這篇文章時候,“level1”類表包含了237,000個屏蔽的IP列表。你可以看到很多IP地址已經加入到IP集中了。
最后,創建一條iptables命令來屏蔽這些壞蛋!
1
|
iptables -I INPUT -m set --match-set banlist src -p tcp --destination-port 80 -j DROP
|
總結
屏蔽IP難免帶來誤傷,所以可以周期性釋放,比如定期把已經加入關黑名單一周的IP釋放出來,再犯規再給送進去。
我的網站,攻擊者IP大部分都是河南鄭州的,一看服務器都是景安網絡的服務器,也是醉醉的。