Linux netfilterには、さまざまなOSIモデル層に複数のフックがあります。これビデオ。しかしながら、TCPなどのトランスポート層プロトコルは、再送または輻輳制御などのさらなる処理を必要とする。 netfilterフレームワークや特定のフックの前または後にこのようなことが起こりますか?そしてなぜこのように設計されたのか。ソースコードの説明をご覧ください。
答え1
ソースコードを注意深く読まなくても、テストはかなり簡単です。
特定のIPの特定のポートのみを許可するファイアウォールルールセットを実行しているコンピュータで、問題のポートのtcpdumpを構築し、コンピュータからそのIP:ポートに接続しようとします。いいえ許可される。
着信要求が表示されます。
答え2
わかりました。この動画Devconf 2018では、Jiri BencとLinuxネットワークパイプについて話します。 TCPはトランスポート層プロトコルです。パケットがそれを使用するには、ネットワークスタックが最初にデータリンクとネットワーク層ヘッダーを解析する必要があります。次に、dst_input
パケットがローカル処理用か転送用かを確認します。スライド62で、彼はパケットがローカルで処理されるべきであるならば、TCPステートマシンはINPUT
ネットフィルタのフックの後にそれを処理するだろうと述べました。具体的な実装については、tcp_v4_rcv
の機能を参照してくださいlinux/net/ipv4/tcp_ipv4.c
。