はじめに
Firewalld は、多くのLinuxディストリビューションで利用可能なファイアウォール管理ソリューションです。Linuxカーネルが提供するiptablesパケットフィルタシステムのインターフェースとして機能します。このガイドでは、サーバーのファイアウォールを設定する方法を学びます。また、firewall-cmd管理ツールを使用したファイアウォール管理の基本についても説明します。
Firewalldの基本
FirewallDは、iptablesのチェインやルールではなく、ゾーンとサービスという概念を使用します。設定するゾーンとサービスに応じて、システムへの送受信が許可されるトラフィックと許可されないトラフィックを制御できます。FirewallDは、コマンドラインユーティリティのfirewall-cmdを使用して設定および管理できます。
起動時に開始するようにファイアウォールをインストールして有効にする
ほとんどのLinuxディストリビューションでは、firewallDはすでにインストールされています。ただし、自分でインストールする必要がある場合は、以下の構文を入力してください。
|
1 |
sudo yum install firewalld |
firewallidがインストールされたら、サービスを有効にしてサーバーを再起動できます:
|
1 2 |
sudo systemctl enable firewalld sudo reboot |
次に、サーバーを再起動します。サーバーの再起動が成功すると、ファイアウォールが有効になります。その後、以下のコマンドを使用してサービスがアクティブ化されたことを確認します:
|
1 |
sudo firewall-cmd --state |

出力は、デフォルトのファイアウォール設定が機能していることを示しています。
デフォルトの確認
このコマンドを使用して、サーバーによって選択されているゾーンを確認できます:
|
1 |
firewall-cmd --get-default-zone |

以下を入力して、アクティブなゾーンを確認します:
|
1 |
firewall-cmd --get-active-zones |

次の構文を使用して、デフォルトゾーンの設定を出力し、パブリックエリアに関連付けられているルールを確認します:
|
1 |
sudo firewall-cmd --list-all |

出力は、このゾーンがデフォルトゾーンかつアクティブゾーンであることを示しています。また、eth0およびeth1インターフェースがこのゾーンに割り当てられていることも示しています。
代替ゾーンの確認
デフォルトゾーンやアクティブゾーンに加えて、探索できる他のゾーンもあります。利用可能なすべてのゾーンを表示するには、このコマンドを入力します:
|
1 |
firewall-cmd --get-zones |

–list-allコマンドに–zone=パラメータを追加して、ゾーンに割り当てられている特定の構成を確認します:
|
1 |
sudo firewall-cmd --zone=home --list-all |

インターフェースゾーンの変更
オプション–change-interfaceを使用して、インターフェースゾーンを簡単に変更できます。次のコマンドは、インターフェースeth1をワークスペースに割り当てます:
|
1 |
sudo firewall-cmd --zone=work --change-interface=eth1 |
以下を入力して変更を確認できます:
|
1 |
sudo firewall-cmd --get-active-zones |
デフォルトゾーンの変更
デフォルトゾーンを変更するには、–set-default-zoneの後にデフォルトとして設定したいゾーンの名前を指定します。例えば、デフォルトゾーンを変更するには、次のコマンドを実行します:
|
1 |
sudo firewall-cmd --set-default-zone=home |
次に、以下で変更を確認できます:
|
1 |
sudo firewall-cmd --get-default-zone |
アプリケーションのルールの設定
サービスに対するファイアウォールの例外を定義するために必要な基本事項を確認しましょう:
ゾーンへのサービスの追加
最も簡単な方法は、必要なポートまたはサービスを使用しているゾーンに追加することです。同様に、–get-servicesオプションを使用して、利用可能なすべてのサービスを表示できます:
|
1 |
firewall-cmd --get-services |

–add-service = パラメーターを使用して、ゾーンのサービスを有効にすることができます。このアクションは、デフォルトのゾーン、または –zone = パラメーターで定義されたゾーンを対象とします。デフォルトでは、現在のファイアウォールセッションのみが設定されます。–permanent フラグを有効にすることで、永続的なファイアウォール設定をセットアップできます。たとえば、通常の HTTP トラフィックを提供する Web サーバーを実行している場合、次のように入力することで、このセッションの “public” ゾーンのインターフェースに対してこのトラフィックを許可できます。
|
1 |
sudo firewall-cmd --zone=public --add-service=http |
デフォルトのゾーンを変更したい場合は、–zone = を省略できます。操作が成功したかどうかは、–list-all または –list-services 操作で確認できます。
|
1 |
sudo firewall-cmd --zone=public --list-services |

