我運行一個大型論壇,並像其他人一樣,與垃圾郵件發送者/機器人有問題。有大量已知的垃圾郵件IP列表,您可以下載並以htaccess格式使用,但我唯一關心的是文件大小。所以我想這個問題是多大太大了,因爲它會爲每個用戶加載。添加所有的IP到它大約100kb。IP禁止 - 最有效的方式?
是否有替代品可以減少開銷?可能用php做,或者由於文件大小和檢查IPS等原因會導致一些重負載?
任何意見將不勝感激。
感謝,
史蒂夫
我運行一個大型論壇,並像其他人一樣,與垃圾郵件發送者/機器人有問題。有大量已知的垃圾郵件IP列表,您可以下載並以htaccess格式使用,但我唯一關心的是文件大小。所以我想這個問題是多大太大了,因爲它會爲每個用戶加載。添加所有的IP到它大約100kb。IP禁止 - 最有效的方式?
是否有替代品可以減少開銷?可能用php做,或者由於文件大小和檢查IPS等原因會導致一些重負載?
任何意見將不勝感激。
感謝,
史蒂夫
好吧,你正在建設地址的數據庫,對不對?爲它使用數據庫產品不是有用的嗎?如果你還沒有,SQLite可以完成任務。
有幾個選項:
$regex = implode("|", array_map("preg_quote", file("ip.txt")));
但是,然後,IP塊列表往往不是非常可靠。也許你應該實施其他兩種解決方法:隱藏的表單域來檢測愚蠢的機器人。或者驗證碼來阻止非人類(不是非常方便用戶,但解決了問題)。
除非你已經有問題,你的服務器上的負載,你可能不會注意到,與100K .htaccess文件的區別。 可能有更快的替代方案,可能包括使用iptables或使用排序的ip列表,這些列表可以更快搜索匹配,甚至可以使用數據庫(儘管單個數據庫查詢的開銷可能會壓縮索引的好處表),但它可能不值得的努力,除非你運行高負載的論壇。
您也可以嘗試使用captcha或類似的。這個方向的一切都是在付出代價的,沒有什麼是100%可靠的。
通常比IP禁令更有效的方法。例如,只有表單中的隱藏字段纔會填寫,或者需要JavaScript或Cookie來提交表單。
對於IP禁止,我不會使用.htaccess文件。根據您的網絡服務器,它可能會讀取每個請求的htaccess文件。我肯定會將IP禁令添加到您的Web服務器虛擬主機配置中。這樣我就可以確定網絡服務器將它保存在RAM中,而不是一次又一次地讀取它。
通過PHP來做它也是一個選項。這樣,您也可以輕鬆地將禁令限制爲表單,例如在論壇中註冊。
請勿使用此類IP列表。他們很可能會過時,你可能會阻止錯誤的請求。只要投資於好的或更好的驗證碼,並且只是時時阻止IP,如果他們真的在做某種拒絕服務攻擊。
爲什麼強制Web服務器處理阻止用戶?我建議使用空路由(因爲使用iptables會減慢你的服務器,如果阻塞的IP條目數量增長)。
閱讀上http://www.cyberciti.biz/tips/how-do-i-drop-or-block-attackers-ip-with-null-routes.html
在.htaccess在你的DocumentRoot後:
Order Deny,Allow
附加一行:
Deny from <black ip>
這是一個靜態列表,只有網絡服務器將讀取它,所以可能不會。當你有改變數據和特別的時候,DBS會發揮全部的力量。與多個數據訪問器。對於一個靜態的IP列表檢查這將是開銷,雖然人們可能會爭論,如果它真的是太多的開銷。 (雖然我剛剛注意到在閱讀其他答案時,查詢它可能實際上在DBS中更加高效,包括索引列和所有內容。) – Kissaki 2011-02-04 09:51:30
@Kissaki:嗯,這取決於很多變量(分析在此非常重要)。如果OP已經有某種數據庫,這將更容易。順便說一句,「DBs對於只讀數據並不真正有用」是一種常見的誤解,因爲錯誤地反轉了「文件不適合併發讀寫訪問」 - 使用DB可以提高只讀性能(或殺死它,如果它做錯了,當然)。在特定的環境中測試和測量*是關鍵 - 一種尺寸永遠不適合所有人。 – Piskvor 2011-02-04 09:56:13