サーバーを守る「門番」の正体を知ろう
こんにちは!「リナックス先生」です。
今回から全12回にわたり、Linuxサーバー(AlmaLinux 9)を守るための最強の盾、「Firewalld(ファイアウォール・ディー)」について徹底的に解説していきます。
Webサーバーやメールサーバーを構築する際、避けて通れないのが「ポート開放」や「通信制御」といったネットワーク設定です。
ここを曖昧にしたままサーバーを公開することは、世界中の攻撃者に対して「玄関の鍵を開けたまま外出する」のと同じくらい危険な行為です。
記念すべき第1回は、コマンドを打つ前に絶対に知っておくべき「Firewalldの概念」と「ゾーンという仕組み」について学びます。
急がば回れ。この仕組みさえ理解してしまえば、後の設定で迷子になることはありません。
先生!ついにネットワーク設定ですね…。
正直、「iptables」とか「ポート」とか聞くだけでアレルギーが出そうです。
以前、設定を間違えて自分自身がサーバーから締め出されて、泣く泣くOSを再インストールしたトラウマがあるんですよ。
その「締め出し事故(セルフロックアウト)」はインフラエンジニアなら誰もが通る道よ(笑)。
でも安心して。AlmaLinux 9で採用されているFirewalldは、昔のiptablesに比べて格段に人間が理解しやすい設計になっているの。
まずは仕組みをイメージで理解するところから始めましょう。
1. Firewalld とは何なのか?
Firewalldは、Linuxサーバー上で動作する「動的なパケットフィルタリング(通信制御)管理ツール」です。
簡単に言えば、サーバーという「お城」の入り口に立っている「門番」です。
1-1. ホワイトリスト方式のセキュリティ
Linuxのファイアウォールの基本原則は、以下の「ホワイトリスト方式」を採用しています。
- 原則(Default): すべての外部からの通信を「拒否(Drop/Reject)」する。
- 例外(Allow): 管理者が許可した特定の通信(Web閲覧やSSH接続など)だけを「通す」。
「怪しいやつを通さない」のではなく、「知っているやつ以外は全員通さない」というスタンスです。
これにより、未知の攻撃や不要なアクセスを根本からシャットアウトすることができます。
1-2. AlmaLinux 9 における立ち位置(nftablesとの関係)
少し専門的な話をしましょう。
実は、実際に通信をブロックしているのはFirewalld自体ではありません。Linuxカーネル(OSの中核)にある nftables というパケット処理機能が実働部隊です。
しかし、この nftables を人間が直接操作するには、非常に難解で長いコマンドを記述する必要があります。
そこで、人間が分かりやすい言葉で指示を出せるように作られた「司令塔(フロントエンド)」がFirewalldです。
ユーザー(あなた) ⬇ "Webサーバーを開けて!" (firewall-cmd) Firewalld (司令塔) ⬇ "ルール変換" nftables (実働部隊) ⬇ "パケットフィルタリング実行" Linuxカーネル
CentOS 7などの古いOSでは iptables が使われていましたが、AlmaLinux 9ではより高性能な nftables がバックエンドで動いています。
しかし、私たちは裏側の仕組みを意識することなく、Firewalldの操作だけを覚えればOKです。
2. 最重要概念「ゾーン (Zone)」を完全理解する
Firewalldを理解する上で、最大の壁となるのが「ゾーン」という考え方です。
これさえ理解できれば、Firewalldは攻略したも同然です。
2-1. ゾーンとは「場所」に合わせた信頼レベル
ゾーンとは、「ネットワークの信頼度に応じたセキュリティルールのセット」のことです。
あなたはノートPCを使っていると想像してください。以下の2つの場所で、セキュリティに対する警戒心は同じでしょうか?
- 自宅のリビング(Home): 家族しかいない。プリンタ共有などを許可しても安全。
- 空港のフリーWi-Fi(Public): 不特定多数がいる。他人のPCからの接続は絶対拒否したい。
このように、「今つながっているネットワークがどの程度信頼できるか」によって、適用するルール(ゾーン)を切り替えるのがFirewalldの特徴です。
2-2. 定義済みゾーン一覧
AlmaLinux 9には、あらかじめ9つのゾーンが用意されています。
すべてを暗記する必要はありませんが、太字のゾーンは頻繁に使用します。
| ゾーン名 | 信頼レベル | ターゲット | 用途・解説 |
|---|---|---|---|
| drop | 最低 | DROP | すべての着信パケットを破棄します。相手には何も返信せず「無視」します。最もセキュリティが高い状態です。 |
| block | 低 | REJECT | すべての着信パケットを拒否しますが、相手に「拒否しました」という通知(ICMP Prohibited)を返します。 |
| public | 低 | REJECT | 【デフォルト】 公衆の場。明示的に許可した通信(SSHやWebなど)以外はすべて拒否します。VPSなどインターネットに直接つながるサーバーは通常これを使います。 |
| external | 低 | REJECT | publicと似ていますが、ルーターとして使う場合に「マスカレード(IP変換)」が有効になっています。 |
| dmz | 中 | REJECT | DMZ(非武装地帯)。内部ネットワークへのアクセスは制限しつつ、外部公開用に一部を開放する場合に使います。 |
| work | 中 | REJECT | 会社の社内LANなど。多くのパソコンは信頼できるが、全幅の信頼は置かない状態。 |
| home | 高 | REJECT | 自宅ネットワーク。周囲のコンピュータは概ね信頼できる状態。 |
| internal | 高 | REJECT | homeと似ていますが、内部ネットワーク専用です。 |
| trusted | 最高 | ACCEPT | すべての通信を許可します。ファイアウォールが無い状態と同じです。テスト時や完全に信頼できる閉域網で使います。 |
なるほど!
VPSを借りてWebサーバーを作るなら、インターネットという「危険な場所」につながっているから、基本はpublicゾーンを使えばいいんですね?
その通り!
サーバーのLANケーブル(インターフェース)が「どのゾーンに挿さっているか」を決めるイメージね。
AlmaLinux 9の初期設定では、すべてのインターフェースが自動的にpublicゾーンに割り当てられるようになっているわ。
3. サービスとポートの考え方
ゾーン(場所)が決まったら、次はそのゾーンに対して「通して良い通信(穴)」を定義します。
指定方法には大きく分けて2種類あります。
3-1. サービス名で指定する(推奨)
「http」や「ssh」といったサービス名で許可を出します。
Firewalldはあらかじめ「httpと言えば80番ポートのことだよね」「httpsは443番だよね」という定義リスト(XMLファイル)を持っています。
httpを許可 → Webサイトが見られるようになるsshを許可 → リモート操作ができるようになるsmtpを許可 → メールが送れるようになる
ポート番号が変わった場合でも定義ファイルを直せば一括管理できるため、基本はこちらを使います。
3-2. ポート番号で指定する
「8080/tcp」のように、具体的な番号とプロトコルで許可を出します。
以下のようなケースで使用します。
- ウェルノウンポート(有名なポート)以外の独自のアプリを動かす場合
- 一時的に特定のポートを開けてテストしたい場合
- サービス定義を作るほどではない小規模なツールの場合
4. 設定の寿命:「Runtime」と「Permanent」
第1回の最後に、初心者が最もハマりやすい設定の保存について解説します。
Firewalldには2つの設定モードがあります。
Runtime(ランタイム)設定
- 特徴: 設定を変更すると、「即座に」反映されます。
- 寿命: サーバーを再起動したり、Firewalldをリロードすると設定が消えます。
- 用途: 一時的なテストや、間違った設定をして締め出されないかの確認用。
Permanent(パーマネント)設定
- 特徴: 設定ファイル(
/etc/firewalld/zones/)に書き込まれ、再起動しても消えません(永続化)。 - 寿命: 永続しますが、設定しただけでは反映されず、リロード(再読み込み)が必要です。
- 用途: 本番運用の設定。
えっ!?
じゃあ「ポート開放しました!」ってコマンドを打っても、サーバーを再起動したら「また繋がらなくなった…」ってことが起きるんですか?
まさにそれが初心者がハマる罠No.1よ。
Runtimeでテストして動くことを確認し、その後にPermanentで書き込むのが理想的な手順ね。
ただ、慣れてくるといきなりPermanentで書くことも多いから、コマンドには必ず --permanent というオプションをつける癖をつける必要があるわ。
5. インストール状況の確認(実機操作)
最後に、お使いのAlmaLinux 9にFirewalldが入っているか確認して終わりましょう。
インストール確認
$ sudo dnf list installed firewalld
AlmaLinux 9の標準構成であれば、最初からインストールされています。
サービスの稼働確認
$ systemctl status firewalld
Active: active (running) と表示されれば準備完了です。
もし inactive の場合は、以下のコマンドで起動しておいてください。
$ sudo systemctl start firewalld
$ sudo systemctl enable firewalld
まとめ:Firewalldは怖くない
第1回は、具体的な設定コマンドを打つ前の「概念」を整理しました。
- Firewalldは、サーバーを守る「門番(パケットフィルタ)」。
- 「ゾーン」によって、信頼レベル(=セキュリティの厳しさ)を使い分ける。
- インターネット公開用サーバーは、通常「public」ゾーンを使う。
- 設定には「一時的(Runtime)」と「永続的(Permanent)」がある。
この仕組みさえ頭に入っていれば、どんな複雑な設定も怖くありません。
次回(第2回)は、実際にターミナルでコマンドを打ち込み、現在の設定を確認したり、緊急時に通信を遮断する操作などを学んでいきます。
Linuxサーバー構築の基礎となる部分です。焦らず一つずつマスターしていきましょう!
▼Firewalldの検証にも最適なVPS
セキュリティ設定を学ぶには、実際にインターネットに接続されたVPS環境での実験が一番です。AlmaLinux 9がすぐに使えるおすすめVPSはこちら。


コメント