web-dev-qa-db-ja.com

ファイアウォールで保護されたブロック/ドロップおよびIPによる許可

Linuxルートサーバーがありますが、これは主にDockerサーバーです。ホスティングコンテナとCIランナー。

このサーバーを保護するための基本的な考え方は、

  • すべてのトラフィックをブロックする
  • 許可されている1つ(または複数)のIPを除きます。

昨日、ip4に豊富なルールを追加しました

  • ブロッキング0.0.0.0/0
  • 静的IPを明示的に許可する

その結果、私はアクセスできなくなりました。まだアクセス可能なDockerコンテナ。私が理解している限り、コンテナは新しいインターフェイスを生成します。これらのインターフェイスは、ホストからコンテナへの通信のみを担当する必要があります。少なくとも、トラフィックが転送される前に、firewalldがトラフィックをフィルタリングすることを願っています。 eth0からdockerinterface1234へ。

これまでの私の研究は示唆しています。ゾーン内のインターフェース情報を除外すると、ゾーンがすべてのトラフィックを担当するようになります。しかし、私自身のテストは、私がそれを間違って構成したか、私の研究が間違っていたことを示唆しています。

2
Daniel Böttner

私の採用 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サブネットからのみアクセスでき、デフォルトのドロップ/パブリックゾーンからはアクセスできません。

1
Aeyoun

ウィキペディアのパケットフローの概略図は 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範囲もホワイトリストに登録するようにしてください。

0
unilynx