すべてが期待通りに動作していることを確認したら、再起動後もサービスを引き続き利用できるように、永続的なファイアウォールルールを変更したくなるでしょう。次の構文を入力することで、“public” ゾーンへの変更を永続的に適用できます。
|
1 2 3 4 |
sudo firewall-cmd --zone=public --permanent --add-service=http 出力: success |
–list-services 操作に –permanent フラグを追加することで、これが成功したかどうかを確認できます。すべての永続的な操作には sudo を使用する必要があります。
|
1 2 3 4 |
sudo firewall-cmd --zone=public --permanent --list-services 出力: dhcpv6-client http ssh |
これで、“public” ゾーンでポート 80 での HTTP トラフィックが許可されました。以下のコマンドを使用して、これを現在のセッションおよび永続的なルールセットに追加できます。
|
1 2 3 |
sudo firewall-cmd --zone=public --add-service=https sudo firewall-cmd --zone=public --permanent --add-service=https |
要件に適合するサービスがない場合、この状況に対処するための優れた方法が 2 つあります。
- ゾーンのポートを開放する
特定のアプリケーションのサポートを追加する最も簡単な方法は、各ゾーンで使用されるポートを開放することです。開放する必要があるポートのポート番号またはポート範囲と、対応するプロトコルを指定するだけです。たとえば、アプリケーションがポート 5000 で動作し、TCP を使用している場合、–add-port = パラメーターを使用して、このセッションの “public” ゾーンにそれを追加できます。プロトコルは TCP または UDP のいずれかです。
|
1 2 3 4 |
sudo firewall-cmd --zone=public --add-port=5000/tcp 出力: success |
操作が成功したことを確認するには、–list-ports 操作を使用します。
|
1 2 3 4 |
sudo firewall-cmd --zone=public --list-ports 出力: 5000/tcp |
また、範囲内の開始ポートと終了ポートをハイフンで区切ることで、連続したポート範囲を指定することもできます。たとえば、アプリケーションが UDP ポート 4990 から 4999 を使用している場合、次のように記述して “public” でそれらを開放できます。
|
1 |
sudo firewall-cmd --zone=public --add-port=4990-4999/udp |
テスト後、おそらくそれらを永続的なファイアウォールに追加したくなるでしょう。これを行うには、次のように入力します。
|
1 2 3 |
sudo firewall-cmd --zone=public --permanent --add-port=5000/tcp sudo firewall-cmd --zone=public --permanent --add-port=4990-4999/udp sudo firewall-cmd --zone=public --permanent --list-ports |

- サービスの定義
サービスとは、関連付けられた名前と説明を持つポートのコレクションです。サービスはポートよりも管理が容易ですが、最初に少し作業が必要です。最も簡単な開始方法は、既存のスクリプト(/ usr / lib / firewalld / services 内)を /etc/firewalld/services ディレクトリにコピーすることです。たとえば、次のように SSH サービス定義をコピーして “example” サービス定義で使用できます。XML サフィックスを除いたファイル名が、ファイアウォールサービスの一覧におけるサービス名になります。
|
1 |
sudo cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/example.xml |
この時点で、コピーしたファイル内の定義を調整できます。
|
1 |
sudo vi /etc/firewalld/services/example.xml |
まず、ファイルにはコピーした SSH 定義が含まれています。
|
1 2 3 4 5 6 |
<?xml version="1.0" encoding="utf-8"?> <service> <short>SSH</short> <description>セキュアな シェル (SSH) は a プロトコル 用 ログイン 先 および 実行 コマンド 上での リモート マシン. それ 提供します 安全な 暗号化された 通信. もし あなたが 計画している なら アクセスすることを あなたの マシンに リモートから 経由で SSH 経由で a ファイアウォールで保護された インターフェース, 有効にします この オプション. あなた が必要です the openssh-サーバー パッケージ インストールされている ため この オプションが に なる 役立つ.</description> <port protocol="tcp" port="22"/> </service> |
この定義の大部分はメタデータで構成されています。<short> タグ内のサービスのショート名を変更する必要があります。これは判別しやすいサービス名です。今回の “example” サービスでは、TCP 用にポート 7777、UDP 用にポート 8888 を開く必要があると仮定します。i キーを押して INSERT モードに入ることで、既存の定義を変更できます。
|
1 2 3 4 5 6 7 |
<?xml version="1.0" encoding="utf-8"?> <service> <short>Example Service</short> <description>これ は 単なる 1つの サンプル サービス. それ おそらく べきではない'ない 〜である 使用される 〜上で 1つの 実際の システム.</description> <port protocol="tcp" port="7777"/> <port protocol="udp" port="8888"/> </service> |
次に、ESC キーを押し、:x と入力してファイルを保存して閉じます。その後、新しいサービスにアクセスできるように、以下のコマンドを入力してファイアウォールを再起動します。
|
1 |
sudo firewall-cmd --reload |
その後、以下のコマンドを使用して、利用可能なサービスの一覧を表示します。
|
1 |
firewall-cmd --get-services |

