0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

iptables / nftables / firewalld

0
Last updated at Posted at 2026-05-01

iptables / nftables / firewalld の概要

Linux で通信制御をするときは、大きく分けると次の3層で考えると分かりやすいです。

アプリ・管理ツール層
  └─ firewalld

パケットフィルタ設定ツール層
  ├─ iptables
  └─ nftables

Linuxカーネル層
  └─ netfilter

一番下にある本体は netfilter です。
iptables や nftables は、その netfilter に対して「どの通信を許可・拒否するか」を設定するための仕組みです。

firewalld は、iptables や nftables を直接書かなくても firewall を管理しやすくするための上位ツールです。


1. netfilterとは

netfilter は、Linuxカーネルに組み込まれているパケット処理の仕組みです。

Linuxに入ってくる通信、Linuxから出ていく通信、Linuxを経由する通信に対して、次のような処理ができます。

  • 許可する
  • 拒否する
  • 破棄する
  • NATする
  • ポート転送する
  • ログを出す
  • パケットの状態を見て制御する

つまり、実際にパケットを処理している本体は netfilter です。

iptables や nftables は、netfilter にルールを登録するための操作体系です。


2. iptablesとは

iptables は、昔から使われてきた Linux のファイアウォール設定ツールです。

ざっくり言うと、iptables は以下のようなルールを書くための仕組みです。

送信元IPがこの範囲なら許可
宛先ポートが22番なら許可
外部からのHTTP通信は許可
それ以外は拒否

iptables では、通信の種類ごとに「テーブル」と「チェイン」という単位でルールを管理します。

代表的には以下のようなものがあります。

要素 役割
filter table 通信を許可・拒否する
nat table NATやポート転送をする
mangle table パケットの特殊な変更をする
INPUT chain 自分のサーバ宛ての通信
OUTPUT chain 自分のサーバから出る通信
FORWARD chain 自分のサーバを通過する通信

iptables は長く使われてきたため、古い資料や既存環境では今でもよく見ます。

ただし、現在は後継として nftables が使われる流れになっています。


3. nftablesとは

nftables は、iptables の後継として作られた新しいパケットフィルタリングの仕組みです。

iptables よりも設計が整理されていて、IPv4、IPv6、ARP、bridge などをより統一的に扱えます。

iptables では、IPv4用の iptables、IPv6用の ip6tables、ARP用の arptables、bridge用の ebtables が分かれていました。

一方、nftables ではそれらをより一貫した形で扱えます。

iptables系
  ├─ iptables    IPv4
  ├─ ip6tables   IPv6
  ├─ arptables   ARP
  └─ ebtables    bridge

nftables
  └─ nft でまとめて扱える

また、nftables はルールセットをまとめて扱いやすく、パフォーマンスや管理性の面でも改善されています。


4. firewalldとは

firewalld は、Linux のファイアウォールを管理するための上位サービスです。

iptables や nftables のルールを直接書くのではなく、もっと人間が扱いやすい単位で設定できます。

代表的なのが以下です。

  • zone
  • service
  • port
  • rich rule
  • masquerade
  • port forwarding

例えば、firewalld では次のような考え方で管理します。

public ゾーンでは SSH と HTTP だけ許可
internal ゾーンでは SMB や DNS も許可
trusted ゾーンでは基本的に全部許可

つまり firewalld は、低レベルなパケットフィルタリングルールを直接書く代わりに、
「このネットワークインターフェースは public 扱い」
「このサービスは許可」
「このポートは閉じる」
というように、管理しやすい抽象化を提供します。

内部的には、firewalld はバックエンドとして iptables または nftables を使います。
最近の多くのLinuxディストリビューションでは nftables バックエンドが使われることが多いです。


それぞれの関係

関係を図にすると、こうです。

