一貫性のないファイアウォールの動作

一貫性のないファイアウォールの動作

複数のノードを持つドッカーの群れがあります。これらはwireguardインターフェイスを介して接続されています。すべてのドッカースワーム通信は、wireguardが提供する内部ネットワーク内で行われます。次の例では、インターネット接続インターフェイスは、eth0wireguardインターフェイスはですintr

スタックにocks5プロキシを追加しましたが、作成ファイルには次のようになります。

services:
  proxy:
    hostname: proxy
    image: httptoolkit/docker-socks-tunnel
    ports:
      - 1080:1080/tcp

私の目標は、このサービスへのアクセスを制限して、intrネットワーク上のクライアント(wireguardインターフェイスの起動など)のみを使用できるようにすることです。

私が使用する最小限のコマンドセットは次のとおりです。

# replace ufw with firewalld
systemctl stop docker
systemctl stop ufw
apt remove --purge ufw
apt install -y firewalld
systemctl enable firewalld
systemctl start firewalld
systemctl start docker

# add eth0 to public zone, this will prevent all incoming connections, except ssh and ipv6-dhcp
firewall-cmd --zone=public --add-interface=eth0
# allow 51830/udp (wireguard) so that the internal wireguard interfaces can connect on the nodes
firewall-cmd --zone=public --add-port=51820/udp --permanent

# create a new zone for intr, add the intr interface to it
firewall-cmd --new-zone=intr --permanent
firewall-cmd --zone=intr --add-interface=intr --permanent
# allow docker swarm ports on it
firewall-cmd --permanent --zone=intr --add-service=docker-swarm --permanent

# create a policy that allows traffic between docker and intr interfaces
firewall-cmd --permanent --new-policy docker-intr --set-target=ACCEPT
firewall-cmd --permanent --policy docker-intr --add-ingress-zone intr
firewall-cmd --permanent --policy docker-intr --add-egress-zone docker

# change default policy of "docker" zone to drop
firewall-cmd --permanent --zone=docker --set-target=DROP

# for this example, allow socks5 on intr zone
firewall-cmd --permanent --zone=intr --add-port=1080/tcp --permanent

firewall-cmd --reload

上記のコマンドを実行した後、正常に動作しているようです。 Wireguard経由でアクセスしようとすると、ポートが開いています。

nc -vz -w1 10.1.2.1 1080`
Connection to 10.1.2.1 1080 port [tcp/socks] succeeded!

公開アドレスからアクセスしようとすると削除されます。

nc -vz -w1 my.server.com 1080`
Connection to my.server.com (1.2.3.4) port 1080 (tcp) timed out: Operation now in progress

ポート2377/tcp(swarm)も同様です。内部インターフェイスアドレスでは開いているように見えますが、パブリックアドレスでは拒否されます。

ただし、OSを再起動すると、次のことが発生します。

  1. 2377/tcp (docker swarm) は、docker の起動後も閉じたままです。
  2. 1080/tcp(ソックス)は、eth0を含むすべてのインターフェイスで開かれています(ソックスサービスコンテナの起動後)。
  3. ただし、firewall-cmd --reload1分後に実行すると、eth0で1080 / tcpが再びダウンします。

まだテストしていませんが、dockerスタックを終了して再起動すると、同じ問題が発生すると疑われます。

永久ファイアウォールの設定に応じて 1080/tcp をオフにする必要がありますが、docker によって動的にオーバーライドされます。これはどのように可能ですか?公式文書によると(https://docs.docker.com/network/packet-filtering-firewalls/#integration-with-firewalld)、dockerはファイアウォールと完全に統合されています。

私は何が間違っていましたか?

ベストアンサー1

おすすめ記事