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