帶有 Cloudflare 的 iptables
我正在使用 fail2ban 來阻止 Web 漏洞掃描程序。如果繞過 CloudFlare,它在訪問該站點時可以正常工作,但是如果使用者通過它仍然可以訪問它。我安裝了mod_cloudflare。
使用 Cloudflare 時是否可以使用 IPtables 阻止使用者?
Ubuntu 伺服器 12.04 32 位
訪問日誌:
112.64.89.231 - - [29/Aug/2012:19:16:01 -0500] "GET /muieblackcat HTTP/1.1" 404 469 "-" "-"
監獄配置文件
[apache-probe] enabled = true port = http,https filter = apache-probe logpath = /var/log/apache2/access.log action = iptables-multiport[name=apache-probe, port="http,https", protocol=tcp] maxretry = 1 bantime = 30 # Test
Apache-probe.conf
[Definition] failregex = ^<HOST>.*"GET \/muieblackcat HTTP\/1\.1".* ignoreregex =
這不起作用(並且不會起作用)的原因是 iptables 在直接連接到您的機器的 IP 地址上執行。如果您使用 CloudFlare,這意味著您正在接收來自 CloudFlare 的連接,而不是直接來自最終使用者。
這是一個範例,取自我在 CloudFlare 上的一個站點:
::ffff:108.162.221.19 www.yes-www.org - [05/Sep/2012:21:50:50 +0000] "GET / HTTP/1.1" 200 9585 "http://no-www.org/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.8 (KHTML, like Gecko) Chrome/23.0.1251.2 Safari/537.8" "64.244.153.130"
在這裡,我們看到連接是從 CloudFlare 的伺服器之一 108.162.221.19 接收的。如果這在 iptables 中被阻止,那麼 CloudFlare 將無法聯繫到我們(從那個地址;幸運的是他們還有很多其他地址)。與 CloudFlare 的連接實際上來自 64.244.153.130,它出現在 X-Forwarded-For 和 CF-Connecting-IP 標頭中。
不幸的是,在這種設置中,這意味著您不能真正使用 iptables 來阻止訪問者。不過,您確實有幾個選擇:
- 正如 Damon 所說,使用 CloudFlare 的威脅控制面板。如果您有很多要阻止的 IP 地址,或者它們經常更改,這會很痛苦。
- 在應用程序級別阻止請求。諸如我自己的Bad Behavior之類的工具可以完成這類事情。