- 我有一个网站,或者一个 IRC 服务器,或者其他什么。
- 服务器保存所有唯一访问者(IP 地址)的列表。
- 我有一个紧急按钮,当激活时,会拒绝所有不在列表中的访问者访问。
这是为了在不关闭常规用户的服务的情况下阻止大规模的恶意攻击。
在底层实现此功能的最佳方法是什么,以便它与所用服务器类型无关?比如一些 iptables 巫术之类的?
发行版是 Ubuntu。
答案1
您可以编写一个脚本,只允许它们,并删除其他所有内容,例如:
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT #to allow all established connections to continue, and to allow outgoing connections to get data back
iptables -A INPUT -i ethX -s {allowedIP#1} -j ACCEPT #allow first ip
iptables -A INPUT -i ethX -s {allowedIP#2} -j ACCEPT #..second
... #third and on
iptables -A INPUT -i ethX - -j DROP #drop everything else
当然,如果你的 IP 列表非常大,这就会占用大量资源。
答案2
#!/usr/bin/bash
/sbin/iptables -A INPUT -m state --state NEW -i eth1 -p tcp --destination-port {YOURIRCPORT} -j DROP
将其命名为 panickfw.sh
要解锁,请创建另一个类似的脚本,其内容如下:
/sbin/iptables -D INPUT -m state --state NEW -i eth1 -p tcp --destination-port {YOURIRCPORT} -j DROP
您可以对其进行调整,以便可以使用参数来执行任一规则。