Firewalld
関連記事
firewalld は Red Hat によって開発されているファイアウォールデーモンです。デフォルトで nftables を使用します。プロジェクトのホームページより:
- Firewalld は動的に管理されるファイアウォールを提供し、ネットワーク・ファイアウォールゾーンによってネットワーク接続やインターフェイスの信頼レベルを定義します。IPv4 と IPv6 のファイアウォールの設定、イーサネットブリッジ、IP セットをサポートします。実行時と永続的な設定オプションは分離されています。サービスやアプリケーションのインターフェイスを提供しファイアウォールのルールを直接追加することができます。
目次
インストール
使用方法
firewalld.service
を起動・有効化してください。
コンソールユーティリティ firewall-cmd
でファイアウォールのルールを制御できます。
firewalld が稼働中でない場合 firewall-offline-cmd
ユーティリティを使うことで設定できます。firewall-cmd
と構文は似ています。
GUI は firewalld パッケージに含まれている firewall-config
で利用できます。
設定
firewall-cmd
を使うことで実行時の設定を変更できます。
ゾーン
ゾーンは特定のインターフェイスに適用することができるルール集です。
現在のゾーンと割り当てられたインターフェイスを確認するには:
# firewall-cmd --get-active-zones
(ポートやサービスの追加・削除など) 一部のコマンドではゾーンを指定する必要があります。
--zone=zone_name
パラメータを使って名前でゾーンを指定できます。
ゾーンを指定しなかった場合はデフォルトゾーンが使われます。
ゾーンの情報
全てのゾーンとその設定を確認するには:
# firewall-cmd --list-all-zones
あるいは特定のゾーンの情報だけ取得するには:
# firewall-cmd --info-zone=zone_name
インターフェイスのゾーンを変更
# firewall-cmd --zone=zone --change-interface=interface_name
zone
はインターフェイスに割り当てたい新しいゾーンに置き換えてください。
NetworkManager を使ったゾーン管理
NetworkManager は、異なる接続プロファイルを異なるゾーンに割り当てることができます。これにより、例えば自宅の WiFi 接続を home ゾーンに、仕事の WiFi 接続を work ゾーンに、その他全ての WiFi 接続をデフォルトの public ゾーンに追加することが可能です。
接続プロファイルを一覧表示します。
nmcli connection show
myssid プロファイルを home ゾーンに割り当てます。
$ nmcli connection modify myssid connection.zone home
デフォルトゾーン
新しいインターフェイスが接続されるとデフォルトゾーンが適用されます。以下のコマンドでデフォルトゾーンの名前を確認できます:
# firewall-cmd --get-default-zone
以下のコマンドでデフォルトゾーンを変更できます:
# firewall-cmd --set-default-zone=zone
サービス
サービスは特定のデーモンに合わせて作成されたルールです。例えば ssh
サービスは SSH に対応し、ゾーンに割り当てたときにポート 22 が開きます。
利用可能なサービスのリストを確認するには以下のコマンドを実行:
# firewall-cmd --get-services
特定のサービスの情報を確認するには:
# firewall-cmd --info-service service_name
ゾーンからサービスを追加・削除
ゾーンにサービスを追加するには:
# firewall-cmd --zone=zone_name --add-service service_name
サービスを削除するには:
# firewall-cmd --zone=zone_name --remove-service service_name
ポート
指定したゾーンのポートを直接開くことができます:
# firewall-cmd --zone=zone_name --add-port port_num/protocol
protocol
は tcp
または udp
に置き換えてください。
ポートを閉じるには --remove-port
オプションで同じポート番号とプロトコルを指定してください。
NAT マスカレード
このコマンドは iptables -t nat -A POSTROUTING -j MASQUERADE
と同じ効果があります。
# firewall-cmd --zone=public --add-masquerade
バージョン1.0.0 以降、異なるファイアウォールゾーン間で NAT マスカレードを動作させるには、それらの間のトラフィックをフィルタリングするために使用される新しいポリシーオブジェクトを作成する必要があります。
# firewall-cmd --new-policy NAT_internal_to_external # firewall-cmd --permanent --policy NAT_internal_to_external --add-ingress-zone internal # firewall-cmd --permanent --policy NAT_internal_to_external --add-egress-zone public # firewall-cmd --permanent --policy NAT_internal_to_external --set-target ACCEPT
ポート転送
ルータで firewalld を設定し、上記のように NAT マスカレードを有効にした場合、firewalld を通してポート転送を設定するには。
# firewall-cmd --zone=public --add-forward-port=port=12345:proto=tcp:toport=22:toaddr=10.20.30.40
これは、ファイアウォールのパブリックインターフェースのポート 12345/tcp を、IP アドレス 10.20.30.40 の内部システムのポート 22(標準 SSH)へ転送するものです。 この転送されたポートを削除するには、次のようにします。
# firewall-cmd --zone=public --remove-forward-port=port=12345:proto=tcp:toport=22:toaddr=10.20.30.40
残念ながら、ポートやプロトコルのみを指定するのでは不十分で、フォワード宣言をすべて入力しなければ削除できません。
ヒントとテクニック
ポートあるいはサービスのタイムアウト
--timeout=value
オプションを使うことでサービスやポートの時間制限を追加することができます。値は何も付けないと秒数になり、m
や h
を後ろに付けることで分や時間になります。例えば SSH サービスを3時間の制約で追加するには:
# firewall-cmd --add-service ssh --timeout=3h
実行時の設定を永続的に変換
一時的な設定を永続化するには (再起動しても設定が消えなくなります):
# firewall-cmd --runtime-to-permanent
サービスの詳細をチェック
デフォルトでサポートされているサービスの設定ファイルは /usr/lib/firewalld/services/
に存在し、ユーザーが作成したサービスファイルは /etc/firewalld/services/
に配置されます。