端口实际上并没有被 iptables 阻塞

端口实际上并没有被 iptables 阻塞

我在 Ubuntu 14.04.4 LTS 上,我受到了某些端口的攻击,我在自己的服务器上阻止了除 SSH 之外的所有端口,我通过这种方式进行操作:

iptables -F
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

iptables -A INPUT -p icmp -j DROP
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -j DROP

iptables -A OUTPUT -p icmp -j DROP
iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT
iptables -A OUTPUT -j DROP

iptables -A FORWARD -p icmp -j DROP
iptables -A FORWARD -j DROP

当我攻击自己的服务器并通过 TCPDump 查看数据包时,仍然有数据包传入 27015 INPUT UDP 端口!我错过了什么?这些数据包导致我的服务器延迟!

答案1

tcpdump 显示网络上正在发生的事情。它不会告诉您该数据包是否会被转发到其他地方、由机器处理还是被丢弃,它不会告诉您机器是否生成了控制消息 (ICMP) 来响应该数据包 - 它只是说:该数据包是从网络进入机器还是离开机器。

我相信,在您的情况下,发往 udp 27015 的数据包确实到达了机器。这就是它出现在 tcpdump 中的原因。然后,如果您发布的规则集确实应用于机器,则该数据包被第 8 行的规则丢弃。tcpdump 日志中出现并不表示您的防火墙没有工作。tcpdump 根本不是分析数据包进入机器后发生了什么情况的合适工具。

您无法控制其他人发送的内容。您只能控制如何处理这些内容。您设置防火墙以丢弃所有内容 - 这不会阻止任何人向您发送流量。想想:如果他们尖叫,您的耳膜就会震动,即使您不注意这些尖叫声。

这就是“带宽” DoS 攻击可能发生的方式 —— 攻击者不需要受害者有任何弱点,他们只需用大量浪费的流量淹没他们的整个带宽交换机,阻止合法流量到达受害者。

对抗这种情况的唯一方法是拥有更高的带宽(一般来说,您需要的带宽比攻击者为攻击安排的带宽还要多)。

答案2

我会花时间学习 iptables 并学习如何正确保护您的 linux 服务器。网上有很多不好的教程,所以要小心,不要只是复制和粘贴给你的规则(即使是我的规则),除非你知道它们的作用。了解每条规则的作用以及它如何保护你很重要,一次添加一条规则并每次都进行测试也很重要。

服务器攻击很常见,所以你必须学会​​应对它,并且在不破坏你自己的服务器的情况下,黑客和机器人不会很快消失。

我不会发布我的整个 iptables 规则集,因为它们适用于我,对你来说可能毫无意义。不过,下面的摘录规则可能会帮助你处理 ICMP 和 UDP 端口。

这也是您发布的内容的一个问题,因为您没有明确指定任何有关 UDP 的规则。请参阅下面的规则并根据需要自定义它们,查看有关删除 UDP 端口的部分。

要非常谨慎地采取极端措施,尝试删除除端口 22 之外的所有端口以允许自己进入(正如您所做的那样),这不会对您有任何帮助,您实际上已经削弱了您的服务器并让您自己的生活变得困难。

您必须了解自己在哪里受到攻击以及如何有效地处理它。一旦 iptables 规则出现问题,您就可能完全无法访问服务器,如果您没有 root 访问权限,您就完蛋了。

您可以尝试以下这些方法,但请理解这些方法并非适合您情况的实际规则,而且在处理各种不同类型的威胁时,它们还远远不够完善。我花了数周时间才完善了整个 iptables 设置,并且我还采取了许多其他措施来防范各种入侵。

-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 17 -j DROP
-A INPUT -p icmp -m icmp --icmp-type 13 -j DROP
-A INPUT -p icmp -m limit --limit 1/sec -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j LOG --log-prefix "[FW - SSH: ]"
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -m state --state INVALID -j DROP
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN FIN,SYN -j DROP
-A INPUT -p tcp -m tcp --tcp-flags SYN,RST SYN,RST -j DROP
-A INPUT -p tcp -m tcp --tcp-flags RST RST -m limit --limit 2/sec --limit-burst 2 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-net-unreachable
-A INPUT -p tcp -m multiport --dports 135,137,138,139,445,1433,1434 -j DROP
-A INPUT -p udp -m multiport --dports 135,137,138,139,445,1433,1434 -j DROP

-A FORWARD -m state --state INVALID -j DROP
-A FORWARD -j REJECT --reject-with icmp-port-unreachable

-A OUTPUT -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -m state --state INVALID -j DROP
-A OUTPUT -j REJECT --reject-with icmp-port-unreachable

相关内容