私はCentOS 8を使用しており、CentOS 6でiptables tcp-flagsを使用していたように、間違ったtcpフラグパケットを削除したいと思います。
以下は、CentOS 6でiptables tcp-flagsを使用して実行されたパケットドロップの例です。
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN FIN,SYN -j DROP
-A INPUT -p tcp -m tcp --tcp-flags SYN,RST SYN,RST -j DROP
-A INPUT -p tcp -m tcp --tcp-flags FIN,RST FIN,RST -j DROP
CentOS 8のファイアウォールサービスは、デフォルトのiptables / nftablesへの--直接アクセスを除いて上記の機能を提供しないことがわかります。私はこれをしたくありません。
CentOS 8では、不良/偽パケット損失は関係ありませんか?それとも、CentOS 8でファイアウォールを使用する他の実装はありますか?
ベストアンサー1
長い話を短く:Netfilterが正しく使用されているすべての設定では、これらのルールを使用することは重複しています。つながるステートフルファイアウォールに必要な施設です。 〜のようにファイアウォールそれを使用してください。すでに適用されています。
これらのルールを使用する唯一のケースは、システムがステートフルファイアウォールをまったく使用していない場合です。有効になっていないか使用されていません。つながるまったく存在しないか、一部のストリームが次のように表示されることがあります。追跡されていない。
今日のブログやルールでこの重複チェックを頻繁に見ることができる最も可能性の高い理由は、これが既存の同様のルールから継承されたためだと思います。IPチェーンLinuxカーネル2.2.xの時代(またはもともと実装された時期)つながるLinux 2.4.xでこのように徹底した点検は行われませんでした)、拡張検査機能を備えたこれらのステートフルファイアウォール施設は、当時は存在せず、当時は合理的でした。
詳しくは下記をご覧ください。
Webフィルタつながる図に示すように、TCPパケットの追跡中に有効なTCPフラグが確認されました。nf_conntrack_proto_tcp.c
:
/* table of valid flag combinations - PUSH, ECE and CWR are always valid */ static const u8 tcp_valid_flags[(TCPHDR_FIN|TCPHDR_SYN|TCPHDR_RST|TCPHDR_ACK| TCPHDR_URG) + 1] = { [TCPHDR_SYN] = 1, [TCPHDR_SYN|TCPHDR_URG] = 1, [TCPHDR_SYN|TCPHDR_ACK] = 1, [TCPHDR_RST] = 1, [TCPHDR_RST|TCPHDR_ACK] = 1, [TCPHDR_FIN|TCPHDR_ACK] = 1, [TCPHDR_FIN|TCPHDR_ACK|TCPHDR_URG] = 1, [TCPHDR_ACK] = 1, [TCPHDR_ACK|TCPHDR_URG] = 1, };
ランダムな組み合わせいいえこの表の内容は無効です(つまり、32件のうち23件)。気になる方は、次の情報源をお読みください。NF_ACCEPT=1
だから-NF_ACCEPT
1だこれは無効であることを意味します。)。これにはOPの3つの例FIN,SYN
が含まれますSYN,RST
。FIN,RST
つながるそれだけでなく、例えばパケットが有効なTCPウィンドウ内にあることを確認する。
そうするときiptablesこれらの偽のパケットには、次の一致を使用してください。
-m conntrack --ctstate NEW
-m conntrack --ctstate ESTABLISHED
-m conntrack --ctstate INVALID
またはそれに対応するnftables表現:
ct state new
ct state established
ct state invalid
最後の項目であるINVALID
/のみinvalid
が一致するため、削除する必要があります(十分な-j DROP
/drop
端末ステートメントを使用してください)。
CentOS6に注意してください。カーネル2.6.18は偽造されたパケットをフィルタリングしました。(今日の9/32の代わりに15/64のケースを許可します)したがって、これらのパケットを単純に破棄して処理しました-m state --state INVALID -j DROP
。
確かにファイアウォールこのような一致を使用してください。
CentOS7がインストールされましたiptablesいつルールファイアウォール実行中の項目には通常、次のものが含まれます。
-A INPUT -m conntrack --ctstate INVALID -j DROP
-A FORWARD -m conntrack --ctstate INVALID -j DROP
CentOS8 インストール済みnftablesいつルールファイアウォール走るnftablesアクティブなバックエンドには通常、次のものが含まれます。
# nft list chain inet firewalld filter_INPUT |grep -A2 invalid
ct state { invalid } drop
reject with icmpx type admin-prohibited
}
# nft list chain inet firewalld filter_FORWARD|grep -A2 invalid
ct state { invalid } drop
reject with icmpx type admin-prohibited
}
したがって、偽のTCPフラグは使用時にすでに処理されています。ファイアウォール。
使用しないときファイアウォール入力パスと転送パスの両方にこの種のルールを使用する必要があります(これは間違いなくより多くのルールが必要なまま使用してはならない例であるため、頻繁に必要なルールとオプションがありません)。
IPテーブル:
iptables -A INPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT
iptables -A INPUT -m conntrack --ctstate INVALID -j DROP
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate INVALID -j DROP
(そして必要に応じて、他の承認、削除、または拒否ルールを追加します。具体的な理由、REJECTルールを配置することが重要です。後ろにルール... INVALID -j DROP
)
OUTPUTでも同じことができますが、通常は自分自身を信頼します(そして慎重に構築されたRAWパケットはとにかくファイアウォールをバイパスします)。
nftables.nft
型の例(特定の規則に従って実行する必要があります):
table inet mytable {
chain myinput {
type filter hook input priority 0; policy accept;
ct state established accept
ct state invalid drop
}
chain myforward {
type filter hook forward priority 0; policy accept;
ct state established accept
ct state invalid drop
}
}