ネットワークフィルタフック:NF_IP_FORWARD
プログラムは5つのnetfilterフックを登録できます。パケットがスタックを通過すると、これらのフックを登録したカーネルモジュールをトリガーします。その後、パケットは破棄、拒否、または操作されます。
NF_IP_FORWARD
パケットが別のホストに転送されると、受信パケットをルーティングした後にフックがトリガーされます。
NF_IP_FORWARD フックはどのような状況でトリガーされますか?実際のユースケースを提供できますか?
引用する
答え1
この記事例があります:ルーター。
FORWARDは他のタイプのチェーンです。コンピュータの外部から発生したすべてのトラフィックを取得し、iptablesを設定した場所を除いてネットワーク上の他のコンピュータに送信します。ルータがやっていることのように聞こえませんか?
ソースが私たちのサーバーのIPアドレスではなく、宛先が私たちのサーバーのIPアドレスではない場合、パケットは最初にどのように私たちのサーバーに到達しましたか?これが許容される2つのシナリオを考えることができます。
ネットワークインターフェイスは無差別モードになっています。これはネットワークハブの場合です(使用しないでください)。無差別モードのネットワークカード(詳細については他の記事を参照)は、LANから送信されるすべてのイーサネットフレームを許可します(LANトラフィックをスニッフィングする方法)。無差別モードが無効になると(NICのデフォルト状態)、ネットワークカードは宛先MACがカードのMACアドレスと一致するイーサネットフレームのみを許可します。したがって、イーサネットプロトコルレベルでは、フレームのアドレスはサーバーとして指定されますが、そのフレームのIPプロトコルパケットは異なる宛先アドレスのセットを持ちます。
イーサネットフレームの Destination_mac は、ルータの Destination_mac と一致します。ゲートウェイの場合も同様です。
パケットがルータに到達すると、ARPテーブルとルーティングテーブルはパケットのネクストホップを見つけ、conntrackモジュールはパケットを元の要求者に返す方法を知る必要があります。したがって、私たちのサーバーとは無関係のsrc_addressとdst_addressを含む受信したIPパケットはFORWARDチェーンに入ります。
サーバーをルーターに切り替える前に、カーネルレベルでルーティングを有効にする必要があります。簡単で再起動も不要です。 /etc/sysctl.conf ファイルを編集し、次の行を追加します。
net.ipv4.ip_forward = 1
次に、sysctl -pコマンドを実行してカーネル設定を再ロードします。これで、ルーティング自体を有効にする必要があります。コンピュータをルータに切り替えるためにファイアウォールを誤って設定したり、デフォルト設定を使用したりするため、セキュリティ上の理由からデフォルトで無効になっています。ネットワーク上のすべてのコンピュータがルータである場合、匿名攻撃を伝播するのは非常に簡単です。
これでルーティングが有効になったので、設定を続行できます。
1. iptables -I FORWARD -s 192.168.0.0/24 -d 10.10.7.0/24 -j ACCEPT
2. iptables -I FORWARD -s 10.10.7.0/24 -d 192.168.0.0/24 -m conntract --ctstate ESTABLISHED -j ACCEPT
それはすべてです。これら2つのルールは、2つのネットワーク(192.168.0.0/24と10.10.7.0/24)を接続します。ゲートウェイとして192.168.0.1を介して10.10.7.0/24に渡されたすべてのクエリは、正しい宛先にルーティングされ、応答が返されます。ただし、この規則は10.10.7.0/24ネットワークが192.168.0.0/24にアクセスすることを制限します。これがctstateの仕事です。 Netfilterのすべての接続が追跡されます(conntrack)。 NetfilterがESTABLISHED接続のみを一致させるように指示された場合は、--ctstate
新しい接続要求を無視します。このルールは確立された接続にのみ適用されます。
つまり、Netfilterは192.xxxネットワークの新しい接続のみを許可し、確立された接続のみ10.10.xxから192.168.xxにデータを転送できます。 2つのネットワークが互いに見えるようにするには、ルール-m conntrack --ctstate ESTABLISHED
のこの部分を削除してください。
しかし、このルーティングでは、両方のネットワークでルーティングテーブルを更新する必要があることに注意してください。これは、10.10.7.0/24のデバイスがルーティングテーブルに明示的なパスを追加し、デバイスが192.168.0.0/24ネットワークを照会するために使用されることを指定する必要があることを意味します。その逆の場合:192.168.0.0/24には、192.168.0.1を介して10.10.7.0/24ネットワークに接続できることを指定するルーティングテーブルへのパスが必要です。それ以外の場合、受信ネットワークのサーバーは応答を返す方法を知りません。受信したIPパケットのSRC_ADDRヘッダーには他のネットワークのIPアドレスが含まれており、サーバーはそれに到達する方法を知りません。
特定のネットワークでルーティングテーブルを直接編集できない場合、または編集したくない場合は、NATタイプのSNATを試すことができます。