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)を結び付けたゾーンは、その送信元の通信に優先して使われます。

よく使うオプション

オプション意味
--statefirewalld が動いているか(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/tcpsuccess

8080 番を今だけ許可します。試しに開けるときの形で、firewalld を再起動すると消えます。

$ firewall-cmd --get-default-zonepublic

ゾーンを書かずに設定したときに使われる、既定のゾーンの名前を出します。

よくある間違い・注意

  • --permanent を付けると今の動きは変わらず、付けないと再起動で消えます。両方に効かせるには、--permanent で書いてから --reload します。
  • --reload すると、--permanent なしで足した今だけの設定は消えます。
  • ポートを開けても、SELinux がそのポートを許していないとサービスは待ち受けられません(semanage port で足します)。

実際に打って練習する

Linux レベル2 コースの Lv1「結界の門 firewall-cmd」で覚えます(第1章 結界(firewalld と SELinux))。ブラウザの中のシミュレーターで、本物と同じように打って確かめられます。

すべてのレベルが、ゴールド以上のプランで遊べます。

Linux サーバー構築のコマンド一覧(LinuC レベル2 の範囲)へ戻る