很多情況下,你可能需要在Linux下封鎖IP位址。例如,身為一個終端用戶,你可能想要免受間諜軟體或IP追蹤的困擾。如果你是系統管理員,你可能想要禁止垃圾IP位址存取你們的公司郵件伺服器。或者你因為一些原因想要禁止某些國家存取你的web服務。在許多情況下,然而,你的IP位址屏蔽清單可能很快就會成長到幾萬的IP。該如何處理這個?
解決方案: ipset + iblocklist2ipset
最簡單的方法就是yum安裝,但是該方法版本比較低,缺少一些使用的模組參數等,所以不大推薦;
yum install ipset -y
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
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集合的強大了。一件繁瑣和費時的工作。 ##首先讓我們從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參數,導入黑名單文件,所以建議用源碼包安裝最新版本以上是在Linux下如何批量屏蔽惡意IP位址防攻擊的案例分析的詳細內容。更多資訊請關注PHP中文網其他相關文章!