大约两周前,我开始运行 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 及其握手和潜在的重传是没有意义的。如果时间信号在传输过程中丢失,您不会要求重新传输旧信号,而是请求(或等待)新信号。