SLES 15 サーバー上でサービスが実行されていても、ファイアウォールが新しい受信トラフィックをブロックするため、リモート クライアントでタイムアウトが発生する場合があります。通常、解決策は、アクティブな firewalld ゾーンを特定し、アプリケーションが必要とするサービスまたはポートのみを許可することです。この作業に使用する SLES コマンドライン ツールは ですfirewall-cmd。
このガイドは、SUSEのSLES 15 SP7セキュリティおよび強化ガイドとfirewalldコマンドリファレンス(2026年10月7日時点)に基づいています。以前のサービスパックやアップグレードされたSLES 12システムでは、状態が異なったり、ファイアウォールの設定が旧式になっている場合があります。ターミナル画面は代表的な例であり、実際のサーバーから取得した結果ではありません。インターフェース名、ゾーン、およびサービスは、ご使用のホストの値に置き換えてください。
1. firewalldが実行されていることを確認します。
SUSEのドキュメントによると、SLES 15ではfirewalldがデフォルトでインストールされ、有効になっています。YaSTは通常、インストール後にfirewalldを起動し、インターフェースをデフォルトpublicゾーンに配置します。しかし、デフォルト設定が変更されていないと想定するのではなく、マシンを確認してください。以下のコマンドを、使用が許可されているアカウントで実行してくださいsudo。
sudo systemctl status firewalld
sudo firewall-cmd --state
サービス マネージャーは、firewalldがアクティブであることを報告し、firewall-cmd --stateが報告する必要がありますrunning。サービスがインストールされているが停止している場合は、起動してブート時に有効にします。
sudo systemctl enable --now firewalld
firewall-cmdパッケージが見つからない場合は、firewalldパッケージがインストールされており、有効な SUSE リポジトリで利用可能かどうかを確認してください。管理対象サーバー上でファイアウォール コンポーネントを安易にインストールまたは交換しないでください。
サンプル端末はfirewalldの状態を確認し、eth0インターフェースを持つアクティブなパブリックゾーンの例を表示します。
2. サーバーインターフェースを保護するゾーンを見つける
Firewalldはルールをゾーンにグループ化し、各ゾーンは異なる信頼レベルを表します。publicゾーンは一般的に信頼されていないネットワークに使用されます。あるゾーンで開かれたサービスは、すべてのゾーンで自動的に開かれるわけではないため、正しいルールが間違ったゾーンにあると、アプリケーションにアクセスできなくなる可能性があります。
sudo firewall-cmd --get-active-zones
sudo firewall-cmd --get-default-zone
sudo firewall-cmd --zone=public --list-all
アクティブゾーンの出力を使用して、クライアントトラフィックを伝送するインターフェイスに接続されているゾーンを見つけます。インターフェイス名はeth0、、、ens160または別の名前の場合があります。1 つのインターフェイスを確認する必要がある場合は、次のコマンドを実行します。
sudo firewall-cmd --get-zone-of-interface=eth0
実際のインターフェースに置き換えてくださいeth0。ゾーンに明示的に割り当てられていないインターフェースは、デフォルトゾーンによって処理されます。デフォルトゾーンを安易に変更しないでください。変更すると、それに依存するインターフェースに影響が出る可能性があります。リモートサーバーでは、ファイアウォール設定を再読み込みする前に、SSH またはその他の管理ゾーンを特定し、そのアクセスルールを確認してください。コンソールまたは帯域外の復旧パスが存在する場合は、利用できるようにしておいてください。
ゾーン一覧には、変更前のサンプルパブリックゾーンに関連付けられているインターフェースとサービスが表示されます。
3. 名前付きサービスまたは特定のポートを選択します
firewalldサービスは、1つ以上のポートとプロトコルを含む名前付き定義です。ポート番号を記憶するよりも、既知のサービスを名前で許可する方が通常は簡単です。インストール済みのサービス一覧を確認し、使用する前に定義を検査してください。
sudo firewall-cmd --get-services
sudo firewall-cmd --info-service=http
Webサーバーの場合、定義済みのhttpサービスは通常TCPポート80をカバーします。TLS httpsWebトラフィック用のサービスは別途用意されています。SLESのドキュメントには、DHCPなどの例とともに、同じサービスベースの方法が示されています。アプリケーションに必要な実際のサービスを使用し、不明な場合はローカルでサービス定義を確認してください。
定義済みのサービスが該当しない場合は、必要なポートとプロトコルのみを開放してください。たとえば、TCPポート8443でリッスンするアプリケーションは、 で許可できます--add-port=8443/tcp。ファイアウォールでポートを開放しても、アプリケーションが起動したり、ネットワークにバインドされたり、セキュリティが確保されたりするわけではありません。サービス自体が目的のアドレスでリッスンするように設定されていることを確認してください。
まず一時的なルールをテストしてください。
短時間のテストを行うには、ランタイム構成にルールを適用します。ランタイムの変更は即座に有効になりますが、永続的に保存しない限り、ファイアウォールのリロードやサービスの再起動後に失われます。Firewalldは時間制限付きルールをサポートしており、テストを自動的に期限切れにしたい場合に便利です。
sudo firewall-cmd --zone=public --add-service=http --timeout=5m
一度限りのポートテストの場合は、--add-port=8443/tcp --timeout=5mの代わりにを使用してください--add-service=http。サーバーインターフェイスが実際に含まれているゾーンを選択してください。publicホストが別のゾーンを使用している場合は、をコピーしないでください。
この例のコマンドは、HTTPサービスをパブリックゾーンの永続的な設定に追加し、その後firewalldをリロードしてそれを適用します。
4. ルールを保存してfirewalldをリロードします
ルールを保存する準備ができたら、それを永続的な設定に追加します。次の例は、パブリックゾーンでのHTTPアクセスを許可するものです。
sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --reload
HTTPSの場合は、永続的なコマンドを繰り返します--add-service=https。カスタムアプリケーションポートの場合は、次のようなコマンドを使用します。
sudo firewall-cmd --permanent --zone=public --add-port=8443/tcp
sudo firewall-cmd --reload
これらの例では、まず永続的な設定を変更し、その後システムをリロードして新しいルールを有効にします。リロードによって、実行時設定も永続的な設定に置き換えられます。そのため、他の場所で実行時のみに適用される変更は破棄される可能性があります。本番システムをリロードする前に、重要な実行時ルールと永続ルール、特にリモート管理アクセスについて確認してください。
ランタイム優先のワークフローもあります。ランタイムでルールをテストし、サービスが正常に動作することを確認してから、同じルールを追加して--permanent再読み込みします。他の管理者やソフトウェアによって行われた一時的な変更を含め、現在のすべてのランタイムルールを保存するつもりがない限り、ショートカットとして使用すること--runtime-to-permanentは避けてください。
変更が正しく機能したことをどのように確認できますか?
アクティブなランタイムルールと保存済みのルールの両方を確認してください。パブリックゾーンのHTTPサービスの場合は、以下を実行します。
sudo firewall-cmd --zone=public --query-service=http
sudo firewall-cmd --permanent --zone=public --list-services
sudo firewall-cmd --check-config
クエリは を返しyes、永続的なサービス リストには が含まれhttp、構成チェックは正常に完了するはずです。ポート ルールの場合は、同等のコマンドで--query-port=8443/tcpとを使用してください--list-ports。また、サーバーにアクセスできる別のクライアントからテストしてください。ローカル ファイアウォール クエリはルールが存在することを確認するものであり、DNS、ルーティング、アップストリーム ファイアウォール、またはアプリケーション リスナーが正しいことを確認するものではありません。
検証コマンドは、アクティブなサービスルール、保存されたサービスリスト、および永続的な構成構文をチェックします。
よくある問題とその安全な対処法
- ルールは存在しているのに接続タイムアウトが発生する場合は、クライアント側のインターフェースに割り当てられたゾーンにルールが追加されていることを確認してください。次に、アプリケーションが想定されるアドレスとポートでリッスンしていることを確認し、上流のネットワークファイアウォールもチェックしてください。
- ルールは再読み込みまでは機能していました。おそらく実行時にのみ追加されていたのでしょう。ルールを追加して
--permanent再読み込みし、両方の設定を照会してください。
- SSHアクセスが危険にさらされています。リロードする前に、アクティブゾーンのサービスと永続サービスを確認してください。SSHが必要なのに利用できない場合は、
sshリロードする前に適切なゾーンにサービスを永続的に追加してください。2つ目の接続をテストするまで、現在のリモートセッションを閉じないでください。
- 以前のSUSEリリースから移行しています。SLES 15では、SuSEfirewall2がfirewalldに置き換えられました。SUSEは、従来のファイアウォールプロファイルには下位互換性が限られていることを警告しています。古いルールがすべて翻訳されていると想定するのではなく、移行ガイドを確認してください。
- ルールが矛盾しているように見えます。firewalldはホストのファイアウォールルールを管理することを目的としています。SUSE は、などのツールを使用して同じルールを個別に変更することを推奨していません。
iptablesこれは、アクティブな構成を混乱させる可能性があるためです。
不要な永続的なサービスまたはポートを削除するには、一致するオプションを とともに使用し--remove-service、--remove-portその後--permanent再読み込みして再度確認します。たとえば、sudo firewall-cmd --permanent --zone=public --remove-service=httpの後に を続けて使用して、パブリック ゾーンから HTTP を削除しますsudo firewall-cmd --reload。
終了する前に自己チェックしてください
firewalld実行中で、サーバー起動時に開始されます。
- トラフィックを受信するインターフェースのアクティブゾーンを特定しました。
- そのゾーンでは、アプリケーションが必要とするサービスまたはポートのみが許可されます。
- 再起動前および再起動後も、リモート管理は引き続き可能です。
- このルールは実行時クエリと永続クエリの両方に表示され、構成チェックも合格します。
- 別のホストからの接続テストにより、アプリケーションにアクセス可能であることが確認されました。
リリース固有の詳細については、SUSE SLES 15 SP7 ファイアウォール ガイド、firewall-cmd マニュアル、および firewalld の実行時および永続的な構成、ポートまたはサービスのオープンに関する注意事項を参照してください。