Linuxルートサーバーがありますが、これは主にDockerサーバーです。ホスティングコンテナとCIランナー。
このサーバーを保護するための基本的な考え方は、
昨日、ip4に豊富なルールを追加しました
その結果、私はアクセスできなくなりました。まだアクセス可能なDockerコンテナ。私が理解している限り、コンテナは新しいインターフェイスを生成します。これらのインターフェイスは、ホストからコンテナへの通信のみを担当する必要があります。少なくとも、トラフィックが転送される前に、firewalldがトラフィックをフィルタリングすることを願っています。 eth0からdockerinterface1234へ。
これまでの私の研究は示唆しています。ゾーン内のインターフェース情報を除外すると、ゾーンがすべてのトラフィックを担当するようになります。しかし、私自身のテストは、私がそれを間違って構成したか、私の研究が間違っていたことを示唆しています。
私の採用 firewalldのIPベースのゾーンに関するチュートリアル :
ドロップするデフォルトゾーンを変更することから始めます。
firewallctl config set default-zone drop
ドロップゾーンは、すべての着信接続をドロップします。 block
ゾーンを検討することをお勧めします。これは、単にサイレントにドロップするのではなく、ブロックされた接続を返すことを除いて同じです。次に、新しいゾーンを作成し、それをIPアドレス(または単一のアドレス)のサブネットにバインドします。
firewallctl new --permanent zone --name "myzone"
firewallctl zone "myzone" --permanent add source "198.51.100.0/24"
firewallctl zone "myzone" --permanent add source "2001:0DB8::/32"
(IPv6対応であることを忘れないでください!)ゾーンに問題がないことを確認してください。
firewallctl info zones --active
この時点で開始します ポートまたはサービスをmyzone
に追加します 。これらのサービスには、追加したゾーン/ IPサブネットからのみアクセスでき、デフォルトのドロップ/パブリックゾーンからはアクセスできません。
ウィキペディアのパケットフローの概略図は https://upload.wikimedia.org/wikipedia/commons/3/37/Netfilter-packet-flow.svg
Dockerは、ポートマッピングルールを「マングル事前ルーティング」段階に置きます。この段階は、ほとんどのファイアウォールが入力フィルタリングルールを配置しようとする「フィルター入力」の前に実行されますが、回路図を見ると、パケットが転送されている場合、パケットがその段階(「ルーティング決定」)を回避することがわかります。それはおそらくあなたのために起こっていることです。
Dockerのルールと戦う代わりに、「raw」テーブルを使用してそれらを完全にプリエンプトすることができます。 'eth0'からポート12345へのすべてのトラフィックをドロップするには
iptables -t raw -I PREROUTING -i eth0 -p tcp --dport 12345 -j LOG
'raw'テーブルは内部(Docker)トラフィックにも影響するため、送信元IPアドレスに基づいてドロップする場合は、localhostとdockerの内部IP範囲もホワイトリストに登録するようにしてください。