第5章 ファイアウォールの使用
5.1. firewalld
の使用
ファイアウォール は、外部からの不要なトラフィックからマシンを保護する方法です。ファイアウォールルール セットを定義することで、ホストマシンへの着信ネットワークトラフィックを制御できます。このようなルールは、着信トラフィックを分類して、拒否または許可するために使用されます。
firewalld
は、D-Bus
インターフェイスを使用して動的にカスタマイズ可能なホストベースのファイアウォールを提供するファイアウォールサービスデーモンです。ルールが変更するたびに、ファイアウォールデーモンを再起動しなくても、ルールの作成、変更、および削除を動的に可能にします。
firewalld
は、ゾーン および サービス の概念を使用して、トラフィック管理を簡素化します。ゾーンは、事前定義したルールセットです。ネットワークインターフェイスおよびソースをゾーンに割り当てることができます。許可されているトラフィックは、コンピューターが接続するネットワークと、このネットワークが割り当てられているセキュリティーレベルに従います。ファイアウォールサービスは、特定のサービスに着信トラフィックを許可するのに必要なすべての設定を扱う事前定義のルールで、ゾーンに適用されます。
サービスは、ネットワーク接続に 1 つ以上の ポート または アドレス を使用します。ファイアウォールは、ポートに基づいて接続のフィルターを設定します。サービスに対してネットワークトラフィックを許可するには、そのポートを 開く 必要があります。
firewalld
は、明示的に開いていないポートのトラフィックをすべてブロックします。trusted などのゾーンでは、デフォルトですべてのトラフィックを許可します。
図5.1 ファイアウォールスタック
[D]
5.1.1. ゾーン
firewalld
を使用して、ユーザーがインターフェイスに配置する信頼レベルと、そのネットワーク内のトラフィックに応じて、複数のゾーンにネットワークを分離できます。接続は、1 つのゾーンにしか指定できませんが、ゾーンは多くのネットワーク接続に使用できます。
NetworkManager は、
firewalld
にインターフェイスのゾーンを通知します。NetworkManager、firewall-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 回のステップで定義できます。
サービス設定オプションと一般的なファイル情報は、
firewalld.service (5)
の man ページで説明されています。サービスは、個別の XML 設定ファイルで指定します。このファイルは、service-name.xml
の形式で指定されます。プロトコル名は、firewalld
のサービス名またはアプリケーション名よりも優先されます。
5.1.3. ランタイムおよび永続化の設定
ランタイム モードでコミットされた変更は、
firewalld
が実行されている間にのみ適用されます。firewalld
を再起動すると、設定は 永続的な 値に戻ります。
変更した内容を再起動後も持続させる場合は、
--permanent
オプションを使用して適用します。firewalld
の実行中に変更を永続化させるには、--runtime-to-permanent
firewall-cmd オプションを使用します。
--permanent
オプションのみを使用して firewalld
の実行中にルールを設定すると、firewalld
が再起動する前にルールが有効になりません。ただし、firewalld
を再起動すると、開いているポートがすべて閉じ、ネットワークトラフィックが停止します。
5.1.4. CLI を使用したランタイムおよび永続化の設定の変更
CLI では、2 つのモードのファイアウォール設定を同時に修正することができません。CLI では、ランタイムまたは永続モードを修正します。永続的なモードでファイアウォール設定を変更するには、firewall-cmd コマンドで
--permanent
オプションを使用します。
~]# firewall-cmd --permanent <other options>
このオプションを使用しないと、コマンドはランタイムモードを変更します。
両方のモードで設定を変更する場合は、2 つの方法を使用できます。
- 以下のように、ランタイム設定を変更して、永続化します。
~]# firewall-cmd <other options> ~]# firewall-cmd --runtime-to-permanent
- 永続的な設定を行い、ランタイムモードで設定を再ロードします。
~]# firewall-cmd --permanent <other options> ~]# firewall-cmd --reload
最初の方法では、永続モードで設定を適用する前に、設定をテストできます。
注記
特にリモートシステムでは、設定を間違えると、ユーザーが自身をロックする結果となります。そのような状況を回避するには、
--timeout
オプションを使用します。指定した時間が経つと、変更は元に戻ります。このオプションを使用した場合は、--permanent
オプションが無効になります。
たとえば、15 分間
SSH
サービスを追加するには、次のコマンドを実行します。
~]# firewall-cmd --add-service=ssh --timeout 15m