Ansibleでfirewalldを使ったのですが、今後も結構使いそうなのでメモもかねて投稿。
#firewalld
名前の通り、firewalldの操作に使います。
firewalld - Manage arbitrary ports/services with firewalld
##Options
parameter | required | default | choices |
---|---|---|---|
immediate (added in 1.9) |
no | ||
permanent | yes | ||
port | no | ||
rich_rule | no | ||
service | no | ||
state | no | enabled/disabled | |
timeout | no | ||
zone | no | system-default |
###例
公式ページには以下の例がある。
1.httpsのポートを開ける
- firewalld: service=https permanent=true state=enabled
2.8081のtcpポートを閉じる
- firewalld: port=8081/tcp permanent=true state=disabled
3.161から162までのudpポートをあける
- firewalld: port=161-162/udp permanent=true state=enabled
4.dmzゾーンのhttpポートを開ける
- firewalld: zone=dmz service=http permanent=true state=enabled
5.rich-ruleの適用(ftpのポートを開け、1分ごとにauditを使ってロギングする)
原文:Allow new IPv4 and IPv6 connections for service ftp and log 1 per minute using audit
- firewalld: rich_rule='rule service name="ftp" audit limit value="1/m" accept' permanent=true state=enabled
###困った点
firewall-cmdはpermanentオプションを付けた場合と付けなかった場合で以下の違いがある。
permanentを付けない:一時的に適用。reloadすると適用から外れる。
permanentを付ける:継続的に適用。reloadすると適用される。
そのため、1番の例だと
継続的に適用したい+すぐに適用したい場合、
`- firewalld: service=https permanent=true state=enabled
- service: name=firewalld state=restarted`
とか書かなきゃいけないのかな、と思っていたのですが
immediate(added in 1.9)を付けるとすぐに適用されるみたい。
だからこう書ける。
- firewalld: service=https permanent=true state=enabled immediate=true
かなり綺麗に記述できるようになりますね。
####ちなみに
ちなみに、firewallを変えると、そのホスト上で動いている
Dockerコンテナのネットワークがおかしくなるんですが、
バグなんでしょうか。。。