4.

iptables/nftablesとは|テーブル・チェーン・ルール例・永続化をLinux視点で解説

編集
この記事の要点
  • iptables/nftables は Linux カーネルの netfilter を操作するパケットフィルタの設定ツールである
  • iptables はテーブル(filter/nat 等)とチェーン(INPUT/FORWARD/OUTPUT)でルールを構成する
  • nftables は iptables の後継で、構文が統一され IPv4/IPv6 を一括管理できる
  • INPUT は自ホスト宛、OUTPUT は自ホスト発、FORWARD は通過(ルーター)の通信を扱う
  • ルールは再起動で消えるため、netfilter-persistent 等で永続化する必要がある

概要

iptables と nftables は、Linux カーネルに組み込まれたパケットフィルタ機構 netfilter を設定するためのコマンドラインツールです。前章のファイアウォールを Linux 上で実際に構築する道具がこれにあたります。iptables は長年の定番でしたが、現在は後継の nftables への移行が進んでおり、多くのディストリビューションで標準になっています。ufw や firewalld といった使いやすいフロントエンドも、内部ではこれらを呼び出しています。

ここでは仕組みを理解するため、生の iptables/nftables を扱います。内部構造を知っておくと、フロントエンドが意図通り動かないときの調査や、細かい制御が必要な場面で役立ちます。

仕組み

iptables は テーブルチェーンという 2 階層で構成されます。主なテーブルは、フィルタリングを行う filter、アドレス変換を行う nat、パケットの改変を行う mangle です。各テーブルの中に、処理タイミングごとのチェーンがあります。filter テーブルの代表的なチェーンは次の 3 つです。

  • INPUT:このホスト「宛て」のパケット(外から自分へ)
  • OUTPUT:このホスト「発」のパケット(自分から外へ)
  • FORWARD:このホストを「通過」するパケット(ルーターやゲートウェイとして転送する場合)

パケットは該当するチェーンのルールを上から順に評価し、最初に一致したルールのターゲット(ACCEPT=許可、DROP=破棄、REJECT=拒否応答を返す)が適用されます。どのルールにも一致しなければ、チェーンのポリシー(既定動作)が適用されます。セキュリティの基本は「ポリシーを DROP にし、許可するものだけ明示する」ことです。

nftables は iptables・ip6tables・arptables・ebtables という乱立したツール群を 1 つに統合した後継です。構文が一貫し、IPv4 と IPv6 を 1 つのルールセットで扱え、ルール評価も効率化されました。新規構築では nftables を選ぶのが推奨です。

設定・実用例

iptables で「SSH・HTTP・HTTPS と、確立済み接続の応答だけを許可し、他は破棄」する基本構成です。--dport 22 のようなオプションはそのまま記述します。

# 既存ルールをクリア
iptables -F

# ループバックと確立済み接続を許可
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# SSH(22)・HTTP(80)・HTTPS(443) を許可
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

# それ以外の受信はすべて破棄(デフォルト拒否)
iptables -P INPUT DROP

nftables で同等の構成を書くと次のようになります。1 ファイルにまとめて宣言的に書けるのが特徴です。

nft add table inet filter
nft add chain inet filter input { type filter hook input priority 0 \; policy drop \; }
nft add rule inet filter input ct state established,related accept
nft add rule inet filter input iif lo accept
nft add rule inet filter input tcp dport { 22, 80, 443 } accept

ルールはメモリ上にしかなく、再起動で消えます。永続化はディストリビューションのツールで行います。

# Debian/Ubuntu 系(iptables の保存)
apt install iptables-persistent
netfilter-persistent save

# nftables の永続化
nft list ruleset > /etc/nftables.conf
systemctl enable --now nftables

主な用途

  • サーバーのホスト型ファイアウォール:不要ポートを閉じる
  • NAT/ポートフォワーディング:内部ホストへの転送やマスカレード
  • レート制限:同一 IP からの接続数を絞り DoS を緩和
  • コンテナ基盤:Docker や Kubernetes が内部で大量に利用

比較テーブル

項目iptablesnftables
位置づけ従来の定番後継・推奨
IPv4/IPv6iptables / ip6tables に分離inet で一括管理
構文コマンド逐次・冗長宣言的・統一的
集合(set)ipset で別途ネイティブ対応
性能ルール増で線形に低下しやすいmap/set で効率的

注意点

  • SSH ルールを書く前にポリシーを DROP にすると締め出される。許可ルールを先に入れる
  • リモート作業時は「数分後に全ルールをリセットする予約コマンド」を仕込んでおくと安全
  • iptables と nftables を同時併用すると挙動が混乱する。どちらかに統一する
  • 永続化を忘れると再起動でルールが消え、無防備になる

関連リンク

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. TLS/SSLの仕組み
  2. 証明書と認証局(CA)
  3. ファイアウォール
  4. iptables/nftables
  5. VPN
  6. IPsec
  7. WireGuard
  8. ゼロトラストネットワーク

最近更新/作成されたページ