私は仮想専用サーバーのファイアウォールに取り組んでおり、私が調べていることの1つはポートスキャナーです。 TCPフラグは保護のために使用されます。2つの質問があります。
ルール:
-p tcp --tcp-flags SYN,ACK,FIN,RST SYN -j DROP
最初の引数はフラグSYNのパケットをチェックすることを示し、2番目の引数はフラグACK、FIN、RST SYNが設定されていることを確認することを示します
そして、そうである場合(一致がある場合)、tcpパケットをドロップします
最初の質問:
私はRSTとRST/ACKの意味を理解していますが、2番目の引数ではRST SYNが使用されています。
RST SYNとRSTとSYN RSTの違いは何ですか?
3ウェイハンドシェイクに「SYN RST」フラグはありますか?
2番目の質問は、
-p tcp --tcp-flags SYN,ACK,FIN,RST SYN -j DROP
そして
-p tcp --tcp-flags ALL SYN,ACK,FIN,RST SYN -j DROP
ALLはいつ使用すべきですか?
ALLを使用する場合、synフラグのあるtcpパケットにACK "および" FIN "および" RST SYNフラグが設定されていない場合、一致はありませんか?
この:
-p tcp --tcp-flags SYN,ACK,FIN,RST SYN -j DROP
「syn、ack、fin、rstの各フラグを確認し、SYNフラグが設定されているパケットと一致し、その他すべてのフラグが設定されていない」
Tcp-flagsの最初の引数は考慮しているフラグで、2番目の引数は一致させたいマスクです。あなたが使用していた場合
--tcp-flags SYN,ACK SYN
次に、[SYN = 1 ACK = 0]のパケットに一致しますが、[SYN = 1、ACK = 1]または[SYN = 0、ACK = 1]または[SYN = 0、ACKのパケットに一致しません。 = 0]
上記のルールでは、SYNパケットのみを照合しています。
このスイッチは混乱していると思います。
--tcp-flags
スイッチは2つの引数のみを受け取ります。最初の引数は、チェックするフラグです。 2番目の引数は、一致のために設定する必要がある最初の引数のフラグです。したがって、あなたの行:
-p tcp --tcp-flags SYN,ACK,FIN,RST SYN -j DROP
「=onlyの場合に一致」で、SYNフラグがこれら4つから設定されます(最初の引数と2番目の引数はスペースで区切ります)。
-p tcp --tcp-flags ALL SYN -j DROP
すべてのフラグをチェックし、何もないがSYNが設定されているパケットと一致することを意味します。 3番目の引数を与えるため、例の3番目は構文が不適切です。最初のルールは、入ってくるすべての新しいTCP接続をドロップしますが、これはおそらく望んでいるものではありません。
スイッチは主に、意味のないTCP=フラグが設定されたパケットをドロップするために使用されます。たとえば、SYNとRSTの両方、またはSYNとFINの両方が設定された正当なパケットを取得することはありません。 my *ファイアウォールスクリプトの1つからのスニペット:
${IPTABLES} -t filter -A INETIN -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
${IPTABLES} -t filter -A INETIN -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
${IPTABLES} -t filter -A INETIN -p tcp --tcp-flags SYN,URG SYN,URG -j DROP
これらは、TCPフラグの特定の組み合わせをチェックし、自然に発生してはならないフラグであり、パケットをドロップします。
詳しくは man page をご覧ください。
*(monmotha-2.3.8の微調整バージョン)