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 會話的正常回應,但它也不一定表示有問題。

相關內容