萬盛學電腦網

 萬盛學電腦網 >> 服務器教程 >> linux服務器(nginx或者apache)限制IP訪問

linux服務器(nginx或者apache)限制IP訪問

 近段時間一直飽受垃圾評論的攻擊,服務器一度負載太高而宕機,參見:WordPress垃圾評論防御記。開始試了很多方法都不能很好的解決問題,最後通過屏蔽垃圾評論IP的方式,算是解決了這個問題,當然這個方法不是最好的,但是確實是非常實用的方法。

然後一些朋友就問我是怎麼屏蔽這些垃圾評論的IP的,以及能否共享這些垃圾評論的IP,還有朋友問怎麼提取自己博客的垃圾評論的IP,這個稍稍講解下,高手略過,我也是個菜鳥。

nginx環境下

新建 denyip.conf 文件,在服務器/usr/local/nginx/conf目錄下的nginx.conf裡面,加上

include denyip.conf; 
將屏蔽的IP放到 denyip.conf 裡面

deny 110.83.0.0/16; 

deny 110.84.111.0/24; 

deny 110.85.124.56;

保存之後將 denyip.conf 上傳到/usr/local/nginx/conf目錄下,弄好之後記得重啟nginx。

上面我列舉了3中屏蔽類型,第一行的是屏蔽110.83.*.*的所有IP,第二行的是屏蔽110.84.111.*的所有IP,第三行是只屏蔽110.85.124.56這個IP。

第一行的屏蔽的范圍較大,很容易誤攔,第三行的疲敝最穩妥,但是IP越多導致文件會很大,也不算太可取,第二行的方式是我目前使用的,好處壞處介於2這之間,大家可以自由選擇。

垃圾評論IP的收集
有人問我如何收集這些垃圾評論IP的,其實很簡單,一個SQL就搞定,然後Excle處理下。

首先安裝Akismet插件,這個插件會把垃圾評論標記為spam,只安裝這一個就可以了,其他任何防評論插件請勿安裝。

SELECT `comment_author_IP` FROM `wp_comments` WHERE `comment_approved`= 'spam' 
執行好了之後,導出這些IP,保存csv格式,然後直接用Excle打開,排序,去重,就得到唯一的垃圾評論IP了。

得到垃圾評論了之後就可以按照上面的方式操作了。

apache環境下

空間支持 .htaccess

<Limit GET HEAD POST> 

order allow,deny 

deny from 110.85.104.152 

deny from 110.85.113 

deny from 110.85.113.0/24 

deny from 110.87 

deny from 110.87.0.0/16 

deny from 110.86.167.210 110.86.184.181 

deny from 110.86.185.0/24 110.86.187.0/24 

allow from all 

</Limit> 
apache下關於限制IP的寫法比較多種,IP開始的第一行,是最普通的限制唯一IP,第二行跟第三行表達的內容是一樣的,限制110.85.113.* 下所有的IP;第四五行也是一樣的,限制110.87.*.* 下所有的IP;第六行是限制這2個IP,第7行就是顯示這兩個IP段;注意多個IP限制時用空格分開。

目前我收集的垃圾評論的IP
經過大約一周時間的統計,目前收集了一批垃圾評論的IP,用純真IP批量跑了這些IP,其中以福建莆田市的居多,美國的也不少。如果你也飽受垃圾評論的攻擊,可以用用這個方法和IP,我會定期更新IP數據的。


iptables IP限制訪問 指定IP訪問

只允許指定的一個IP訪問服務器

vi /etc/sysconfig/iptables

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]

-A INPUT -s 165.232.121.17 -j ACCEPT
-A INPUT -j DROP
COMMIT

iptables 限制ip訪問

通過iptables限制9889端口的訪問(只允許192.168.1.201、192.168.1.202、192.168.1.203),其他ip都禁止訪問
iptables -I INPUT -p tcp --dport 9889 -j DROP
iptables -I INPUT -s 192.168.1.201 -p tcp --dport 9889 -j ACCEPT
iptables -I INPUT -s 192.168.1.202 -p tcp --dport 9889 -j ACCEPT
iptables -I INPUT -s 192.168.1.203 -p tcp --dport 9889 -j ACCEPT

 

如果你之前的防火牆設置了永久關閉,則需要解除

chkconfig --list 查看啟動服務,找到要關閉服務名
chkconfig --level 235 服務名 off 【在等級3和5為開機運行服務】

系統運行級別有0—6,就在/etc/inittab中的0-6

    等級0表示:表示關機

    等級1表示:單用戶模式

    等級2表示:無網絡連接的多用戶命令行模式

    等級3表示:有網絡連接的多用戶命令行模式

    等級4表示:不可用

    等級5表示:帶圖形界面的多用戶模式

    等級6表示:重新啟動2011/10/26

copyright © 萬盛學電腦網 all rights reserved