ユーザー
  │
  ├─ iptables を直接操作
  │      │
  │      └─ netfilter にルールを設定
  │
  ├─ nftables を直接操作
  │      │
  │      └─ netfilter にルールを設定
  │
  └─ firewalld を操作
         │
         ├─ iptables backend
         │      └─ netfilter にルールを設定
         │
         └─ nftables backend
                └─ netfilter にルールを設定

まとめると、こうです。

名前 役割
netfilter Linuxカーネル内のパケット処理機能
iptables netfilterを操作する旧来の設定ツール
nftables iptablesの後継となる新しい設定ツール
firewalld iptables/nftablesを扱いやすくする管理サービス

何ができるのか

1. 自分のサーバ宛ての通信を制御できる

一番よく使うのはこれです。

例えば、外部から自分のLinuxサーバに来る通信を制御します。

SSHは許可
HTTPは許可
HTTPSは許可
MySQLは外部から拒否
それ以外は拒否

これは主に INPUT に相当する制御です。

Webサーバ、メールサーバ、DBサーバなどでよく使います。


2. 自分のサーバから外へ出る通信を制御できる

iptables / nftables では、サーバから外部へ出る通信も制御できます。

例えば、

外部へのHTTP/HTTPS通信だけ許可
外部SMTP送信を禁止
特定のIPへの通信を拒否
特定ユーザーの通信を制限

などです。

これは主に OUTPUT に相当します。

ただし、firewalld では一般的な使い方としては INPUT 側、つまり「外から自分への通信制御」が中心です。
OUTPUT 制御も不可能ではありませんが、iptables / nftables を直接使う場合ほど直感的ではありません。


3. サーバを通過する通信を制御できる

Linuxサーバがルーターやゲートウェイとして動く場合、そのサーバを通過する通信も制御できます。

例えば、

社内LANからインターネットへの通信は許可
特定セグメントから別セグメントへの通信を拒否
VPNクライアントから社内ネットワークへの通信を許可
コンテナネットワーク間の通信を制御

これは主に FORWARD に相当します。

Docker、Podman、Kubernetes、VPN、ルーター用途のLinuxでは重要になります。


4. NATができる

NAT は、通信元や通信先のIPアドレスを変換する仕組みです。

代表的なのは、家庭用ルーターと同じような使い方です。

内部ネットワークの端末
  ↓
Linuxゲートウェイで送信元IPを変換
  ↓
インターネットへ出る

このような処理を IPマスカレード と呼ぶことがあります。

Linuxをルーターにしたい場合や、コンテナ・VM・VPN環境ではよく使います。


5. ポート転送ができる

外部から来た通信を、別のポートや別のサーバに転送できます。

例えば、

外部からLinuxサーバの8080番に来た通信を、
内部サーバの80番へ転送する

または、

外部からグローバルIPの443番に来た通信を、
内部のWebサーバへ転送する

といったことができます。

これは自宅サーバ、検証環境、踏み台構成、NAT配下のサーバ公開などで使われます。


6. 通信状態を見て制御できる

iptables / nftables / firewalld では、通信の状態を見て判断できます。

例えば、

新規接続は制限する
確立済み通信の戻りパケットは許可する
関連通信は許可する
不正な状態のパケットは破棄する

これは ステートフルファイアウォール と呼ばれます。

単純に「ポート番号だけを見る」のではなく、通信の流れを見て判断できます。

例えば、Webサーバからの戻り通信をいちいち個別に許可しなくても、
「確立済み通信の戻りは許可」という形で自然に制御できます。


7. IPアドレスやネットワーク単位で制御できる

特定のIPアドレスやネットワークだけを許可・拒否できます。

例えば、

社内IPからのSSHだけ許可
特定の攻撃元IPを拒否
特定の国・地域のIPレンジを拒否
管理用ネットワークからだけアクセス許可

という制御ができます。

サーバ管理ではかなりよく使います。


8. サービス単位で制御できる

firewalld では、ポート番号を直接意識せずに「サービス名」で許可できます。

