Firewalld

提供: ArchWiki
2022年1月18日 (火) 21:31時点におけるKgx (トーク | 投稿記録)による版 (→‎ヒントとテクニック: ノートを翻訳して追加)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
ナビゲーションに移動 検索に移動

関連記事

firewalld は Red Hat によって開発されているファイアウォールデーモンです。デフォルトで nftables を使用します。プロジェクトのホームページより:

Firewalld は動的に管理されるファイアウォールを提供し、ネットワーク・ファイアウォールゾーンによってネットワーク接続やインターフェイスの信頼レベルを定義します。IPv4 と IPv6 のファイアウォールの設定、イーサネットブリッジ、IP セットをサポートします。実行時と永続的な設定オプションは分離されています。サービスやアプリケーションのインターフェイスを提供しファイアウォールのルールを直接追加することができます。

インストール

firewalld パッケージをインストールしてください。

使用方法

firewalld.service起動有効化してください。

コンソールユーティリティ firewall-cmd でファイアウォールのルールを制御できます。

firewalld が稼働中でない場合 firewall-offline-cmd ユーティリティを使うことで設定できます。firewall-cmd と構文は似ています。

GUI は firewalld パッケージに含まれている firewall-config で利用できます。

設定

firewall-cmd を使うことで実行時の設定を変更できます。

ノート: ほとんどのコマンドは実行時の設定のみ変更し、再起動すると設定は消失します。変更を永続化する方法は2つ存在します:
  • --permanent オプションを使う。この場合、実行時の設定は変更されません。ファイアウォールサービスを再起動したり --reload コマンドでルールをリロードしたときに反映されます。
  • 実行時の設定を変更してから#実行時の設定を永続的に変換に書かれているように設定を永続化する。

ゾーン

ゾーンは特定のインターフェイスに適用することができるルール集です。

現在のゾーンと割り当てられたインターフェイスを確認するには:

# 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

protocoltcp または 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 オプションを使うことでサービスやポートの時間制限を追加することができます。値は何も付けないと秒数になり、mh を後ろに付けることで分や時間になります。例えば SSH サービスを3時間の制約で追加するには:

# firewall-cmd --add-service ssh --timeout=3h
ノート: タイムアウトは、ファイアウォールの設定に対する --permanent changes と相互に排他的です。 つまり、タイムアウトは実行時の設定にのみ適用され、永続的ではありません。

実行時の設定を永続的に変換

一時的な設定を永続化するには (再起動しても設定が消えなくなります):

# firewall-cmd --runtime-to-permanent

サービスの詳細をチェック

デフォルトでサポートされているサービスの設定ファイルは /usr/lib/firewalld/services/ に存在し、ユーザーが作成したサービスファイルは /etc/firewalld/services/ に配置されます。

参照