iptablesはACKフラグなしでTCPリセットを拒否します。

iptablesはACKフラグなしでTCPリセットを拒否します。

私はiptablesルールを作りました:

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

ただし、実際にこれが行うことは、フラグを持つすべてのRSTパケットACKを拒否することです。

フラグが設定されている場合にのみ拒否できますかRST

一般的な環境では、これは意味がないことを知っていますが、説明されているように正確に実行する必要がある実践があります。

答え1

私は中国にいるので、これを行う前にdig +tcp twiter.com @1.1.1.1次の2行を実行する必要があります。

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

数年前:

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

SYN / ACKがSYNを正しく承認しないように、RST / ACKはRSTを承認しません。 TCP設定は実際には4方向プロセスです。開始ホストは受信ホストに SYN を送信し、受信ホストは SYN の ACK を送信します。受信ホストは開始ホストに SYN を送信し、開始ホストは ACK を再送信します。これは状態通信を確立する。

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

効率を向上させるために、受信ホストはSYNを検証し、同じパケットで独自のSYNを送信して、よく知られている3方向プロセスを作成できます。

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

RST / ACKの場合、デバイスはシーケンス内の前のパケットから送信されたすべてのデータをACKとして承認し、RSTを介して接続が終了したことを送信者に通知します。デバイスは、SYN / ACKのように2つのパケットを1つのパケットにマージします。 RST / ACKは通常TCPセッションの終了に対する一般的な応答ではありませんが、必ずしも問題を示すわけではありません。

関連情報