例えば、

ssh
http
https
dns
smtp
samba

のような単位です。

これにより、
「HTTPを許可する」
「SSHを許可する」
という人間に分かりやすい設定ができます。

裏側では、それぞれのサービスに対応するポート番号が許可されます。


9. ゾーン単位で制御できる

firewalld の大きな特徴が zone です。

zone は、ネットワークの信頼度ごとにルールを分ける考え方です。

例えば、

zone イメージ
trusted すべて信頼する
home 自宅ネットワーク
work 職場ネットワーク
public 公衆ネットワーク
dmz 外部公開用ネットワーク
drop 基本すべて破棄
block 基本すべて拒否

たとえば同じサーバでも、

社内LAN側NICは internal
インターネット側NICは public

のように分けられます。

これにより、インターフェースごとに異なる通信制御ができます。


firewalldはINPUTしか制御できないのか

厳密には、firewalldはINPUTだけしか制御できないわけではありません。

ただし、一般的なサーバ用途では firewalld は主に、

外部から自分のサーバ宛てに来る通信

を制御する用途で使われます。

つまり、実務上は INPUT 制御として使う場面が多いです。

一方で firewalld でも、以下のようなことはできます。

  • ゾーン間の転送制御
  • IPマスカレード
  • ポートフォワード
  • rich rule による細かい制御
  • policy によるゾーン間通信制御
  • direct rule による低レベル制御

なので、

firewalld = INPUT専用

ではありません。

ただし、iptables / nftables を直接使う場合に比べると、firewalld は
「サーバに入ってくる通信をサービス単位・ゾーン単位で管理するツール」
という色が強いです。

OUTPUT や複雑なFORWARDを細かく制御したい場合は、nftablesを直接使った方が分かりやすい場面もあります。


使い分け

基本は firewalld でよい

RHEL系、AlmaLinux、Rocky Linux、CentOS Stream などでは、通常は firewalld を使うことが多いです。

特に次のような用途なら firewalld で十分です。

SSHだけ開けたい
HTTP/HTTPSを開けたい
特定ポートを許可したい
特定IPだけ許可したい
ゾーンで管理したい
簡単なポート転送をしたい

一般的なサーバ管理では firewalld が扱いやすいです。


細かく制御したいなら nftables

より複雑な制御をしたい場合は nftables が向いています。

例えば、

複雑なNAT
細かいFORWARD制御
大量のIPリスト制御
独自チェイン設計
コンテナ・ルーター・VPN絡みの制御
高度なパケットフィルタ

のような場合です。

iptablesよりもnftablesの方が現代的です。


既存環境では iptables もまだ見る

新規構築なら nftables や firewalld を考えることが多いですが、既存環境では iptables もまだよく出てきます。

特に古いサーバ、古い手順書、古いミドルウェア、既存の運用スクリプトでは iptables が残っていることがあります。

そのため、iptables も読めるようにしておくと現場では役に立ちます。


まとめ

項目 説明
netfilter Linuxカーネル内のパケット処理機能
iptables netfilterを操作する旧来の仕組み
nftables iptablesの後継。より新しく統一的
firewalld iptables/nftablesを使いやすくする管理サービス

実務的には、こう考えると分かりやすいです。

Linuxの通信制御の本体
  → netfilter

昔からある操作方法
  → iptables

今後の標準的な操作方法
  → nftables

RHEL系で普段使う管理サービス
  → firewalld

そして、できることは大きく以下です。

自分宛て通信の許可・拒否
外向き通信の制御
通過通信の制御
NAT
マスカレード
ポート転送
IPアドレス単位の制御
ポート単位の制御
サービス単位の制御
ゾーン単位の制御
通信状態を見た制御
ログ出力

一言でいうと、

iptables / nftables は低レベルなパケットフィルタ設定の仕組み、firewalld はそれを管理しやすくした上位ツールです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?