第5章 ファイアウォールの使用

注記

専門知識をさらに得るために、Red Hat Server Hardening (RH413) トレーニングコースが用意されています。

5.1. firewalld の概要

firewall は、外部からの不要なトラフィックからマシンを保護する方法です。ファイアウォールルール セットを定義することで、ホストマシンに着信ネットワークトラフィックを制御できます。このようなルールは、着信トラフィックを分類して、拒否または許可するために使用されます。
firewalld は、D-Bus インターフェースを使用して、動的にカスタマイズできるホストベースのファイアウォールを提供するファイアウォールサービスデーモンです。ルールが変更するたびに、ファイアウォールデーモンを再起動する必要なくルールの作成、変更、および削除を動的に削除します。
firewalld は、ゾーン および サービス の概念を使用し、トラフィック管理を簡素化します。ゾーンは、事前定義したルールセットです。ネットワークインターフェースおよびソースはゾーンに割り当てることができます。許可されているトラフィックは、コンピューターが接続されるネットワークと、このネットワークが割り当てられているセキュリティーレベルに従います。ファイアウォールサービスは、特定のサービスに着信トラフィックを許可するのに必要な設定を扱う事前定義のルールで、ゾーンで適用されます。
サービスは、ネットワーク接続に 1 つ以上の ポート または アドレス を使用します。ファイアウォールは、ポートに基づいて接続のフィルターを設定します。サービスに対してネットワークトラフィックを許可するには、そのポートを 開く 必要があります。firewalldは、明示的に開いていないポートのトラフィックをすべてブロックします。trusted などのゾーンで、デフォルトですべてのトラフィックを許可します。
ファイアウォールスタック

図5.1 ファイアウォールスタック

5.1.1. ゾーン

firewalld は、インターフェースに追加する信頼レベルと、そのネットワークのトラフィックに従って、複数のネットワークを複数のゾーンに分類できます。接続は、1 つのゾーンにしか指定できませんが、ゾーンは多くのネットワーク接続に使用できます。
NetworkManager は、firewalld に、インターフェースのゾーンを追加します。NetworkManagerfirewall-config ツール、または firewall-cmd コマンドラインツールを使用して、インターフェースにゾーンを割り当てることができます。後ろの 2 つは、適切な NetworkManager 設定ファイルのみを修正します。firewall-cmd または firewall-config を使用してインターフェースのゾーンを変更すると、要求は NetworkManager に転送され、firewalld には処理されません。
事前定義したゾーンは /usr/lib/firewalld/zones/ ディレクトリーに保存され、利用可能なネットワークインターフェースに即座に適用されます。このファイルは、修正しないと /etc/firewalld/zones/ ディレクトリーにコピーされません。以下のテーブルは、事前定義したゾーンのデフォルト設定を説明します。
block
IPv4 の場合は icmp-host-prohibited メッセージ、そして IPv6 の場合は icmp6-adm-prohibited メッセージで、すべての着信ネットワーク接続が拒否されます。システム内で開始したネットワーク接続のみが可能です。
dmz
公開アクセスが可能ではあるものの、内部ネットワークへのアクセスには制限がある非武装地帯にあるコンピューター用。選択した着信接続のみが許可されます。
drop
着信ネットワークパケットは、通知なしで遮断されます。発信ネットワーク接続だけが可能です。
external
マスカレードを特別にルーター用に有効にした外部ネットワーク上での使用向けです。自分のコンピューターを保護するため、ネットワーク上の他のコンピューターを信頼しません。選択された着信接続のみが許可されます。
home
そのネットワークでその他のコンピューターをほぼ信頼できる自宅での使用。選択した着信接続のみが許可されます。
internal
そのネットワークでその他のコンピューターをほぼ信頼できる内部ネットワークでの使用。選択した着信接続のみが許可されます。
public
そのネットワークでその他のコンピューターを信頼できないパブリックエリアでの使用。選択した着信接続のみが許可されます。
trusted
すべてのネットワーク接続が許可されます。
work
そのネットワークで、その他のコンピューターをほぼ信頼できる職場での使用。選択した着信接続のみが許可されます。
これらのゾーンのいずれかを デフォルト に設定できます。インターフェース接続が NetworkManager に追加されると、デフォルトゾーンに割り当てられます。インストール時に、firewalld のデフォルトゾーンは public ゾーンに設定されます。デフォルトゾーンは変更できます。

注記

ネットワークゾーンの名前は、すぐに分かり、ユーザーが妥当な決定をすばやく下せるように付けられています。セキュリティー問題を回避するには、ユーザーのニーズおよびリスク評価に合わせて、デフォルトゾーンの設定の見直しを行ったり、不要なサービスを無効にしてください。

5.1.2. 事前定義サービス

サービスは、ローカルポート、プロトコル、ソースポート、宛先、そしてサービスが有効になると自動的にロードされるファイアウォールヘルパーモジュールの一覧になります。サービスを使用すると、ポートのオープン、プロトコルの定義、パケット転送などを 1 つ 1 つ行うのではなく、1 回のステップで定義できます。
サービス設定オプションと、一般的なファイル情報は、man ページの firewalld.service(5) で説明しています。サービスは、個々の XML 設定ファイルを使用して指定し、名前は、service-name.xml のような形式になります。プロトコル名は、firewalld のサービス名またはアプリケーション名よりも優先されます。

5.1.3. ランタイムおよび永続化設定

runtime モードで送られた変更は、firewalld が実行している間のみ適用されます。firewalld を再起動すると、その設定は、永続化 の値に戻ります。
変更した内容を再起動後に永続化させるには、--permanent オプションを使用して適用します。代わりに、firewalld 実行している間は変更を持続させるには、--runtime-to-permanent firewall-cmd オプションを実行します。
--permanent オプションのみを使用して firewalld が実行している場合にルールを設定するには、firewalld が再起動するまでは有効になりません。ただし、firewalld を再起動すると、開いているポートがすべて閉じ、ネットワーキングトラフィックを停止します。

5.1.4. CLI を使用してランタイムおよび永続設定の設定の変更

CLI を使用して、同時に 2 つのモードでファイアウォール設定を修正しません。ランタイムまたは永続モードを修正します。永続化設定でファイアウォール設定を修正するには、firewall-cmd コマンドで --permanent オプションを使用します。
~]# firewall-cmd --permanent <other options>
このオプションを使用せずには、コマンドはランタイムモードを変更します。
両方のモードで設定を変更するには、2 つの方法を使用できます。
  1. 以下のように、ランタイム設定を変更して、永続化します。
    ~]# firewall-cmd <other options>
    ~]# firewall-cmd --runtime-to-permanent
  2. 永続的な設定を行い、ランタイムモードで設定を再ロードします。
    ~]# firewall-cmd --permanent <other options>
    ~]# firewall-cmd --reload
最初の方法は、永続化モードで設定を適用する前に設定をテストできます。

注記

特にリモートシステムでは、設定を誤ると、ユーザーが自身をロックする結果となります。そのような状況を回避するには、--timeout オプションを使用します。指定した時間が経つと、変更は元に戻ります。このオプションを使用すると、--permanent オプションを除外します。
たとえば、15 分間 SSH サービスを追加するには、以下のコマンドを実行します。
~]# firewall-cmd --add-service=ssh --timeout 15m