我正在构建自己的防火墙。可以说我正在构建用户空间 TCP/IP 堆栈。
然而,当内核收到它无法识别的数据包时,内核会发送 RST + ACK(不确定是否发送了 ACK(更新:看来确实发送了 ACK))。
因为,我不打开任何端口,所以我需要某种方法来覆盖内核的默认行为。
我发现人们建议使用 IP 表来阻止传出 RST,并且还找到了建议使用 NOTRACK 的答案。
我不知道 NOTRACK 是如何工作的,也不知道它的优点和缺点。阻止 RST 给我带来了另一个挑战,因为我需要关闭连接,但阻止 RST 使我很难发送自己的 RST。
iptables -t raw -A PREROUTING -p tcp --port 8080 -j NOTRACK
我的假设是,该规则将阻止内核控制传入 8080 端口的数据包,如果这是真的,那么它会比阻止 RST 好得多。
更新:
我实际上用 Wireshark 对此进行了测试。即使添加 NOTRACK 规则后,RST 仍然发送,因此,我不确定 NOTRACK 的用途。
iptables -t raw -A PREROUTING -p tcp --sport 443 -j NOTRACK
答案1
NOTRACK
防止在连接跟踪中跟踪该连接。