IPTablesまたはFirewalldを使用せずにCentOSでアウトバウンドトラフィックをブロックする方法は?

IPTablesまたはFirewalldを使用せずにCentOSでアウトバウンドトラフィックをブロックする方法は?

カオスエンジニアリングのようなものを実装しようとしているので、機能を手動で実装します。機能の1つは、IPTablesまたはファイアウォールを使用せずにアウトバウンドDNSトラフィックをブロックすることです。

ここにはアイデアはまったくありません。私の要件は次のとおりです。

  • IPTableまたはファイアウォールなし
  • プロトコルタイプ(TCP / UDP)に言及できるはずです。
  • とポート番号

どんな助けでも大変感謝します。

ありがとうございます。

答え1

「IPTablesやファイアウォールを使用せずに」これを行う3つの方法があります。可能であれば、IPv6も扱います。

  • 交通制御:tc:CentOSのすべてのバージョン、さらにはEOLバージョンです。

    アウトバウンドインターフェイス名(および事前ルーティングを実行する方法)を知る必要があります。発信トラフィックに使用されるインターフェイスの名前が仮定されますeth0。このtcコマンドを使用して追加できます。フィルターインターフェースから。フィルタは分類されたルールにのみ追加できるため、この目的のために「ダミー」に分類されたqdiscが追加されます。ここでは、独自の属性は実際には使用されません。プリオ

    tc qdisc add dev eth0 root handle 1: prio
    tc filter add dev eth0 parent 1: pref 1 protocol ip basic match '
        (cmp (u8 at 9 layer network eq 6) or cmp (u8 at 9 layer network eq 17)) and
            cmp(u16 at 2 layer transport eq 53)' action drop
    '
    tc filter add dev eth0 parent 1: pref 2 protocol ipv6 basic match '
        (cmp (u8 at 6 layer network eq 6) or cmp (u8 at 6 layer network eq 17)) and
            cmp(u16 at 2 layer transport eq 53)' action drop
    '
    

    メモ:

    • u8 9層ネットワークIPv4 の場合はプロトコルフィールドです。IPv4ヘッダ:その値を6と比較するTCPプロトコルまたは17UDPプロトコル
    • u8 6層ネットワークIPv6の場合、ほとんど同じですが同じではないNextヘッダーフィールドIPv6固定ヘッダ。すべての場合に適用されるわけではありません。拡張ヘッダ固定ヘッダーとペイロードヘッダーの間にある場合、上記のIPv6固定ヘッダーのNextヘッダーはペイロードプロトコルと一致しません(6TCPプロトコルまたは17UDPプロトコル)。リンクされた拡張ヘッダーが複数ある可能性があるため、TC一部のモジュールで基本的なサポートがない限り、実際には適していません。
    • u16レイヤー2転送上記のポートは宛先ポートです。両方 規約

    これはデフォルトのアプリケーションではキャプチャされません。

  • nftablesnft。 CentOS 7または8

    CentOS 7の3.10カーネルにもバックポートバージョンがあります。nftables。次の値を追加するだけです。iptablesそしてnftables。一つイントラネットファミリテーブルはIPv4とIPv6の両方を処理します。

    nft add table inet t
    nft add chain inet t output '{ type filter hook output priority 0; policy accept; }'
    nft add rule inet t output udp dport 53 drop
    nft add rule inet t output tcp dport 53 drop
    

    これらのルールにより、基本アプリケーションがエラーをキャッチするかどうかは不明です。

    例外が追加されない限り、ローカルシステムから自分のシステムへのローカル接続も影響を受けます。

  • ポリシールーティング:ip rule。 CentOS 8はこのためカーネルが必要>= 4.17

    最新のカーネルはポートを使用してルーティングルールを一致させることもできます。したがって、ルーティングの代わりにUDPポート53とTCPポート53に何かを削除するルールを作成してください。

    ip rule add ipproto udp dport 53 blackhole
    ip rule add ipproto tcp dport 53 blackhole
    ip -6 rule add ipproto udp dport 53 blackhole
    ip -6 rule add ipproto udp dport 53 blackhole
    

    これは、EINVALを使用する基本アプリケーションによってキャプチャされます(...で説明されているように)。ip route(8))。ネットワークの「中断」タイプを変更すると、エラーや動作が変わる可能性があります(例:ブラックホール到着禁止する)。

    システムからそれ自体へのローカル接続(ローカルパス評価が優先順位0で以前に発生しました)には影響しません。

関連情報