我试图阻止一个 IP(网络压力工具 - 一个按在线秒数销售 DDoS 机器人的 DDoS 网站),第一个我尝试使用 iptables 阻止的 IP 是:
iptables -A INPUT -d 173.193.26.73 -j DROP
iptables -A INPUT -s 173.193.26.73 -j DROP
但是我在 iftop 上仍然能够看到 ip 和带宽。在 tcpdump 上也仍然能够看到 ip。
这是正常的吗?这里有什么问题?
答案1
是的,这是正常的。 iptables
不会阻止入站流量出现在您的物理接口上,从而增加您的iftop
计数,也不会阻止内核看到它在那里,因此输出tcpdump
。但是,它确实会阻止内核将流量传递给可能正在监听它的任何事物。
如果你看到任何输出流量响应这些输入数据包,则说明出现了问题。但除此之外,没有问题,这是正常的。
答案2
正如 MadHatter 提到的...
数据包仍然在物理上被传输到您的系统,iptables 只是在它们到达发送者希望它们到达的地方之前将它们过滤掉。
然而...
您可以采取一些措施来解决根本问题:
在你的机器和外界之间放置一个路由器它会为您进行过滤并透明地转发所有其他数据包。
路由器针对此类操作进行了优化,因此作为第一道防线,这当然不是一个坏主意。不过,如果路由器无法自动更新固件,则您需要保持固件更新。
当然,在连接路由器并确保它按照您的要求运行的同时,您还需要将 DNS 记录更改为故障转移服务器(如果您担心停机,那很有可能)。
使用
-I
而不是-A
;这样,阻止规则将首先得到处理,并且您的 CPU 不必耗费太多周期来检查您立即知道违反所有其他规则的数据包。如果该网站试图对您实施 DoS 攻击,我猜它们构成了重要的流量来源,如果是这样,那么适用于它们的规则应该更早处理。一个好的经验法则是根据事件发生的可能性对规则进行排序。网络事件发生的可能性越大,应该越早处理。
当然,这也必须与处理网络事件的复杂性进行权衡(即,如果事件 A 发生的可能性是事件 B 的两倍,但需要 300 倍的处理,则事件 B 的规则可能应该首先执行),但对于试图进行 DoS 的站点的几个丢弃规则而言,这可能是一个安全的选择。
防止 iptables 规则集变得过于繁琐的一种方法是创建新的链来处理每种类型的流量(例如,处理私有网络连接尝试的链、处理 ssh 限制的链等),这样 INPUT 链(如果您有
main
编程背景,可以将其视为一种方法)只需调用其他链来完成处理。因此,如果您想尝试新的规则集,或更改不同事件的处理顺序,只需更改 INPUT 中无条件跳转的顺序即可。检查其 ISP 的服务条款如果他们违反了规定,请通知他们的 ISP(尽可能具体地说明他们是如何违反规定的;您需要提供参考,并且要表现得礼貌而专业。如果收到您电子邮件的人喜欢您,并且您使他们的工作更容易完成,那么您就更有可能得到结果)。