Instiq
第6章 · システムのセキュリティ·v1.0.0·更新 2026/7/7·読了目安 約12分

変更要約: 初版(主題2.12・副主題2.12.1〜2.12.4に対応)

6.1iptables/firewalldによるパケットフィルタリング

この節の要点

iptablesip6tables によるパケットフィルタリングの仕組みと、より抽象化されたfirewalldfirewall-cmd)・ufw を学びます。/proc/sys/net/ipv4//proc/sys/net/ipv6/ によるカーネルパラメータ、ルーティングテーブルポートリダイレクト/etc/services、設定の永続化(iptables-saveiptables-restore)を押さえます。

サーバーを外部に晒す以上、「どの通信を通し、どれを遮断するか」を明確にするのがファイアウォールの役目です。Linux ではiptablesがカーネルのパケットフィルタ機能を直接操作する伝統的な手段で、firewalldufwはそれをゾーン・サービス単位で扱いやすくした上位レイヤーです。

6.1.1iptables/ip6tablesの基本

  • iptables=IPv4 パケットフィルタ設定コマンド。ip6tables=IPv6 版で別コマンド・別ルールセット(IPv4 のルールは IPv6 通信に効かない)。
  • カーネルのパケット転送や応答挙動は/proc/sys/net/ipv4//proc/sys/net/ipv6/以下の仮想ファイルで制御(例 net.ipv4.ip_forward を1にするとルータとして転送)。
  • パケットの行き先判断はルーティングテーブルが決め、ファイアウォールはその前後で許可/拒否を判定する。ポートリダイレクト(宛先ポート変換)は NAT テーブルの PREROUTING で行い、待受ポート番号と名前の対応は/etc/servicesで確認できる。

6.1.2firewalld・ufuw・永続化

  • firewalldfirewall-cmd で操作する動的ファイアウォール管理サービス。ネットワークインターフェースをゾーン(public/internal/trusted 等)に割り当て、ゾーンごとにサービス・ポートの許可を設定する。
  • ufw(Uncomplicated Firewall)=iptables をよりシンプルなコマンド体系で扱うフロントエンド。ufw allow 22/tcp のように直感的にルールを追加できる。
  • iptables のルールはメモリ上のみで再起動すると消えるため、iptables-saveでファイルへ書き出し、iptables-restoreで読み戻して永続化する(ディストリのサービス経由で起動時に自動適用させるのが定石)。
試験ポイント

「IPv6 通信を守るには ip6tables が別途必要(iptables だけでは効かない)」「firewalld はゾーン単位、ufw はシンプルなコマンド体系」「ルールの永続化は iptables-save/iptables-restore」 が最頻出です。ポート番号とサービス名の対応先=/etc/services、転送の有効化=/proc/sys/net/ipv4/ip_forward、という組み合わせも問われます。

運用でよくある要件「社内向けWebサーバーへの外部からのSSHは遮断しつつ、社内セグメントからは許可したい」を考えると、各ツールの立ち位置が見えてきます。素のiptablesなら filter テーブルの INPUT チェーンに、送信元ネットワークで絞った ACCEPT ルールを先に置き、末尾のデフォルト DROP/REJECT で残りを遮断します。同じことをfirewalldでやるなら、社内セグメントのインターフェースを internal ゾーンへ、外部向けインターフェースを public ゾーンへ割り当て、internal ゾーンだけ ssh サービスを許可します(firewall-cmd --zone=internal --add-service=ssh --permanent の後 firewall-cmd --reload)。ポートフォワード(例:外部の8080番を内部のWebサーバーの80番へ)は NAT テーブルの PREROUTING チェーンで宛先変換(DNAT)を行う操作で、firewalld でも --add-forward-port として同等の機能があります。IPv6 も同時に運用しているなら、iptables のルールは ip6tables には引き継がれないため、ICMPv6 の近隣探索などIPv6特有のトラフィックも含めて ip6tables 側に個別にルールを書く必要がある点は見落としがちです。設定を検証したら、再起動後も同じ状態を保てるようにiptables-save > /etc/sysconfig/iptablesのようにファイル化し、起動時にiptables-restoreで読み込む仕組みを組み込みます。

ツール操作単位永続化
iptables/ip6tablesチェーン・ルール(低レベル)iptables-save/iptables-restore
firewalldゾーン・サービス(firewall-cmd)--permanent+--reload
ufwシンプルなallow/denyルールデフォルトで永続化
注意

ひっかけ: 「iptables で IPv4 のフィルタルールを設定すれば IPv6 通信も遮断される」は誤りです。IPv6 には別コマンド・別ルールセットの ip6tables が必要です。また「firewalld の設定は firewall-cmd を実行した瞬間から再起動後も有効」も誤り=--permanent を付けずに追加した設定は実行中の設定のみに反映され、--permanent を付けたルールも --reload するか再起動しないと即時反映されません。

iptables/ip6tablesのチェーンとfirewalldのゾーン、ポートリダイレクトの流れを示す図。
IPv4とIPv6は別ルールセット

6.1.3この節のまとめ

  • iptables=IPv4/ip6tables=IPv6(別ルールセット)。永続化はiptables-save/iptables-restore
  • firewalld=ゾーン単位(firewall-cmd・--permanent+--reload)/ufw=簡易コマンド。ポート対応は/etc/services

進捗の記録にはログインが必要です。

理解度チェック

(軽い確認用)

Q1. サーバーで IPv4 と IPv6 の両方を運用しており、両方のプロトコルで同じ遮断ポリシーを適用したい。適切な対応は?

Q2. firewalld で internal ゾーンにのみ SSH サービスを恒久的に許可し、即座に反映させたい。適切な手順は?

Q3. 再起動後も iptables のフィルタルールを維持したい。適切な運用は?

理解度を確認第6章「システムのセキュリティ」の問題を解く

学習の記録を残しませんか

参考書はすべて無料で読めます。無料登録すると、問題集での演習・既読と進捗の記録・間違えた問題の復習・ハイライトが使えます。