【Firewalld講座 第4回】ポート開放の鉄則!「サービス名」で管理するメリットとカスタムポートの設定手順

「通して良い通信」を定義する

こんにちは!「リナックス先生」です。
Firewalld講座、第4回へようこそ。

前回までは「ゾーン」という大きな枠組みの話をしてきました。
今回はいよいよ、そのゾーンの中に「具体的な通信の通り道(穴)」を開ける作業に入ります。

サーバーを構築して最初にぶつかる壁が「Webサーバーをインストールしたのに、ブラウザで表示されない!」というトラブルです。
その原因の9割は、このポート開放設定の漏れにあります。
今回は、安全かつ確実にポートを開けるための「正しい作法」をマスターしましょう。

コウ君

先生、よくネットの記事で「iptablesでポート80を開けるコマンド」とかを見かけるんですけど、Firewalldでも「80番を開けろ!」って命令すればいいんですよね?

リナックス先生

もちろんそれでも動くわ。
でも、Firewalldを使うなら「ポート番号」ではなく「サービス名」で指定するのがスマートなやり方よ。
なぜ「80番」ではなく「http」と指定すべきなのか、その理由も含めて詳しく解説していくわね。

1. 「サービス」と「ポート」の違いを知る

Firewalldで通信を許可する方法には、大きく分けて2つのアプローチがあります。

1-1. サービス名で指定する(推奨)

「http」「ssh」「ftp」といった、人間が分かりやすい名前で指定する方法です。
Firewalldはあらかじめ**「サービス定義ファイル(XML)」**を持っており、その中身を読み取って自動的に適切なポートを開けてくれます。

  • メリット: ポート番号を暗記していなくても設定できる。「何のための穴か」が一目瞭然で管理しやすい。
  • デメリット: 定義ファイルにないマイナーなアプリは指定できない(自分で作る必要がある)。

1-2. ポート番号で指定する

「8080/tcp」「5000/udp」のように、数字とプロトコルを直接指定する方法です。

  • メリット: どんなアプリケーションでも即座に設定できる。一時的なテストに便利。
  • デメリット: 数字の羅列になるため、後から見た時に「これ何のポートだっけ?」となりやすい。

2. 【実践】Webサーバー(http/https)を許可する

では、最も一般的な例として、Webサーバー(ApacheやNginx)へのアクセスを許可してみましょう。
使用するのはもちろん、推奨されている「サービス名指定」です。

2-1. 現在の設定を確認

まずは現状を確認します。services の行に注目してください。

sudo firewall-cmd --list-all

▼実行結果(例)

public (active)
  target: default
  interfaces: eth0
  services: cockpit dhcpv6-client ssh
  ports:

httphttps が含まれていないため、このままではWebサイトは表示されません。

2-2. httpとhttpsを追加する(Runtime設定)

まずは一時的な設定で試します。
--add-service=サービス名 オプションを使います。

sudo firewall-cmd --add-service=http --add-service=https

▼実行結果

success

確認してみましょう。

sudo firewall-cmd --list-services
cockpit dhcpv6-client http https ssh

増えていますね!これでWebアクセスが可能になりました。

2-3. 設定を永続化する(Permanent設定)

Runtime設定は再起動すると消えてしまいます。
本番運用では必ず --permanent をつけて実行し、設定ファイルに書き込みます。

sudo firewall-cmd --permanent --add-service=http --add-service=https
success

そして忘れてはいけないのが、リロードです。
Permanent設定を行っただけでは現在の通信には反映されないため、リロードして読み込ませます。

sudo firewall-cmd --reload
コウ君

なるほど!
--permanent をつけた時とつけてない時で、挙動が違うから「リロード」が必要なんですね。
「設定変更したらとりあえずリロード」って覚えておきます!

3. 不要なサービスを削除する

セキュリティの基本は「最小権限」です。使わない穴は塞ぐべきです。
AlmaLinux 9の初期設定では cockpit というサーバー管理ツールのポートが開いていますが、使わない場合は閉じておきましょう。

サービスの削除(永続設定)

--remove-service オプションを使います。

sudo firewall-cmd --permanent --remove-service=cockpit
sudo firewall-cmd --reload

これで、Web管理画面(9090番ポート)へのアクセスは遮断されました。

4. 【応用】ポート番号で直接指定する

次は、サービス定義にない独自のアプリケーションを使う場合です。
例えば、開発用のWebサーバーを「8080番ポート」で動かしたいとします。

