我有一个 PBX(电话系统,称为阿斯特西克) 可与 udp 和 tcp 配合使用。有时我会收到来自某些我想阻止的 IP 地址的无效请求。我无法阻止这些请求,除非我重新启动计算机。我认为原因是 UFW 不会阻止已建立的连接。
假设我从 IP 地址收到恶意请求 1.2.3.4
。然后我需要通过执行以下命令来阻止这些请求:
sudo ufw insert 1 deny from 1.2.3.4 to any
我需要这样insert 1
才能使该规则在其他规则之前执行。
无论如何,即使我执行该命令,我仍然看到我的计算机回复1.2.3.4
。问题是由于已经建立了连接,因此 ufw 不会丢弃这些数据包,直到这些连接关闭。
我找到了一个临时的解决方案:
1)我打开nano /etc/ufw/before.rules
2)注释以下行:
(图中未注释的行。但请注释红圈内的所有内容)
3)ufw disable
然后重启防火墙ufw enable
如果我注释掉这些行,那么我的防火墙就会按我想要的方式工作。它会立即阻止连接!
问题是,注释掉这些行会导致我的 DNS 停止工作换句话说,现在当我执行时,ping google.com
我看到uknown host google.com
为什么当我注释掉这些行时 DNS 就停止工作了?简而言之,我需要在执行时sudo ufw insert 1 deny from 1.2.3.4 to any
不再收到来自该 IP 的请求!每次我想阻止 IP 地址时,我都无法承受重新启动计算机的后果。
答案1
远野,
ufw 是 iptables 的前端。您本质上想问的是,当您停止接受相关、已建立的连接时,DNS 为何会失败。conntrack 会跟踪您的连接。如果流量与 conntrack 中的条目匹配,则该流量为已建立。如果已建立的连接创建新连接,则该流量为相关。如果流量是新的,且未建立或未相关,则该流量为新流量。
如果已经建立了连接,则需要在链的开头插入一个 drop 指令。编辑 /etc/ufw/before.rules,以便在注释的规则之前有一个阻止部分。在-A ufw-before-input -s 1.2.3.4 -j DROP
那里添加一个条目。然后使用sudo ufw reload
。
如果您仍然遇到问题,请考虑使用 iptables 而不是 ufw,因为 ufw 是 iptables 的前端,不包含其所有选择。
https://www.cyberciti.biz/faq/how-to-block-an-ip-address-with-ufw-on-ubuntu-linux-server/
答案2
UDP 是一种无状态协议,但 Linux 内核仍会跟踪它的 IP 和端口号 30 秒,以确定已建立和相关的流量。(30 秒或中的值/proc/sys/net/netfilter/nf_conntrack_udp_timeout
) - ServerFault 链接:Iptables:“-p udp --state ESTABLISHED”
DNS 通过 UDP 工作,因此如果您发送 DNS 查询,并且已注释掉允许相关返回流量的规则,则您将不会收到任何回复 -> DNS 损坏。
由于 UDP“状态”被跟踪了 30 秒,您尝试在 INPUT 顶部插入新的阻止规则不会产生任何效果。“ufw-before-input”首先发生并允许 ESTABLISHED 流量,然后您的 INPUT 规则才会看到它并将其丢弃。
要修复此问题,您需要:
使用类似“conntrack”的命令删除要阻止的主机的跟踪 UDP 条目,然后将阻止规则添加到防火墙。不会有已建立或相关的连接,因此阻止应立即生效。例如删除特定的 conntrack 条目?
重新制定防火墙规则,以便在 DROP 之后在 INPUT 规则中执行 ESTABLISHED、RELATED 规则,而不是先执行它们。
每次我想阻止 IP 地址时,我都无法重新启动计算机
但是您能负担得起一次过滤 40 亿个 IP 地址,并手动阻止它们吗?这似乎不合理。使用 IPS 设备,使用 fail2ban。