私はnftablesをルールとして使用します。
私の質問:tcpフラグを記録する方法は?
私のルールは次のとおりです。
nft add rule filter input tcp dport 22 ct state new tcp flags \& \(fin\|syn\) ==\( fin \| syn\) accept
私がいつも得た結果は次のとおりです。
Dec 6 13:40:19 my_host my_FIN IN=eth0 OUT=eth1 MAC= SRC=x.1.1.1 DST=x.2.2.2 LEN=40 TOS=00 PREC=0x00 TTL=127 ID=17695 DF PROTO=TCP SPT=54049 DPT=422SEQ=2558094232 ACK=0 WINDOW=8192 SYN URGP=0 MARK=0
編集する 私のルール:
chain FORWARD {
ip saddr 1.1.1.1 ip daddr . tcp dport @myset tcp flags & (fin | syn) == fin | syn counter packets 0 bytes 0 log prefix " myprefix " group 1 accept
}
答え1
TCP の場合、Netfilter の conntrack は、内部状態と同等の TCP 状態間の追加の一貫性チェックを実行します。これWeb開発 2.1 PDFドキュメント(申し訳ありませんが、これにはnetdev URLが見つかりませんでした。作成者のウェブサイトから取得したものです)では、これについて説明します。
L4トラッカーはステータス(tcp:traceステータスなど)を維持しようとし、シーケンス番号を確認します。例:
- 新しいTCPパケット?同期ビット設定?
- 予想ウィンドウのTCPシーケンス番号?
- 未確認データ? →タイムアウト調整
- 最初の?フィン? →接続の取り外しおよび/またはタイムアウトの調整
つながる新しいステータスがTCPと一致SYN_SENTまたはTCPSYN_受信しました状態。あなたが選ぶなら新しいルールの状態条件を使用すると、どれともct state new
一致しません。フィンパケットがないからフィンパケットは新しいTCP接続設定に参加します。
削除してもう一度やり直してくださいct state new
。
修正する:最初に見たことのない2番目の質問があります。この表現は:
tcp flags & (fin | syn) == fin | syn
FIN + SYNがすべて見つからないため(一部の無効な試みを除く)、FINフラグと一致する項目は決してありません。正しい表現は次のとおりです。
tcp flags & (fin | syn) != 0
FINのたびに一致またはSYNが設定されました。実際にnftables以下の項目のみを表示または要求するように簡素化しました。
tcp flags fin,syn
したがって、これら2つの調整(まだ削除する必要があります)を考慮すると、ルールは次のようct state new
になります。
nft add rule filter FORWARD 'tcp dport 22 tcp flags fin,syn log prefix " my_FIN " group 1 accept
またはフルチェーンセットから:
chain FORWARD {
type filter hook forward priority 0; policy accept;
ip saddr 1.1.1.1 ip daddr . tcp dport @myset tcp flags fin,syn counter log prefix " myprefix " group 1 accept
}
上記のルールを使用してFINパケットを実際に検出できるようになったら、特定のTCP攻撃をフィルタリングすることを意図している場合(本当に必要ですか?)、netfilterがTCP接続の最初のパケットを最初に検討できることに注意してください。以下のTCP FINを参照してください。無効ステータス:これらのステータスを記録することに興味があるかもしれません(ct state invalid
)。結果を変更できるnetfilter sysctlスイッチがあります。無効ステータス:有効nf_conntrack_tcp_be_liberal これは無効と分類されず、無効になります。nf_conntrack_tcp_looseこれにより、確立されたTCP接続の再開が停止します。つまり、SYNなしでNEW状態が停止します。この回復は、接続追跡が失われた後にのみ発生する必要があります。つまり、ファイアウォールルーターを再起動した後、またはリフレッシュconntrack状態を使用した後だけですが、編集者がここで選択できることをconntrack -F
誰が知っていますか?