4-1. ポートの追加

--add-port=番号/プロトコル という形式で指定します。
Webなどの一般的な通信は tcp、DNSなどは udp を指定します。

sudo firewall-cmd --permanent --add-port=8080/tcp
sudo firewall-cmd --reload

4-2. 確認

ポート番号で追加した設定は、services ではなく ports の欄に表示されます。

sudo firewall-cmd --list-all

▼実行結果(例)

public (active)
  services: dhcpv6-client http https ssh
  ports: 8080/tcp

4-3. ポート範囲の指定

「60000番から61000番まで全部開けたい」という場合(MoshやFTPパッシブモードなど)は、ハイフンで繋ぎます。

sudo firewall-cmd --permanent --add-port=60000-61000/udp

5. サービス定義の実体を見る

http と打つだけで、なぜ80番が開くのか?」
その答えは、/usr/lib/firewalld/services/ ディレクトリの中にあります。

実際に中身を覗いてみましょう。

cat /usr/lib/firewalld/services/http.xml

▼実行結果

<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>WWW (HTTP)</short>
  <description>HTTP is the protocol used to serve Web pages...</description>
  <port protocol="tcp" port="80"/>
</service>

このように、単純なXMLファイルで「サービス名」と「ポート番号」が紐付けられているだけなのです。
これを理解しておけば、第10回あたりで解説する「オレオレ定義ファイルの作成」も怖くありません。

6. トラブルシューティング:ポートを開けたのに繋がらない!

「Firewalldの設定は完璧なのに、ブラウザでアクセスできない…」
これは初心者が必ずハマる落とし穴です。原因は主に以下の3つです。

原因①:Webサーバー自体が動いていない

「門番(Firewalld)」が通してくれても、「受付係(Apache/Nginx)」がいなければ応答はありません。
以下のコマンドでWebサーバーが起動しているか確認してください。

systemctl status httpd

または

systemctl status nginx

原因②:リッスンポートが違う

Webサーバーの設定ファイル(httpd.confなど)で、待ち受けポートを「80」以外に変更していませんか?
以下のコマンドで、実際にサーバーが何番ポートで待機しているか確認できます。

ss -nlt

原因③:【重要】クラウド側のファイアウォール

AWS (Security Group)、Azure (NSG)、ConoHa、さくらVPSなどを使用している場合、OSの外側にもう一つの巨大なファイアウォールが存在します。
Firewalldの設定だけでなく、クラウドの管理画面(コンソール)からもポート開放許可を出す必要があります。
ここを見落として数時間悩むエンジニアが後を絶ちません。

リナックス先生

特に「原因③」は要注意よ。
「Linuxの中の設定」と「クラウド基盤の設定」は別物。
家で例えるなら、部屋のドア(Firewalld)を開けても、マンションのオートロック(クラウドFW)が開いてなければ誰も入ってこれないのと同じことね。

まとめ:名前で管理する習慣をつけよう

第4回では、具体的なポート開放の手順を学びました。

  • 基本は --add-service=サービス名 で許可する。
  • 一時的なテストなら Runtime、本番なら Permanent + Reload
  • サービスにない独自のポートは --add-port=番号/tcp で許可する。
  • 繋がらない時は、Webサーバーの起動確認と、クラウド側のFW設定を疑う。

これで、Webサイトを表示させたり、独自のアプリケーションを通信させたりする準備が整いました。
次回(第5回)は、これまで断片的に出てきた「Runtime(一時的)」と「Permanent(永続的)」の設定ファイル構造について、さらに深く掘り下げて解説します。

ここを曖昧にしていると、サーバー再起動のたびに設定が消える「設定ミステリー」に悩まされることになります。
しっかり理解して、堅牢なサーバー構築を目指しましょう!

▼ポート開放の練習に最適なVPS

実際にポートを開けたり閉めたりして、外部からのアクセス確認を行うにはVPSが必須です。クラウド側のファイアウォール設定も学べる、AlmaLinux 9対応のおすすめVPSはこちら。

【2026年最新】Linuxサーバー構築におすすめのVPS比較3選!現役エンジニアが速度とコスパで厳選
Linuxの勉強、まだ「自分のPC」でやって消耗していませんか?「Linuxを覚えたいけど、環境構築でエラーが出て先に進めない…」「VirtualBoxを入れたらパソコンが重くなった…」これは、Linux学習を始める9割の人がぶつかる壁です...

コメント