firewall-cmd の使い方
ファイアウォール(firewalld)の設定
書き方
firewall-cmd --state / --get-active-zones / --get-default-zone firewall-cmd [--zone=ゾーン] --list-all firewall-cmd --add-service=http|--remove-service=… [--permanent] firewall-cmd --add-port=8080/tcp [--permanent] firewall-cmd --zone=trusted --add-source=10.0.0.0/24 firewall-cmd --add-rich-rule='rule family=ipv4 source address=… service name=ssh accept' firewall-cmd --reload / --runtime-to-permanent
--permanent は設定ファイルにだけ書き、--reload で反映します。--permanent なしは今だけ(--runtime-to-permanent で保存)。送信元(source)を結び付けたゾーンは、その送信元の通信に優先して使われます。
よく使うオプション
| オプション | 意味 |
|---|---|
--state | firewalld が動いているか(running / not running)を出す |
--list-all | ゾーンの設定(許可しているサービス・ポート・送り元など)をまとめて出す |
--zone=ゾーン | どのゾーンの設定かを決める(省くと既定のゾーン。多くは public) |
--add-service=名前 | http・https・ssh などのサービスの通信を許可する |
--remove-service=名前 | サービスの許可を外す |
--add-port=番号/tcp | サービスの名前が無いポートを番号で許可する |
--permanent | 設定ファイルに書く(再起動後も残る。今の動きには --reload で反映) |
--reload | 設定ファイルの内容を読み直して、今の動きに反映する |
例
$ sudo firewall-cmd --zone=public --list-allpublic (active)
target: default
interfaces: eth0
services: dhcpv6-client ssh
ports:
rich rules: public ゾーンで、いま何を許可しているかを確かめます。設定を変える前と後に見るのが基本です。
$ sudo firewall-cmd --permanent --zone=public --add-service=ntpsuccess時刻合わせ(NTP・123 番)の通信を、public ゾーンでずっと許可する設定を書きます。--permanent だけでは今の動きは変わりません。
$ sudo firewall-cmd --reloadsuccess--permanent で書いた設定を読み直して、今の動きに反映します。
$ sudo firewall-cmd --add-port=8080/tcpsuccess8080 番を今だけ許可します。試しに開けるときの形で、firewalld を再起動すると消えます。
$ firewall-cmd --get-default-zonepublicゾーンを書かずに設定したときに使われる、既定のゾーンの名前を出します。
よくある間違い・注意
- --permanent を付けると今の動きは変わらず、付けないと再起動で消えます。両方に効かせるには、--permanent で書いてから --reload します。
- --reload すると、--permanent なしで足した今だけの設定は消えます。
- ポートを開けても、SELinux がそのポートを許していないとサービスは待ち受けられません(semanage port で足します)。
実際に打って練習する
Linux レベル2 コースの Lv1「結界の門 firewall-cmd」で覚えます(第1章 結界(firewalld と SELinux))。ブラウザの中のシミュレーターで、本物と同じように打って確かめられます。
すべてのレベルが、ゴールド以上のプランで遊べます。