目前我正在被/wpad.dat的请求淹没 – 这种方式似乎是一种攻击。
现在,我想要做的是为每个请求/wpad.dat的IP触发iptables,然后将其添加到黑名单。 有没有办法做到这一点? 这意味着IP将能够发送一个洪水请求,然后没有。
任何干净的方式来有效地做到这一点?
您可能会认为有其他方法来阻止IP地址。 例如, Fail2ban被devise为扫描日志文件给定的模式,并暂时阻止IP。
正如评论中提到的,您可能会将数以千计的IP添加到您的黑名单中。 当iptables
工作时,每个附加的规则可以增加每个请求的处理时间。 您可以使用ipset
作为替代方法,这在添加许多IP的情况下显得快得多。 这需要一个散列的方法来加快比赛。 有关iptables
和ipset
之间的详细信息和比较,请参阅使用ipset批量阻止IP地址 。
如果你想使用iptables
,这可能取决于你的web服务器是如何设置的。 假设你使用apache或者nginx,你可以设置它来触发一个需要wpad.dat
时候运行的cgi脚本。
例如,如果你的网站已经使用php,你可以使用内部重写来触发一个php脚本(或者ruby / python / java,这取决于你通常使用的语言)。
一旦脚本运行,只需要在命令行上运行这样的东西:
iptables -I INPUT -s {IP-HERE} -j DROP
该脚本需要以root身份执行,并且给予web用户root权限可能不是一个好主意,因此可以将其打包为shell脚本,将其作为root用户,并使用setuid
。
大警告:如果您访问该资源,可能会意外阻止自己,因此您可能需要设置 – --dport
到端口80或类似的东西。 这至less可以避免阻塞你的SSH协议,所以如果你设法阻止你自己,你可以SSH入你的服务器,并解除自己的阻止。
到期:由于永久阻止多个IP地址不是一个好主意,您可能需要跟踪被阻止的IP地址(可能将其附加到日志文件中),并创build一个cron作业以定期删除这些IP地址。 你只需要运行如下的东西:
iptables -D INPUT -s 192.168.1.100 -j DROP
自动阻塞对于iptables来说并不是微不足道,但是您可以通过添加以下规则来节制连接,使其不占用所有资源:
iptables -A INPUT -p tcp --dport 80 -m state --state NEW -m limit --limit 50/minute --limit-burst 200 -j ACCEPT