【Firewalld講座 第10回】ログ記録も接続制限も自在!「リッチルール」で最強のセキュリティポリシーを記述する

「ただ通す」だけじゃ満足できないあなたへ

こんにちは!「リナックス先生」です。
Firewalld講座、記念すべき第10回です。

これまでは「ゾーン」と「サービス」を使って、比較的シンプルな門番の役割を果たしてきました。
しかし、サーバーエンジニアとして経験を積むと、こんな要望が出てくるはずです。

  • 「SSHで誰かがログインしようとしたら、その記録(ログ)を残したい
  • 「特定の怪しいIPアドレスだけをピンポイントで拒否したい」
  • 「パスワード総当たり攻撃が怖いから、1分間に3回間違えたら遮断したい」

標準のゾーン設定(--add-service)だけでは、これらの要望は叶えられません。
そこで登場するのが、より細かく、リッチ(豊富)な条件を記述できる「リッチルール(Rich Rules)」です。

コウ君

先生、「リッチ」って名前がつくと急に難しそうなんですけど…。
コマンドも長くなりそうだし、僕に扱えますかね?

リナックス先生

確かに構文は少し長くなるわ。
でも、英語の「S(主語)+ V(動詞)+ O(目的語)」の文法と同じだと思えば簡単よ。
「誰が」「何をしたら」「どうする」を並べるだけ。今日は使えるパターンをコピペで覚えちゃいましょう!

1. リッチルールの基本構文

リッチルールは、基本的に以下のコマンド形式で追加します。
'シングルクォート' で囲むのがポイントです。

sudo firewall-cmd --permanent --add-rich-rule='ルールの中身'

ルールの中身は以下のような構造になっています。

  1. family: IPv4 か IPv6 か
  2. source: 誰からの通信か(IPアドレス)
  3. service/port: どのサービスか(SSHや80番など)
  4. log: ログを取るかどうか(省略可)
  5. action: どうするか(accept / reject / drop)

言葉で説明するより、実例を見たほうが早いでしょう。

2. 【実践】特定のIPアドレスをブロックする(ブラックリスト)

「このIPアドレス(例: 1.2.3.4)から不審なアクセスが続いている!今すぐ遮断したい!」
そんな時は、drop アクションを使います。

ブロック設定の追加

sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="1.2.3.4" drop'
sudo firewall-cmd --reload

これは「IPv4で、送信元が1.2.3.4の通信は、問答無用で捨てる(drop)」という意味です。
drop は相手に返事をせず無視します。reject にすると「拒否されました」という通知を相手に返します。

設定の確認

リッチルールは専用のコマンドで確認します。

sudo firewall-cmd --list-rich-rules

▼実行結果

rule family="ipv4" source address="1.2.3.4" drop

3. 【実践】SSH接続のログを記録する

通常、Firewalldは通信を許可しても「許可しました」というログは残しません。
しかし、SSHのような重要な入り口は「いつ誰が入ったか」を記録しておきたいものです。

ログ付き許可ルールの追加

既存のSSH許可(--add-service=ssh)とは別に、リッチルールで上書きするイメージです。

sudo firewall-cmd --permanent --add-rich-rule='rule service name="ssh" log prefix="SSH_ACCESS: " level="info" accept'
sudo firewall-cmd --reload
  • log prefix=”SSH_ACCESS: “: ログの先頭に目印をつける(検索しやすくするため)。
  • level=”info”: ログの重要度。
  • accept: ログを取った上で「許可」する。

ログはどこに出る?

AlmaLinux 9の場合、システムのメインログファイルに記録されます。
以下のコマンドでリアルタイムに確認できます。

sudo tail -f /var/log/messages | grep "SSH_ACCESS"

または

sudo dmesg | grep "SSH_ACCESS"

SSH接続を試みると、以下のようなログが流れるはずです。

kernel: SSH_ACCESS: IN=eth0 OUT= MAC=... SRC=192.168.1.10 DST=...

4. 【実践】総当たり攻撃を防ぐ(レートリミット)

これがリッチルールの真骨頂です。
「1分間に○回以上接続してきたらブロックする」という制限(Rate Limit)をかけます。

SSHに接続制限をかける

「SSH接続は許可するが、同一IPからは1分間に3回まで」というルールです。

sudo firewall-cmd --permanent --add-rich-rule='rule service name="ssh" limit value="3/m" accept'
sudo firewall-cmd --reload

value="3/m" は「1分間に3回」です。1/s(1秒に1回)や 10/h(1時間に10回)なども指定できます。
これにより、機械的なパスワード総当たり攻撃(ブルートフォースアタック)の大半を無効化できます。

コウ君

これすごい!
Fail2Banみたいな専用ツールを入れなくても、Firewalldだけで簡易的な防御ができるんですね。
個人サーバーならこれだけで十分かも。

5. リッチルールの削除方法

リッチルールは複雑な文字列なので、削除する時も「追加した時の文字列」をそのまま指定する必要があります。
少し面倒ですが、コピー&ペーストで対応しましょう。

削除の手順

まず、現在設定されているルールを一覧表示して、文字列をコピーします。

sudo firewall-cmd --list-rich-rules

次に、--add-rich-rule の部分を --remove-rich-rule に変えて実行します。

sudo firewall-cmd --permanent --remove-rich-rule='rule family="ipv4" source address="1.2.3.4" drop'
sudo firewall-cmd --reload

6. 優先順位のワナに注意

Firewalldにはルールの適用順序(優先順位)があります。
リッチルールを使い始めると、ここでハマることがあります。

Firewalldの処理順序

  1. Direct Rules(直接ルール):iptablesコマンド互換の最強ルール(今回は扱いません)。
  2. Rich Rules(リッチルール):今回学んだルール。ログ記録やDROPはここで処理される。
  3. Zones/Services(標準設定):--add-service などで設定した通常の許可。

【重要ポイント】
例えば、標準設定で「SSHを許可(accept)」していても、リッチルールで「このIPは拒否(drop)」と書けば、リッチルールが優先されてブロックされます。
逆に、リッチルールで「許可(accept)」すれば、標準設定になくても通信は通ります。

「標準設定」はあくまで「リッチルールで指定されなかったものの受け皿」だとイメージしてください。

まとめ:防御力を底上げする技術

第10回では、Firewalldの応用機能「リッチルール」を学びました。

  • リッチルールを使えば、標準機能ではできない「条件付き制御」が可能になる。
  • 特定の攻撃IPを drop でブロックできる(ブラックリスト)。
  • 重要サービスへの接続を log で記録できる。
  • limit を使えば、総当たり攻撃を速度制限で防げる。
  • リッチルールは標準のゾーン設定よりも優先順位が高い

これで、あなたのFirewalld運用能力は「上級者レベル」に達しました。
単にポートを開け閉めするだけでなく、攻撃の兆候を掴み、防ぐことができるエンジニアです。

次回(第11回)は、少し視点を変えてネットワークの応用設定「マスカレード(NAPT)とポートフォワーディング」について解説します。
Linuxサーバーを「ルーター」として使ったり、受けた通信を別のサーバーに転送したりする、インフラエンジニア憧れの技術です。お楽しみに!

▼攻撃テストも試せるVPS

レートリミットが実際に機能するかどうか、あえて自分で連打してテストするには、他人に迷惑をかけない自分専用のVPS環境が必須です。リッチルールの実験場として最適なAlmaLinux 9対応VPSはこちら。

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

コメント