Dockerでiptablesを利用するには、DOCKER-USER chainにルールを追加します。
特定ネットワークからのみmysql接続を許可したい時など
IP確認
# docker inspect db "Networks": { "django_default": { . . . "Gateway": "172.23.0.1", "IPAddress": "172.23.0.2", "IPPrefixLen": 16, "IPv6Gateway": "", "GlobalIPv6Address": "", "GlobalIPv6PrefixLen": 0, "MacAddress": "02:42:ac:17:00:02", "DriverOpts": null } } } }
特定IPだけ許可
iptables -I DOCKER-USER -p tcp --dport 3306 -d 172.23.0.2 -j DROP iptables -I DOCKER-USER -p tcp --dport 3306 -s 192.168.10.10 -d 172.23.0.2 -j ACCEPT
netfilter-persistentを利用すると、起動時に自動で反映する事が可能ですが、
Dockerを利用していると、起動時にDockerがiptablesのルールを追加するので、ルールが重複する可能性があります。
netfilter-persistentを利用する場合は、保存したルールからDockerが自動で入れるルールを削除しておいた方が良いです。
apt install netfilter-persistent
シェルなど用意しておいて、起動後入れる設定とかでも良いかも。
— Shinya Matsui 2023/12/06 07:10
現在確認すると、netfilter-persistentでの反映方法は設定反映されなくなってた。。。
やはり再起動後はシェルなどで追加する方が良さそう。
/etc/init.d/netfilter-persistent save /etc/init.d/netfilter-persistent reload