很多情況下,你可能需要在Linux下遮蔽IP地址。比如,作為一個終端使用者,你可能想要免受間諜軟體或者IP追蹤的困擾。如果你是一名系統管理員,你可能想要禁止垃圾IP地址訪問你們的公司郵件伺服器。或者你因一些原因想要禁止某些國家訪問你的web服務。在許多情況下,然而,你的IP地址遮蔽列表可能會很快地增長到幾萬的IP。該如何處理這個?
解決方案: ipset + iblocklist2ipset
安裝:
官方網站:http://ipset.netfilter.org/install.html
最簡單的方法就是yum安裝,但是該方法版本比較低,缺少一些使用的模組引數等,所以不大推薦;
yum install ipset -y
編譯安裝:
1.依賴環境:
yum install libmnl libmnl-devel kernel-devel libtool-devel -y
(新版本的安裝方法:git pull git://git.netfilter.org/libmnl.git 執行./autogen.sh)
(備註:如果只安裝libmnl時,會出現下面的報錯:
checking for libmnl... configure: error: Package requirements (libmnl >= 1) were not met: No package 'libmnl' found Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables libmnl_CFLAGS and libmnl_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. )
在編譯的時候可能提示找不到/lib/modules/2.6.32-431.el6.x86_64/source
經過排查發現這個軟連線/lib/modules/2.6.32-431.el6.x86_64/build -->/usr/src/kernels/2.6.32-431.el6.x86_64 不存在
解決辦法:重新建立軟連線
ln -sb /usr/src/kernels/2.6.32-573.3.1.el6.x86_64 /lib/modules/2.6.32-431.el6.x86_64/build
在執行 ./autogen.sh時報錯:
找不到 /usr/share/libtool/
解決辦法:安裝libtool-devel工具包即可 yum install libtool-devel
2.編譯安裝ipset (linux kernel source code (version >= 2.6.32))
wget -P /usr/local/src http://ipset.netfilter.org/ipset-6.26.tar.bz2 cd /usr/local/src && tar xjf ipset-6.26.tar.bz2 && cd ipset-6.26 ./autogen.sh ./configure make make modules make install make modules_install
注意:不同linux核心使用不同版本的原始碼包
附註:linux kernel source code (version >= 2.6.16 or >= 2.4.36)
編譯安裝:
wget -P /usr/local/src http://ipset.netfilter.org/ipset-4.5.tar.bz2 cd /usr/local/src && tar xf ipset-4.5.tar.bz2 && cd ipset-4.5 make KERNEL_DIR=http://img.xue163.com/lib/modules/$(shell uname -r)/build #$(shell uname -r)使用shell命令獲取 make KERNEL_DIR=http://img.xue163.com/lib/modules/$(shell uname -r)/build install
常用使用命令:
ipset list 檢視ip集列表資訊 ipset create pythontab hash:ip maxelem 1000000 建立一個IP集pythontab,指定型別為hash:ip,設定ip集最多儲存IP數為1000000 ipset add pythontab X.X.X.X 增加一個ip地址到IP集pythontab中去 ipset add pythontab X.X.X.X/24 增加一個網段到IP集pythontab中去 ipset dell pythontab X.X.X.X 刪除IP集中指定的IP地址 ipset list 檢視當前所有list ipset save pythontab -f pythontab.txt 將IP集pythontab中的資訊儲存到當前檔案目錄下面的檔案pythontab.txt中 ipset destroy pythontab 刪除指定的IP集pythontab ipset restore -f pythontab.txt 將儲存的pythontab.txt檔案中的IP集資訊重新匯入到ipset中 其他命令參考 ipset --help iptable命令參考: iptables -I INPUT -m set --match-set pythontab src -p tcp --destination-port 80 -j DROP #拒絕ipset IP集pythontab中的地址訪問伺服器的80埠 service iptables save service iptables restart
自動IP地址禁用
現在你應該看到了IP集合的強大了。維護IP黑名單是一件繁瑣和費時的工作。實際上,有很多免費或者收費的服務可以來幫你完成這個。一個額外的好處是,讓我們看看如何自動將IP黑名單加到IP集中。
首先讓我們從iblocklist.com得到免費的黑名單
接下來我要使用一個名為iblocklist2ipset的開源Python工具來將黑名單轉化成IP集。
首先,你需要安裝了pip
使用的下面命令安裝iblocklist2ipset。
$ pip install iblocklist2ipset
在一些發行版如Fedora,你可能需要執行:
$ python-pip install iblocklist2ipset
現在到iblocklist.com,抓取任何一個P2P列表的URL(比如"level1"列表)。
下載解壓,然後儲存為txt檔案,比如叫做pythontab.txt, 因為iblocklist2ipset僅支援url獲取list,所以把pythontab.txt放到你網站的任意目錄。比如:ipset目錄
$ iblocklist2ipset generate --ipset pythontab "http://www.pythontab.com/ipset/pythontab.txt" > pythontab.txt
上面的命令執行之後,你會得到一個名為pythontab.txt的檔案。如果檢視它的內容,你會看到像這些:
create pythontab hash:net family inet hashsize 131072 maxelem 237302 add pythontab 1.2.4.0/24 add pythontab 1.2.8.0/24 add pythontab 1.9.75.8/32 add pythontab 1.9.96.105/32 add pythontab 1.9.102.251/32 add pythontab 1.9.189.65/32
你可以用下面的ipset命令來載入這個檔案:
$ ipset restore -f pythontab.txt
現在可以檢視自動建立的IP集:
$ ipset list pythontab
這樣就省去了手動管理的麻煩。
注意,在centos下使用yum安裝的不是最新版,可能會不支援-f引數,匯入黑名單檔案,所以建議用原始碼包安裝最新版本