
FirewallD が 1 つのポートへの接続を許可し、2 番目のポートをブロックする理由を教えてください。
送信機能を備えた Docker コンテナがあります:
5cf144eed6f2 maksim77/transmission "/bin/sh -c 'transmis" 14 hours ago Up 16 minutes 0.0.0.0:9091->9091/tcp, 0.0.0.0:51413->51413/tcp transmission
両方のポート (9091 と 51413) は FirewallD ルールにリストされていません。
root@host:maksim #firewall-cmd --list-all-zones | grep active
public (default, active)
trusted (active)
root@host:maksim #firewall-cmd --list-all --zone trusted
trusted (active)
interfaces: docker0
sources:
services:
ports: 4243/tcp
masquerade: no
forward-ports:
icmp-blocks:
rich rules:
root@host:maksim #firewall-cmd --list-all --zone public
public (default, active)
interfaces: enp9s0
sources:
services: dhcpv6-client ftp http ssh
ports: 41387/tcp 1900/udp 50213/tcp 8200/tcp
masquerade: no
forward-ports:
icmp-blocks:
rich rules:
しかし、ポート9091では接続は成功しますが、ポート51413では成功しません。ポート51413は127.0.0.1でのみ利用可能です。
答え1
Docker は、firewalld の外部でポート自体を開くため、firewalld ではこれらが表示されません。
Docker が何をしているかを確認するには、次のコマンドを実行します。
iptables -L DOCKER
iptables -t nat -L DOCKER
Dockerはファイアウォールのポート自体を開く明示的に無効にしない限り、コンテナのどのポートでもEXPOSE
有効になります。また、相互に通信する必要があるコンテナも通信できるため、明示的に無効にしない限り、有効にしておく必要があります。本当に自分が何をしているのか分かっている。