私は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
数年前:
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セッションの終了に対する一般的な応答ではありませんが、必ずしも問題を示すわけではありません。