如何丢弃 INPUT 链上所有不必要的 UDP 流量?

如何丢弃 INPUT 链上所有不必要的 UDP 流量?

大约两周前,我开始运行 Tor 中继,它本身仅在 TCP 上运行。

因此,我想丢弃所有不需要的 UDP 数据包。

但我不知道,实际需要什么(如果有的话)。

我的防火墙在正常运行大约 1 天后看起来像这样 -注意不要代表我的 TCP 保护规则发表评论或回答,我只是做一些个人研究:

iptables -L -v --line-numbers

Chain INPUT (policy DROP 17862 packets, 1945K bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1        0     0 DROP       icmp --  any    any     anywhere             anywhere             u32 ! "0x4&0x3fff=0x0" /* ICMP fragmented packets */
2        0     0 DROP       icmp --  any    any     anywhere             anywhere             length 1492:65535 /* ICMP oversized unfragmented packets */
3        1  1500 DROP       tcp  --  any    any     anywhere             anywhere             tcp flags:FIN,SYN,RST,PSH,ACK,URG/NONE /* NULL scan */
4        0     0 DROP       tcp  --  any    any     anywhere             anywhere             tcp flags:FIN,SYN,RST,PSH,ACK,URG/FIN,SYN,RST,PSH,ACK,URG /* Xmas scan */
5        0     0 DROP       tcp  --  any    any     anywhere             anywhere             tcp flags:FIN,SYN,RST,PSH,ACK,URG/FIN,PSH,URG /* stealth scan */
6        0     0 DROP       tcp  --  any    any     anywhere             anywhere             tcp flags:FIN,SYN,RST,PSH,ACK,URG/FIN,SYN,RST,ACK,URG /* pscan 1 */
7        0     0 DROP       tcp  --  any    any     anywhere             anywhere             tcp flags:FIN,SYN/FIN,SYN /* pscan 2 */
8        0     0 DROP       tcp  --  any    any     anywhere             anywhere             tcp flags:FIN,RST/FIN,RST /* pscan 3 */
9        2   104 DROP       tcp  --  any    any     anywhere             anywhere             tcp flags:SYN,RST/SYN,RST /* SYN-RST scan */
10       0     0 DROP       tcp  --  any    any     anywhere             anywhere             tcp flags:ACK,URG/URG /* URG scan */
11       0     0 DROP       tcp  --  any    any     anywhere             anywhere             tcp flags:FIN,SYN,RST,PSH,ACK,URG/FIN,SYN /* SYN-FIN scan */
12       0     0 DROP       tcp  --  any    any     anywhere             anywhere             tcp flags:FIN,SYN,RST,PSH,ACK,URG/FIN,PSH,URG /* nmap Xmas scan */
13       0     0 DROP       tcp  --  any    any     anywhere             anywhere             tcp flags:FIN,SYN,RST,PSH,ACK,URG/FIN /* FIN scan */
14       0     0 DROP       tcp  --  any    any     anywhere             anywhere             tcp flags:FIN,SYN,RST,PSH,ACK,URG/FIN,SYN,PSH,URG /* nmap-id scan */
15       0     0 DROP       all  -f  any    any     anywhere             anywhere             /* fragmented packets */
16    5049 1668K DROP       all  --  any    any     anywhere             anywhere             ctstate INVALID /* invalid packets */
17    1358  795K REJECT     tcp  --  any    any     anywhere             anywhere             ctstate NEW tcp flags:!FIN,SYN,RST,ACK/SYN /* new non-syn packets */ reject-with tcp-reset
18      52  2600 ACCEPT     all  --  lo     any     anywhere             anywhere             /* loopback: compulsory */
19    2588  303K ACCEPT     icmp --  any    any     anywhere             anywhere             icmp echo-request limit: avg 2/sec burst 5 /* ICMP: ping only */
20   15482  932K ACCEPT     tcp  --  any    any     anywhere             anywhere             ctstate NEW,ESTABLISHED tcp dpt:57329 /* SSH: global obfuscated */
21     97M   54G ACCEPT     tcp  --  any    any     anywhere             anywhere             tcp dpt:9001 /* Tor: OR */
22   54303 4010K ACCEPT     tcp  --  any    any     anywhere             anywhere             tcp dpt:9030 /* Tor: Dir */
23     95M   93G ACCEPT     all  --  any    any     anywhere             anywhere             ctstate RELATED,ESTABLISHED /* Tor: traffic */

Chain FORWARD (policy DROP 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 182M packets, 160G bytes)
num   pkts bytes target     prot opt in     out     source               destination         

对我来说,想到的可能是 DHCP 数据包,但我对此不太了解,所以......

我个人不从事网络工作,因此如果有人可以提供帮助,我将不胜感激。谢谢。


编辑:

  • #1:我的服务器是DHCP客户端

  • #2: 我刚刚将 ICMP 策略更改为 REJECT (reject-withicmp 管理禁止),并且它并不影响我的服务器获得静态租约(重新启动后)。

答案1

任何 DHCP 客户端都需要在 Linux 上使用 RAW 套接字,因为它需要发送以 0.0.0.0 作为源地址的数据包(这通常是不允许的),直到它从 DHCP 服务器获取真实的 IP 地址。

作为副作用,它完全绕过 iptables 过滤器 -如果您正在执行过滤的系统上运行 DHCP 客户端。如果您的系统不充当其他主机的网桥或路由器,则可以忽略 DHCP 的 UDP 要求。

但为了了解知识,或者如果您正在使用其他防火墙解决方案:如果您是 DHCP 客户端,那么您需要接受端口 68 的传入 UDP 数据包。理论上,这些数据包的源端口号应为67. DHCP 服务器可能也想 ping 您的 IP 地址。

使用 DHCP 时需要注意的一件事是,数据包可能会使用本地网络的广播地址或 255.255.255.255 作为目标地址到达,而您自己还没有有效的 IP 地址。获得初始 DHCP 租约后,续订可以是常规单播。

如果您是 DHCP 服务器,则应该接受端口 67 的传入 UDP 数据包。

UDP 的另一个可能的用户是 DNS。为了提高速度,可以使用 UDP 发送 DNS 查询,如果响应太大而无法容纳在单个 UDP 数据包中,则 DNS 服务器将在 UDP 中发送适合数据包的尽可能多的答案,并附加一个属性:意思是“如果您想要完整的答案,请通过 TCP 重新提交查询”。

NTP(网络时间协议)也使用 UDP(端口号 123)。当消息内容本质上是“在发送此数据包时,时间是 xx:xx:xx.xxxxxx... 正如我所能确定的那样准确”,使用 TCP 及其握手和潜在的重传是没有意义的。如果时间信号在传输过程中丢失,您不会要求重新传输旧信号,而是请求(或等待)新信号。

相关内容