iptables 拒绝带 tcp 重置且不带 ACK 标志

iptables 拒绝带 tcp 重置且不带 ACK 标志

我创建了iptables规则:

iptables -I INPUT -p tcp --tcp-flags SYN,RST,ACK,FIN SYN --dport 10000 -j REJECT --reject-with tcp-reset

但实际上,这样做是拒绝所有带有RSTACK标志的数据包。

仅在设置标志的情况下才可以拒绝吗RST

我知道在正常环境中这没有任何意义,但我有一个实验室,我需要完全按照描述进行。

答案1

我在中国,所以在我这样做之前dig +tcp twiter.com @1.1.1.1,我需要执行以下两行:

sudo iptables -A INPUT -p tcp -s 1.1.1.1/32 --tcp-flags ALL RST,ACK -j DROP
sudo iptables -A INPUT -p tcp -s 1.1.1.1/32 --tcp-flags ALL RST -j DROP

然后我会得到正确的答案:

;; ANSWER SECTION:
twitter.com.        204 IN  A   104.244.42.65

如果我只执行第一个iptables命令,我的挖掘就会失败:

";; communications error to 1.1.1.1#53: connection reset"

中国的防火墙很奇怪...

答案2

要丢弃入站 RST 数据包,

  iptables -I INPUT -p tcp --tcp-flags ALL RST,ACK  --dport 10000 -j DROP

要丢弃出站 RST 数据包,

  iptables -I OUTPUT -p tcp --tcp-flags ALL RST,ACK --dport 10000 -j DROP

前几年:

网址:https://networkengineering.stackexchange.com/questions/2012/why-do-i-see-a-rst-ack-packet-instead-of-a-rst-packet

RST/ACK 不是 RST 的确认,就像 SYN/ACK 不完全是 SYN 的确认一样。 TCP 建立实际上是一个四向过程:发起主机向接收主机发送 SYN,接收主机发送该 SYN 的 ACK。接收主机向发起主机发送 SYN,发起主机发回 ACK。这建立了状态通信。

SYN --> 
    <-- ACK
    <-- SYN
ACK -->

为了提高效率,接收主机可以确认 SYN,并在同一数据包中发送自己的 SYN,从而创建我们习惯看到的三向过程。

SYN -->
    <-- SYN/ACK
ACK -->

在 RST/ACK 的情况下,设备通过 ACK 确认序列中先前数据包中发送的任何数据,然后通过 RST 通知发送方连接已关闭。设备只是将两个数据包合并为一个数据包,就像 SYN/ACK 一样。 RST/ACK 通常不是关闭 TCP 会话的正常响应,但它也不一定表示存在问题。

相关内容