封鎖一個國家(大量 iP 範圍),實際封鎖的最佳實踐
這個問題顯然已經以許多不同的形式被問過很多次,但我找不到我所製定的具體計劃的實際答案。我們經營著一個受歡迎的歐洲商業交易網站,並從甚至無法參與我們提供的交易的國家獲得大量註冊/流量(許多零售商甚至在西歐以外都不為人所知)。
我已經確定了阻止大量此類流量的問題區域,但是(正如預期的那樣)需要數千個 IP 範圍。
我現在的問題(終於!)。在測試伺服器上,我創建了一個腳本來阻止 iptables 中的每個範圍,但是添加規則所花費的時間很長,然後 iptables 在此之後沒有響應(尤其是在嘗試 iptables -L 時)。
阻止大量 IP 範圍的最有效方法是什麼:
- iptables?或者我可以有效地預載入它們的外掛?
- hosts.deny?
- .htaccess(討厭,因為我會在每個負載平衡的 Web 伺服器上的 apache 中執行它)?
據我了解,問題不在於從哪裡獲取需要阻止的 IP 地址列表,而是如何使用 iptables 有效地阻止它們。執行一系列“iptables -A”命令的腳本將花費很長時間來載入規則,並且在此期間防火牆以不一致的策略執行。這對其性能也有重大影響。
我建議你嘗試模組 ipset ( http://ipset.netfilter.org/ )。它允許您直接操作地址塊表,您只需要一個 iptables 規則來匹配整個集合。您需要嘗試不同類型的集合,以找到能夠容納您需要阻止的 IP 地址塊數量並為您提供所需性能的集合。無論如何,它在匹配長長的地址塊列表方面要好得多,並允許您使用命令行工具重新載入它而無需觸及規則。
請注意,並非所有 Linux 發行版都在其預設配置中包含 ipset,因此您可能需要重新編譯核心模組和 iptables。
國家/地區地址塊會不時更改,因此您需要定期更新您的地址集。要重新載入已經使用的集合,您可以使用命令行工具“ipset”,並且很容易將其包裝在 shell 腳本中以自動化該過程。或者您可以使用 fwbuilder 生成您的 iptables 策略,並使用它生成的腳本來管理 ipset ( http://www.fwbuilder.org/4.0/docs/users_guide/address-table-object.html,請參閱“5.2. 13.1. 將地址表對象與 iptables IP 集一起使用”本章)