RHEL8/9における firewalld と nftables の関係を徹底解説
RHEL(Red Hat Enterprise Linux)を触り始めると、必ず出会うのが「ファイアウォール設定」です。
しかし、RHEL8 以降の環境では
- iptables → 非推奨
- nftables → 新しい標準エンジン
- firewalld → 管理ツールとして利用推奨
と立場が入り乱れ、よくこうなります。
「え?iptables はもう使っちゃダメなの?
firewalld と nftables って結局どっちを使えばいいの??」
…はい、混乱しますよね。
この記事では、初心者が理解しやすく、管理者が現場で迷わないように
「firewalld」と「nftables」の関係を 図・例・比喩を交えて わかりやすく解説します。
ざっくり関係性のたとえ話
- nftables = 自動車の「エンジン」
- firewalld = 運転者が使う「ハンドル・アクセル・ブレーキ」
車を動かすのはエンジン(nftables)ですが、
私たちは直接エンジンをいじらず、ハンドルやアクセルを操作します。
それが firewalld です。
つまり、
- 普通の人は firewalld を使う(UIで楽に操作)
- エンジニア気質の人は nftables を直接いじる(細かくチューニング可能)
という住み分けになります。
firewalld とは?
定義
RHEL8/9 で推奨されている ファイアウォール管理ツール です。
内部では nftables を利用しますが、ユーザーは firewall-cmd
コマンド を使うだけで操作可能。
特徴まとめ
-
ゾーン(Zone)
ネットワークインターフェースや IP を「家庭用Wi-Fi」「社内LAN」「外部ネットワーク」みたいに分類できる。 -
サービス単位で許可
「http を開ける」「ssh を開ける」といった直感的な設定が可能。 -
即時反映 or 永続化
--permanent
を付けるかどうかで、設定が再起動後に残るかが変わる。 -
iptables 互換モードあり
古いシステムからの移行もしやすい。
コマンド例(覚えると便利なやつ)
# HTTPサービスを許可(永続化なし)
firewall-cmd --add-service=http
# HTTPサービスを許可(永続化あり)
firewall-cmd --permanent --add-service=http
# 設定を反映
firewall-cmd --reload
# 現在の設定を確認
firewall-cmd --list-all
💡 ポイント:
「ゾーン」という概念を理解するとグッと使いやすくなります。
例えば「社内LANではssh許可、外部WANではssh禁止」といった細かい管理が可能です。
nftables とは?
定義
iptables の後継として登場した、新世代のパケットフィルタリングフレームワーク。
Linux カーネル 3.13 以降に搭載され、RHEL8 では標準のファイアウォールエンジンです。
特徴まとめ
- シンプル:ルール記述がわかりやすい
- 統一性:IPv4 と IPv6 をまとめて扱える
- パフォーマンス:ルールをまとめてコンパイルして効率的
- 柔軟性:スクリプト記法で複雑な条件にも対応
コマンド例(ちょっとハードル高め)
# ルールを表示
nft list ruleset
# HTTP (80番ポート) を許可
nft add rule inet filter input tcp dport 80 accept
# SSH (22番ポート) を許可
nft add rule inet filter input tcp dport 22 accept
# 現在のルールを保存
nft list ruleset > /etc/nftables.conf
💡 ポイント:
nftables を直接触るのは 職人向け。
ただし「firewalld では表現できないルールを作りたい」ときには必須になります。
firewalld と nftables の関係図
ユーザー操作(人間)
↓
+------------------+
| firewalld | ← 管理ツール(UI / ラッパー)
| (firewall-cmd) |
+------------------+
↓
+------------------+
| nftables | ← 実エンジン(ルール適用)
| (nft コマンド) |
+------------------+
↓
+------------------+
| Linux Kernel PF | ← カーネルでのパケット制御
+------------------+
これで「firewalld は窓口、nftables は実行役」という構造が理解しやすくなるはずです。
どちらを使うべき?(実運用での指針)
利用シーン | firewalld を使うべきケース | nftables を使うべきケース |
---|---|---|
日常運用 | ssh/http などの基本ポート開放 インターフェースごとのゾーン管理 サービス単位の制御 |
ルールを細かく調整したい firewalld では書けない複雑条件 |
高度要件 | ― | IPv4/IPv6 混在最適化 カスタムチェーン設計 パケットの詳細なマッチ条件 |
管理者スキル | 初学者でも扱いやすい | ネットワークに詳しい上級者向け |
パフォーマンス | 通常業務には十分 | 超高負荷環境での最適化 |
💡 基本スタンス:
- まずは firewalld を使う
- 困ったら nftables 直操作
まとめ
- RHEL8/9 では iptables は過去のもの
- nftables がエンジン、firewalld が運転席
- 日常業務は firewalld が最適(直感的・簡単・安全)
- 特殊要件や細かいチューニングが必要な場合のみ nftables を利用
- 現場での実践的な考え方は 「まず firewalld、それで不足なら nftables」
おまけ:初心者がやりがちな失敗集
-
firewall-cmd --add-service=http
だけで満足して再起動したら消えた
→--permanent
を忘れない! -
firewalld と nftables を両方いじってルールがごちゃごちゃに
→ どちらかに統一する。基本は firewalld で統一。 -
iptables コマンドを使ってルールが効かない
→ RHEL8/9 では iptables は互換レイヤー。基本使わない方がよい。