Firewalldを使用して信頼できるゾーンにdocker0インターフェイスを追加することはできません。

Firewalldを使用して信頼できるゾーンにdocker0インターフェイスを追加することはできません。

Centos 7では、Dockerコンテナがホストシステムにアクセスできるようにしたいので、信頼できるゾーンにdocker0を追加してみました。

# firewall-cmd --permanent --zone=trusted --add-interface=docker0
The interface is under control of NetworkManager and already bound to 'trusted'
The interface is under control of NetworkManager, setting zone to 'trusted'.
success
# firewall-cmd --get-zone-of-interface=docker0
no zone

以前は機能しましたが、何らかの理由でこのサーバーでは機能しませんでした。私も試してみましたが、firewall-cmd --reload何もありません。 Firewalld コマンドが完全に無視されるのと同じです。このNetworkManagerメッセージは疑わしいようです。ファイアウォールとNetworkManagerの間に一種の競合がある可能性がありますか?

必然的にnmcli connection modify docker0 connection.zone trustedインターフェイス設定で正しく設定されていますが、ZONE=trustedファイアウォールはまだインターフェイスが信頼できる領域にないことを示しています。

ここで何が起こっているのでしょうか?

答え1

私が知る限り、Firewalld(例えばeth0)が直接認識する信頼領域を使用するインターフェイスがない場合、信頼領域はアクティブとしてマークされません。この問題を解決するには、次のコマンドを使用して iptables ルールを明示的に設定できます。

firewall-cmd --permanent --zone=trusted --add-interface=docker0
firewall-cmd --direct --permanent --add-rule ipv4 filter INPUT 3 -i docker0 -j ACCEPT
firewall-cmd --reload
systemctl restart docker

ここで、「3」は入力チェーンにルールを挿入する位置であり、マイレージは異なる場合がある。このコマンドを実行した後、コンテナからホストポートにアクセスできます。

答え2

trustedゾーンにポートまたはサービスを追加し、ファイアウォール設定を再ロードする必要があります。

例があります:

内部領域でポート 443/tcp を一時的に許可するには、次のように入力します。

systemctl start firewalld
systemctl enable firewalld
firewall-cmd --zone=trusted --add-port=443/tcp
firewall-cmd --reload

確認する:

firewall-cmd --get-active-zones

ポートの持続を許可します。

firewall-cmd --permanent --zone=trusted --add-port=443/tcp

また、次のコマンドを返す必要があります。

firewall-cmd --get-zone-of-interface=docker0
trusted 

関連情報