このサービスがゾーンで利用可能になりました。
独自のゾーンの作成
定義済みのゾーンはほとんどのユーザーにとって十分である可能性が高いですが、その機能をより詳細に表す独自のゾーンを定義すると便利な場合があります。
ゾーンを追加するときは、永続的なファイアウォール設定に追加します。その後、リロードして設定をセッションに反映させることができます。たとえば、次のように入力して、前に説明した2つのゾーンを作成できます。
|
1 2 |
sudo firewall-cmd --permanent --new-zone=publicweb sudo firewall-cmd --permanent --new-zone=privateDNS |
次のコマンドを使用して、それらが永続的な設定に存在することを確認できます。
|
1 |
sudo firewall-cmd --permanent --get-zones |

ファイアウォールをリロードして、これらの新しいゾーンをアクティブな設定に反映させます。
|
1 2 3 4 5 |
sudo firewall-cmd --reload firewall-cmd --get-zones 出力: block dmz drop external home internal privateDNS public publicweb trusted work |
これで、適切なサービスとポートをゾーンに割り当てることができます。たとえば、“publicweb”ゾーンには、SSH、HTTP、およびHTTPSサービスを追加するとよいでしょう。
|
1 2 3 |
sudo firewall-cmd --zone=publicweb --add-service=ssh sudo firewall-cmd --zone=publicweb --add-service=http sudo firewall-cmd --zone=publicweb --add-service=https |

また、次のコマンドを使用して、DNSサービスを“privateDNS”ゾーンに追加することもできます。
|
1 2 |
sudo firewall-cmd --zone=privateDNS --add-service=dns sudo firewall-cmd --zone=privateDNS --list-all |

次に、インターフェースをこれらの新しいゾーンに変更してテストできます。
|
1 2 3 |
sudo firewall-cmd --zone=publicweb --change-interface=eth0 sudo firewall-cmd --zone=privateDNS --change-interface=eth1 |
設定をテストして、動作するかどうかを確認します。これらの値が機能する場合は、同じルールを恒久的な設定に追加する必要があります。これは、—permanentインジケーターを指定してルールを再適用することで実行できます。
|
1 2 3 4 5 6 7 |
sudo firewall-cmd --zone=publicweb --permanent --add-service=ssh sudo firewall-cmd --zone=publicweb --permanent --add-service=http sudo firewall-cmd --zone=publicweb --permanent --add-service=https sudo firewall-cmd --zone=privateDNS --permanent --add-service=dns |
これらのルールを恒久的に適用した後、ネットワークを再起動し、ファイアウォールサービスをリロードできます。
|
1 2 3 |
sudo systemctl restart network sudo systemctl reload firewalld |
ゾーンが正しく割り当てられていることを確認します。
|
1 |
firewall-cmd --get-active-zones |

さらに、両方のゾーンに正しいサービスが設定されていることを確認します。
|
1 2 3 4 |
sudo firewall-cmd --zone=publicweb --list-services 出力: http https ssh |
|
1 2 3 4 5 |
sudo firewall-cmd --zone=privateDNS --list-services 出力: dns |
いずれかのゾーンを他のインターフェースのデフォルトとして設定したい場合は、次のコマンドを使用して、パラメータ –set-default-zone= でこの動作を設定する必要があります。
|
1 |
sudo firewall-cmd --set-default-zone=publicweb |
まとめ
これで、独自のゾーンの作成に成功しました。日常的に使用するために、CentOSシステムでfirewalldサービスを管理するための基本的な理解が得られたはずです。firewalldサービスを十分に把握することで、そのパワーと柔軟性を最大限に活用できるようになります。
快適なコンピューティングを!


コメント
コメントはまだありません。最初のコメントを投稿しましょう。