如何在Linux下批量遮蔽惡意IP地址防攻擊

pythontab發表於2015-11-25

很多情況下,你可能需要在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引數,匯入黑名單檔案,所以建議用原始碼包安裝最新版本


相關文章