BLOGTIMES
2022/09/24

firewalld を使って Docer で公開したポートをアクセス制限

  dokcer  networking  firewalld 
このエントリーをはてなブックマークに追加

Docker のコンテナに対する通信は nftables (iptables) の INPUT chain を通らないので通常のルールが効きません
このことを忘れていると、Docker で立ち上げたサービスのポートがうっかり外部に公開されていたということになってしまいます。

みんな困っていると思うのですが、あまり良い解決方法がないようなので firewalld にルールを設定してみました。
ルールはipset で作ったホワイトリストfirewalld を流用することにしました。

コンテナへの通信は FORWARD から DOCKER-USER に流れるようなので、DOCKER-USERの方にルールを入れていきます*1
以下の設定では http(80/tcp), https(443/tcp,udp) は無条件で許可し、それ以外のポートの通信はホワイトリストに従います。

# chain を定義 firewall-cmd --permanent --direct --add-chain ipv4 filter DOCKER-USER # ホワイトリスト firewall-cmd --permanent --direct --add-passthrough ipv4 -I DOCKER-USER -m state --state NEW -m set ! --match-set WHITELIST src -m set --match-set BLACKLIST src -p udp -j DROP firewall-cmd --permanent --direct --add-passthrough ipv4 -I DOCKER-USER -m state --state NEW -m set ! --match-set WHITELIST src -m set --match-set BLACKLIST src -p tcp -j DROP # 無条件で許可するポート firewall-cmd --permanent --direct --add-passthrough ipv4 -I DOCKER-USER -m state --state NEW -m multiport -p udp --dports 443 -j RETURN firewall-cmd --permanent --direct --add-passthrough ipv4 -I DOCKER-USER -m state --state NEW -m multiport -p tcp --dports 80,443 -j RETURN # 戻りパケットを許可 firewall-cmd --permanent --direct --add-passthrough ipv4 -I DOCKER-USER -m state --state ESTABLISHED,RELATED -j RETURN # ルールを再読み込み firewall-cmd --reload

この passthrough 定義は初めて使いました。


トラックバックについて
Trackback URL:
お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/13505
Trackbacks
このエントリにトラックバックはありません
Comments
愛のあるツッコミをお気軽にどうぞ。[policy]
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
コメントはありません
Comments Form

コメントは承認後の表示となります。
OpenIDでログインすると、即時に公開されます。

OpenID を使ってログインすることができます。

Identity URL: Yahoo! JAPAN IDでログイン