「通して良い通信」を定義する
こんにちは!「リナックス先生」です。
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:
http や https が含まれていないため、このままでは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はこちら。


コメント