なぜ素のiptablesではなくfirewalldが推奨されるのか?
旧世代のLinuxサーバー管理で「冷や汗」をかいたことがあるなら、iptablesという名前に苦い思い出があるはずです。iptablesの管理は、城壁を作るために一つ一つレンガを積み上げるような作業です。コマンドを一行打ち間違えるだけで、即座に自分自身をサーバーから締め出してしまうリスクがありました。
Fedoraにおいて、firewalldはインテリジェントな管理レイヤー(フロントエンド)として機能します。これはiptablesやnftablesを完全に置き換えるものではなく、それらとの対話を容易にするものです。最大のメリットは、既存の接続を遮断することなくルールを更新できる点です。これは、Webサービスやデータベースを稼働し続けているシステムにおいて非常に重要です。
30秒で完了するインストールと有効化
Fedora Serverには通常firewalldがプリインストールされていますが、Minimalインストール(最小構成)では欠けている場合があります。以下のコマンドで素早くインストールできます:
sudo dnf install firewalld -y
sudo systemctl enable --now firewalld
準備が整ったか確認するために、ステータスをチェックしましょう:
sudo firewall-cmd --state
もしrunningと表示されれば、サーバーの防護壁の設定を開始する準備は完了です。
Zoneによる管理:セキュリティのセグメント化という考え方
すべてをデフォルトのpublicゾーンに放置しないでください。これは初心者の8割が犯すミスです。Zoneを銀行のセキュリティレベルのように考えてみましょう:ロビーには誰でも入れますが、金庫室はそうはいきません。
実際には、私は次のように分類しています:
- public: Webユーザー向けにポート80/443のみを解放。
- internal: Webサーバーとデータベースサーバー間の通信用。
- drop: 未知のパケットをすべて破棄する「ブラックホール」。自動ポートスキャンツール対策に非常に有効。
ネットワークインターフェース(例:eth0)をより安全なゾーンに移動するには:
sudo firewall-cmd --zone=internal --change-interface=eth0 --permanent
sudo firewall-cmd --reload
Serviceの使用:手動設定からの脱却
8080番や9000番のポートがどのサービスのものかをいちいち覚えるのは時間の無駄です。Firewalldではサービス名を直接指定できるため、コマンドが明快になり管理が容易になります。
例えば、HTTPSポートを恒久的に開放するには:
sudo firewall-cmd --zone=public --add-service=https --permanent
sudo firewall-cmd --reload
Tips: 一連の一時的なルールを構成して動作が安定していることを確認したら、sudo firewall-cmd --runtime-to-permanentコマンドを使用することで、--permanentフラグを付けて一行ずつ打ち直すことなく、すべての設定を保存できます。
Rich Rules:複雑なシナリオへの解決策
基本的なルールでは対応しきれない場合、Rich Rulesの出番です。これは本番環境における複雑な要件を処理するための最も強力なツールです。
1. 特定のIPによるSSHアクセスの制限
ブルートフォース攻撃を阻止するために、オフィスの固定IP(例:1.2.3.4)からのみポート22へのアクセスを許可します:
sudo firewall-cmd --permanent --add-rich-rule='
rule family="ipv4"
source address="1.2.3.4"
port protocol="tcp" port="22" accept'
2. 攻撃IPを即座にブロック
システムログに203.0.113.5というIPが執嫉にスパムリクエストを送信しているのを見つけたら、応答(reject)を返さずに「お引き取り」願うために以下のコマンドを使用します:
sudo firewall-cmd --permanent --add-rich-rule='
rule family="ipv4"
source address="203.0.113.5" reject'
3. レート制限によるスパム対策
サービスへの新規接続数を制限できます。例えば、リソースの過負荷を避けるために、1分あたりのSSH接続を最大3回までに制限します:
sudo firewall-cmd --permanent --add-rich-rule='
rule service name="ssh"
limit value="3/m" accept'
リモート設定における「血の教訓」
設定後は、必ずsudo firewall-cmd --list-allで再確認してください。しかし、最大の懸念はネットワーク経由でSSHを設定している最中に、自分自身をサーバーからロックアウトしてしまうことです。
「危険な」変更を行う前に、このタイマーコマンドを実行しておきましょう:
sleep 300 && sudo systemctl stop firewalld
仕組みは非常にシンプルです。もし接続が切れてしまったら、5分待つだけです。Firewalldが自動的に停止し、再度ログインして修正できるようになります。すべてが正常であれば、Ctrl+Cを押してsleepコマンドをキャンセルしてください。
まとめ
ZoneとRich Rulesを正しく理解すれば、Fedoraでfirewalldをマスターするのは難しくありません。セキュリティのセグメント化と詳細な制御を組み合わせることで、一般的な攻撃に対してサーバーを強固に守ることができます。まずは最もシンプルなルールから始め、設定ファイルを常に整理された状態に保ちましょう。

