黒い画面で「門番」と会話するための第一歩
こんにちは!「リナックス先生」です。
全12回でお届けしているFirewalld講座、第2回はいよいよ実践編に入ります。
前回は「Firewalld=サーバーを守る門番」「ゾーン=信頼レベルに応じた場所」という概念を学びました。
今回は、AlmaLinux 9のターミナル(黒い画面)を使って、実際に門番に指示を出すための「基本コマンド」をマスターしましょう。
いきなり「ポートを開ける」設定をする前に、まずは「今の状態を正しく見る」ことがエンジニアとして最も重要です。
現状把握ができないまま設定変更を行うことは、目隠しをして手術をするようなもの。事故の元です。
先生、前回「設定を間違えると自分自身が締め出される」って聞いてから、エンターキーを押す指が震えるんですけど…。
安全に確認する方法ってないんですか?
ふふ、慎重なのは良いエンジニアの素質よ。
今回は「設定を変更する」前の、「今の状態を見る」コマンドがメインだから安心して。
各コマンドが何を意味しているのか、1行ずつ丁寧に解説していくわね。これを読めば「何が起きているか」が手に取るように分かるようになるわ。
1. 魔法のコマンド「firewall-cmd」とは?
Firewalldを操作するとき、設定ファイル(/etc/firewalld/以下のXMLファイルなど)を直接エディタで開いて編集することは推奨されません。
構文エラーでFirewalldが起動しなくなるリスクがあるからです。
代わりに、専用のコマンドツールを使います。それが firewall-cmd です。
systemctl と firewall-cmd の違い
初心者が最初に混乱するのが、この2つの使い分けです。
- systemctl: サービス自体の管理(ON/OFFスイッチ)
「Firewalldそのものを起動する」「停止する」「再起動時の自動起動を有効にする」といった、OSレベルでの管理に使います。 - firewall-cmd: 内部ルールの管理(業務指示)
「80番ポートを通して」「SSHは許可して」「今の設定を見せて」といった、ファイアウォールとしての具体的な挙動を指示する時に使います。
第2回以降、私たちが設定作業で使うのは、主に firewall-cmd の方です。
2. まずは現状確認!ステータスを見る
サーバーに入って最初に打つべきコマンドはこれです。
まずは「門番が寝ていないか(起動しているか)」を確認しましょう。
2-1. 単純に動いているか確認する
以下のコマンドをコピーして実行してください。
sudo firewall-cmd --state
▼実行結果
running
running と表示されれば、Firewalldは正常に稼働しています。
もし not running と表示された場合は、Firewalld自体が停止しています。その場合は以下のコマンドで起動してください。
sudo systemctl start firewalld
2-2. 【最重要】今の設定ルールを一覧表示する
これがFirewalldで最も頻繁に使い、最も重要なコマンドです。
現在適用されているルールをすべて表示します。「何が許可されていて、何が拒否されているか」の全てがここに詰まっています。
sudo firewall-cmd --list-all
▼実行結果(AlmaLinux 9 初期状態の例)
public (active) target: default icmp-block-inversion: no interfaces: eth0 sources: services: cockpit dhcpv6-client ssh ports: protocols: forward: yes masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
この出力結果は「サーバーのセキュリティ状態そのもの」です。
なんとなく眺めるのではなく、各行が何を意味しているのかを理解しましょう。詳細を解説します。
| 項目 | 詳細解説 |
|---|---|
| public (active) | 現在有効なゾーン名です。(active)とあるのが、実際に今の通信を制御しているゾーンです。ここが「active」になっていない場合、その設定は空振りしています。 |
| target: default | このゾーンの基本姿勢です。「default」は通常「REJECT(拒否)」を意味します。つまり、「許可リストにないものは全部拒否する」という設定です。 |
| icmp-block-inversion | ICMP(Pingなど)のブロック設定を反転させる機能ですが、通常は「no」で構いません。 |
| interfaces: eth0 | このゾーンが守っている「LANケーブルの差込口(インターフェース)」です。eth0からの通信は、このpublicゾーンのルールに従うことを示しています。 |
| sources | IPアドレス単位でゾーンを適用する場合に使います(第6回で詳しく解説)。 |
| services | ★最重要項目。 「サービス名」で許可されている一覧です。ssh(リモート接続)やcockpit(管理画面)、dhcpv6-clientが許可されています。ここにhttpがないため、Webサイトは表示されません。 |
| ports | ポート番号(8080/tcpなど)で個別に許可しているもの。初期状態では空欄です。 |
| protocols | 特定のプロトコル(IGMPなど)を許可する場合に使いますが、Webサーバー等ではあまり使いません。 |
| forward: yes | 転送の許可設定ですが、単体のサーバーとして使う場合はあまり気にしなくてOKです。 |
| masquerade: no | IPマスカレード(ルーターのような機能)の有無です。ルーター構築をしない限り「no」です。 |
なるほど…。
一行ずつ見ると意味があるんですね。services のところに ssh があるから、僕は今こうしてターミナルをつなげているわけですね!
その通り!
逆に言えば、もし間違えてこの ssh を削除してしまうと…次回の接続から締め出されることになるわ。
だから --list-all は、作業の前と後に必ず打って確認する癖をつけるのよ。
3. 緊急時の最終手段「パニックモード」
サーバーを運営していると、予期せぬトラブルに遭遇することがあります。
例えば、海外からの不正アクセスが急増してサーバーが重くなったり、覚えのない大量のログが流れたりする「緊急事態」です。
そんなとき、ちまちまと個別のIPアドレスをブロックしている暇はありません。
Firewalldには、すべての通信を強制的に遮断する「パニックモード」という機能があります。
3-1. パニックモードをONにする(全遮断)
これを実行した瞬間、既存の接続も含め、すべての通信が物理的にケーブルを抜いたかのようにカットされます。
sudo firewall-cmd --panic-on
【超重要】VPSユーザーへの警告
注意:SSH接続中にこのコマンドを打つと、あなた自身のSSH接続も即座に切断され、二度とログインできなくなります。
「えっ、じゃあどうやって元に戻すの?」と思いますよね。
VPSなどのクラウドサーバーを使用している場合は、各社が提供している管理画面(ブラウザ)から「コンソール機能(VNCコンソール)」を開くことで、ネットワークを経由せずに直接サーバー画面を操作できます。
パニックモードを使うのは、「コンソール画面を開いてから」と覚えておいてください。
3-2. パニックモードをOFFにする(復旧)
攻撃が収まったら、コンソール画面から以下のコマンドを打って元に戻します。
sudo firewall-cmd --panic-off
3-3. 今の状態を確認する
「あれ?今パニックモードだっけ?」と不安になったら確認できます。
sudo firewall-cmd --query-panic
▼実行結果
yes
(※yesならパニックモード中、noなら通常運転です)
4. 設定を反映させる「リロード」
Firewalldの設定には、「設定ファイルに書く(Permanent)」作業と、「実際にメモリに読み込ませる(Reload)」作業の2段階が必要だと前回説明しました。
設定を変更した後は、必ずリロードコマンドを実行して反映させます。
リロードには2種類あります。
4-1. 通常リロード(推奨)
ほとんどの場合はこれを使います。
「接続中の通信を切断せずに」新しいルールを読み込みます。
例えば、SSHで作業中に新しいルール(例:Webサーバーの許可)を追加してリロードしても、今のSSH接続は切れません。安全です。
sudo firewall-cmd --reload
4-2. 完全リロード(注意)
こちらは、iptables時代の「サービスの再起動」に近い挙動をします。
Firewalldが持っている状態情報(ステートフルインスペクションの情報)を一度破棄して再読み込みするため、接続中の通信が一瞬切断される可能性があります。
sudo firewall-cmd --complete-reload
基本的には使いませんが、「設定がなぜか反映されない」「挙動がおかしい」というトラブルシューティングの時にだけ使用します。
5. サービス定義の確認
「そもそも http とか ssh って、Firewalldの中でどう定義されているの?」
「mysql って許可したら何番ポートが開くの?」
と気になった場合の確認方法です。
5-1. 利用可能なサービス一覧を見る
Firewalldがあらかじめ知っているサービス名は300以上あります。
sudo firewall-cmd --get-services
実行すると、amanda-client bacula bitcoin … といったサービス名がずらりと表示されます。
ここにある名前であれば、ポート番号を調べなくても --add-service=名前 で一発追加できます。
5-2. 特定のサービスの定義を見る
例えば、「ssh」というサービスが、実際には何番ポートを使う設定になっているのか確認します。
sudo firewall-cmd --info-service=ssh
▼実行結果
ssh ports: 22/tcp protocols: source-ports: modules: destination:
ports: 22/tcp と表示されました。
これにより、「sshを許可する」=「TCPの22番ポートを開ける」ことだと分かります。
ちなみに、これらの定義ファイルの実体は /usr/lib/firewalld/services/ ディレクトリの中にXMLファイルとして保存されています。
自分でオリジナルのサービス(例えば minecraft など)を作って登録することも可能です(これについては応用編で解説します)。
なるほど…ブラックボックスじゃなくて、ちゃんと中身を確認できるんですね。mysql のポート番号をど忘れしても、Google検索するより --info-service=mysql って打ったほうが早そうです!
まとめ:まずは「見る」ことから始めよう
第2回は、設定を変更する前の「基本操作・確認」に絞って解説しました。
地味に見えるかもしれませんが、トラブルの9割は「現状確認不足」から起こります。
今回覚えたコマンドをおさらいしましょう。
- 現状把握の基本:
firewall-cmd --list-all(これだけは絶対に暗記!) - 稼働確認:
firewall-cmd --state - 設定反映:
firewall-cmd --reload - 緊急停止:
firewall-cmd --panic-on(※SSH切断注意) - 定義確認:
firewall-cmd --info-service=サービス名
これで、現状を把握するための「目」を手に入れました。
次回(第3回)は、いよいよ概念編で学んだ「ゾーン」を実際に操作し、サーバーの用途に合わせて適切なセキュリティレベルを設定する方法を学びます。
「コマンドを打つのが少し楽しくなってきた」と思えたら、もう初心者は卒業間近ですよ!
▼コマンド練習に最適なVPS
失敗しても「OS再インストール」ボタン一つで、何度でも一瞬で初期状態からやり直せるのがVPSの良いところです。
手元のパソコンを汚さずにFirewalldの練習をするなら、AlmaLinux 9が使えるこちらのVPSがおすすめです。


コメント