セキュリティ

iptablesとは?Linuxのパケットフィルタとファイアウォール設定・nftablesへの移行を実装目線で解説

AIで守るAIを守る 2つのAIセキュリティ対策

iptablesとは、Linuxカーネルに組み込まれたNetfilterというパケット処理の仕組みを操作し、サーバーに出入りする通信を許可するか拒否するかをルールで決めるファイアウォール設定コマンドです。どのIPアドレスやポートからの通信を通し、どれを遮断するかを1行ずつのルールとして書き、Linuxサーバー自身を守る門番として長く使われてきました。この記事では、iptablesが実際には何を操作しているのかという定義から、テーブル・チェイン・ルールという3つの構造とパケットが評価される流れ、SSHやWebを通すための最小限のルールの組み方と再起動後もルールを残す永続化、接続追跡による戻り通信の扱い、そして後継のnftablesやfirewalld・ufwとの違いと、いまiptablesをどう使い分け・移行するかまでを、Linuxサーバーを構築・運用する実装者と発注者の双方が判断に使える形で整理します。

目次

まとめ|iptablesの正体とファイアウォール設定で押さえる要点

iptablesは、Linuxカーネル内でパケットを検査するNetfilterに対して、「この通信は通す・この通信は落とす」というルールを与えるコマンドです。ルールはテーブルとチェインという入れ物に整理されます。通信の許可・拒否を担うのがfilterテーブルで、その中にサーバーへ入る通信を見るINPUT、出て行く通信を見るOUTPUT、通り抜ける通信を見るFORWARDというチェインがあります。各チェインに上から順のルールを並べ、最初に一致したルールのターゲット(ACCEPTで許可、DROPで無言破棄、REJECTで拒否応答)で運命が決まる仕組みです。

実務でまず押さえたいのは、iptablesの設定は「基本を全部拒否にして、必要な通信だけ穴を開ける」順序で組むこと、そして接続追跡(conntrack)を使ってESTABLISHEDな戻り通信を許可し、SSHで自分が締め出されないよう最初にSSHの許可ルールを入れることです。もう一つ避けて通れないのが永続化で、iptablesのルールはメモリ上にあり再起動で消えるため、iptables-saveとiptables-restoreで保存・復元する必要があります。加えて、主要ディストリビューションの既定は後継のnftablesへ移行が進んでおり、新規構築ではnftablesやfirewalld・ufwといった上位ツールを選ぶかどうかも含めた設計判断が必要です。以下で定義・仕組み・設定・移行判断を順に解説します。

iptablesとは|Netfilterを操作してパケットを取捨するファイアウォール

最初にiptablesが何を操作しているのかを固めます。ここが曖昧だと、後半のnftablesとの違いや、firewalldをかぶせる構成の意味が捉えづらくなりがちです。iptablesは単体でパケットを止めているのではなく、カーネル内のパケット検査エンジンへ指示を書き込むコマンドとして動きます。

iptablesが操作するNetfilter:カーネル内でパケットを検査する実体

パケットを実際に通したり落としたりしているのは、Linuxカーネルに組み込まれたNetfilterという枠組みです。iptablesは、そのNetfilterに対して「どんな条件のパケットを、どう扱うか」というルールを登録・削除・一覧するためのユーザー空間コマンドにあたります。つまりiptablesを実行してルールを書くと、その内容がカーネル側の検査表に反映され、以降のパケットはカーネルがその表に照らして処理する流れです。この分業を押さえておくと、iptablesコマンドで設定した内容がなぜ即座に効き、なぜ再起動で消えるのか(メモリ上のカーネル設定だから)が一本の筋で理解できます。Netfilterは2.4系カーネル(2001年)で導入され、以来Linuxの標準的なパケット制御基盤として使われてきました。

iptablesが解決する課題:Linuxサーバーの通信を許可と拒否で制御

インターネットに公開したLinuxサーバーには、正規の利用者だけでなく、開いているポートを探る走査や攻撃の通信も届きます。iptablesは、必要なサービス(SSH・Web・メールなど)のポートだけを通し、それ以外の通信を入口で遮断することで、サーバーが待ち受ける面(アタックサーフェス)を絞る役割を担います。ソフトウェアを追加インストールせずLinux標準の機能でファイアウォールを構成でき、IPアドレス・ポート番号・プロトコル・通信の向きといった条件を細かく指定できるのが採用理由です。iptablesはこうしたファイアウォールをホスト自身の上で実現する手段であり、ファイアウォールという仕組み全体の種類や企業での選び方はファイアウォールとは?仕組み・種類とWAF・UTMとの違い、企業の選び方を解説で整理しています。iptablesはその中の、Linuxホスト上のパケットフィルタ型に位置づく実装です。

ファイアウォールとパケットフィルタリングとiptablesの関係

iptablesが行っているのは、パケット1つずつを条件に照らして通すか落とすかを決める「パケットフィルタリング」です。ヘッダに書かれた送信元・宛先のIPアドレスやポート番号を見て機械的に判定する方式で、通信の中身(アプリケーション層の内容)までは基本的に見ません。この静的なパケットフィルタリングの考え方はパケットフィルタリング型ファイアウォールの仕組みと静的(ステートレス)フィルタリングの基礎について解説で扱っており、iptablesはその方式をLinux上で実装したコマンドだと捉えると位置づけがつかめます。さらにiptablesは後述の接続追跡を持ち、単純な静的フィルタだけでなく、通信の状態を見て戻り通信を許すステートフルな制御まで扱える点が実装上の勘所です。

iptablesの仕組み|テーブル・チェイン・ターゲットとパケットの流れ

iptablesの設定は、テーブル・チェイン・ルールという入れ子の構造で整理されます。この骨組みさえ掴めば、どこに何を書くコマンドなのかで迷いません。ここでは3つの構造と、パケットが評価されて処理が決まる流れを確認します。

filter・nat・mangleテーブルと組込チェインの役割分担

ルールは目的別のテーブルに分かれて格納されます。通信の許可・拒否そのものを扱うのがfilterテーブルで、iptablesの設定で最も触るのはここです。宛先や送信元のアドレス・ポートを書き換えるアドレス変換はnatテーブル、パケットの属性を加工する特殊用途はmangleテーブルが担います。各テーブルの中に、パケットの通り道に応じた「チェイン」があります。filterテーブルの組込チェインは3つです。

チェイン 見る通信 主な用途
INPUT サーバーへ入る通信 SSH・Web受信の許可
OUTPUT サーバーから出る通信 外向き通信の制御
FORWARD 通り抜ける通信 ルーター・転送の制御

自分自身を守るサーバーの設定では、外から届く通信を見るINPUTチェインが主戦場になります。他所への転送を行うルーター的な構成でなければ、FORWARDは既定拒否のままで差し支えありません。natテーブルにはPREROUTINGやPOSTROUTINGといった別のチェインがあり、ポート転送や送信元アドレス変換で使いますが、単体サーバーの防御に絞るならまずfilterテーブルのINPUTを押さえれば足ります。

ルールとターゲット:ACCEPT・DROP・REJECTと既定ポリシー

各チェインには、条件と処理をひとまとめにしたルールを上から順に並べます。パケットはチェインの先頭からルールを照合し、最初に条件へ一致したルールの「ターゲット」で扱いが決まる仕組みです。主なターゲットは3つあります。ACCEPTはそのパケットを通し、DROPは応答を返さず黙って破棄し、REJECTは拒否を相手へ通知したうえで破棄する動作です。どのルールにも一致しなかったパケットは、そのチェインの既定ポリシー(デフォルト動作)に従います。実務の定石は、INPUTの既定ポリシーをDROPに倒して「原則すべて拒否」とし、必要な通信だけをACCEPTルールで明示的に通す組み方です。DROPとREJECTの選び分けは、外部からの走査に手がかりを与えたくない入口はDROP、社内向けで即座に不達を返したい箇所はREJECT、と使い分けると迷いません。

接続追跡(conntrack)でESTABLISHEDな戻り通信を許可する

iptablesを静的なフィルタとしてだけ使うと、行きの通信を許可しても帰りの通信を落としてしまい、通信が成立しない事故が起きます。これを解くのが接続追跡(conntrack)です。Netfilterは通信のセッション状態を覚えており、ルールの条件で状態を指定できます。「すでに確立した通信(ESTABLISHED)と、それに関連する通信(RELATED)は許可する」という1本のルールをINPUTチェインの先頭付近に置くと、こちらから開始した通信の戻りパケットが自動で通る仕組みです。この状態を見る制御を「ステートフル」と呼び、静的なパケットフィルタリングより実運用に耐えます。新規の接続(NEW)だけを個別のポート許可ルールで判定し、戻りはconntrackにまとめて任せる二段構えが、iptables設定の基本形です。

iptablesの基本設定|コマンド構文とSSH許可・ルール永続化の手順

骨組みを、動く設定に落とします。ここではコマンドの読み方、締め出しを避けるルールの順序、そして再起動で設定を失わない永続化までを、実装の勘所に絞って確認します。

iptablesコマンドの基本構文とルール確認・削除の指定方法

iptablesコマンドは、操作の種類とチェイン、条件、ターゲットを組み合わせて書きます。ルールを末尾に追加するのは-A、削除は-D、既定ポリシーの設定は-Pです。現在のルールを確認するには-Lを使い、番号付きで細かく見たいときはあわせて-nや行番号表示のオプションを添えます。条件の指定は、プロトコルを-p、宛先ポートを--dport、送信元アドレスを-sで書き、処理は-jでターゲットを与える形です。まずは-Lで今の状態を一覧し、どのチェインがどの既定ポリシーで、どんなルールが並んでいるかを把握してから編集に入ると、思わぬ通信断を避けられます。設定を試す段階では、変更前のルールを控えておき、いつでも元へ戻せる状態で作業するのが安全です。

SSH・HTTP・HTTPSを通す最小ルールとポート開放の組み方

公開サーバーで最初に組む最小構成は、順序が肝心です。既定ポリシーをDROPにする前に、必ず自分の管理経路であるSSH(通常はポート22)を許可しておかないと、設定した瞬間に自分が締め出されます。実務的な組み立ての順序は次のとおりです。

  1. まずESTABLISHED・RELATEDな戻り通信を許可するルールを先頭に置く
  2. ループバック(サーバー内部の通信)を許可する
  3. SSHの新規接続を許可する(管理経路の確保)
  4. 公開するHTTP・HTTPSなど必要なサービスのポートを許可する
  5. 最後にINPUTの既定ポリシーをDROPにして残りを拒否する

この順で組むと、必要な穴だけを開けた状態で残りを閉じられます。SSHのポートを既定の22から変える運用なら、その番号で許可ルールを入れます。動作確認は、別のセッションを開いたまま新しい接続が張れるかを試し、締め出しに気づいたら即座に戻せる体制で行うのが鉄則です。開放したポートが意図どおりかは、設定後に-Lで並びを再確認します。

iptables-save・restoreによるルールの永続化と再起動対策

iptablesで組んだルールはカーネルのメモリ上にあり、サーバーを再起動すると消えます。これを残すのが永続化です。現在のルールをテキストへ書き出すのがiptables-save、書き出した内容を読み込んで復元するのがiptables-restoreです。運用では、save で出力したルールファイルを所定の場所へ保存し、起動時に restore で読み込ませる仕組みを組みます。永続化の作法はディストリビューションによって違い、Debian系ではnetfilter-persistent、RHEL系ではiptables-servicesやfirewalld経由が代表的です。どの方式でも、save/restoreの往復でルールが同一に戻ることを確認しておくと、再起動後にファイアウォールが空の状態で公開される事故を防げます。永続化まで済ませて初めて、iptablesの設定は運用に載ります。

iptablesとnftables・firewalld・ufwの違いと移行・採用の判断

iptablesは唯一の選択肢ではなくなっています。後継のnftablesへの移行が進み、firewalldやufwといった上位ツールも普及しました。ここで違いを整理したうえで、いまiptablesをどう扱い、どんなときに何を選ぶかを条件付きで言い切ります。

iptablesとnftablesの違いと主要ディストリの移行状況

nftablesは、iptablesの後継としてカーネル3.13系(2014年)で導入された新しいパケット制御の枠組みです。iptablesがテーブルごとに別コマンドへ分かれていた構成を1つの体系にまとめ、ルールの記法や性能を見直しています。両者の関係を整理します。

観点 iptables nftables
登場時期 2.4系・2001年 3.13系・2014年
記法 コマンドごとに分割 一体化し簡潔
既定の傾向 互換レイヤで存続 新規構築の既定

主要ディストリビューションの既定はnftablesへ移っており、RHEL系は8系(2019年)以降、Debian系も10系(2019年)以降でnftablesが既定です。ただしiptablesコマンド自体は廃止されておらず、多くの環境ではnftablesへ変換する互換レイヤ(iptables-nft)を通して動きます。既存資産や解説記事の多くがiptables記法で書かれているため、当面はiptablesの知識が生きる一方、新規に大きく組むならnftablesを前提に設計するのが移行の実際です。自分の環境がどちらで動いているかは、iptablesコマンドの版情報や、nft側のルール一覧を確認して見極めます。

firewalld・ufwとの関係:iptablesを内部で扱う上位ツール

firewalldやufwは、iptablesやnftablesと並び立つ別物ではなく、それらを内部で操作して設定を扱いやすくする上位のツールです。firewalldはRHEL系の既定で、ゾーンという単位で信頼度の違うネットワークをまとめて扱え、設定変更を通信断なく反映できます。ufwはDebian・Ubuntu系で使われ、少ないコマンドで許可・拒否を書ける簡潔さが持ち味です。どちらも裏側ではカーネルのNetfilterを操作しており、iptablesで1行ずつ書く作業を抽象化してくれます。iptablesを直接書くのは細かな制御が要る場面に向き、日常的な運用や少人数の管理ではfirewalldやufwに寄せるほうが事故が減る、という住み分けです。

iptablesを直接使う場面と見送る場面・失敗パターンの判断

iptablesを直接書くことが第一候補になるのは、次の条件が重なるときです。既存のiptablesルール資産を保守する場合、firewalldやufwでは表現しきれない細かな条件(特定のパケット状態やレート制限など)を組む場合、あるいは学習や検証で仕組みそのものを押さえたい場合。逆に、新規に一から構築するのに単純な許可・拒否で足りるなら、ufwやfirewalldを選ぶほうが合理的で、iptablesを直書きする必要はありません。よくある失敗は3つあります。既定ポリシーをDROPにする前後を誤ってSSHを閉じ自分を締め出すこと、永続化を忘れて再起動でルールが消えること、そして戻り通信の許可(conntrack)を入れ忘れて通信が成立しないことです。これらはいずれも順序と確認で防げます。iptablesはあくまでホスト1台のパケット制御であり、複数サーバーにまたがる守りや、クラウド側のネットワーク境界での制御は、iptablesとは別のレイヤで設計する前提です。認証ログの失敗を見て攻撃元IPを動的にiptablesへ登録し自動遮断するFail2banとは?SSH総当たり攻撃を自動遮断する仕組みと設定・導入判断を実装目線で解説を組み合わせると、静的なルールに動的な締め出しを足せます。パケットを通す・落とすだけのiptablesに対し、通信の中身から侵入の兆候を検知するIDS・IPSとは?違い・仕組み・種類とファイアウォール/WAFとの使い分けを解説は役割が異なり、両者は重ねて使う関係です。本番Linuxサーバーのファイアウォール設計や、クラウドのネットワーク境界を含む構成に迷う場合は、セキュアなインフラ構築(AWS/GCP/Azure)の受託で、パケット制御の設計から相談できます。

iptablesのファイアウォール設定と運用に関するよくある質問

検索されることの多い疑問に、仕組みと運用の両面から簡潔に答えます。

iptablesとは何ですか?

Linuxカーネルに組み込まれたNetfilterというパケット処理の仕組みを操作し、サーバーに出入りする通信を許可するか拒否するかをルールで決めるファイアウォール設定コマンドです。IPアドレス・ポート番号・プロトコル・通信の向きを条件に、ACCEPTで通しDROPやREJECTで落とすルールを並べて制御します。ソフトを追加せずLinux標準の機能でホスト自身のファイアウォールを構成できるのが特徴です。

iptablesとnftablesはどちらを使うべきですか?

新規に一から構築するなら、主要ディストリの既定である後継のnftables(またはそれを扱うfirewalld・ufw)を前提にするのが実際的です。一方、既存のiptablesルールを保守する場合や、解説・資産の多いiptables記法で細かな制御を組む場合は、iptablesの知識が引き続き生きます。多くの環境ではiptablesコマンドが互換レイヤ経由でnftablesを操作するため、当面は両方の理解が役立ちます。

iptablesで設定したルールが再起動で消えるのはなぜですか?

iptablesのルールはカーネルのメモリ上に置かれるため、サーバーを再起動すると初期状態に戻るからです。残すには永続化が必要で、iptables-saveで現在のルールをファイルへ書き出し、起動時にiptables-restoreで読み込ませます。Debian系はnetfilter-persistent、RHEL系はiptables-servicesやfirewalld経由といった具合に、ディストリごとの永続化の作法に沿って設定します。

iptablesの設定で自分が締め出されないためには?

既定ポリシーをDROPにして全拒否へ倒す前に、必ず管理経路であるSSH(通常ポート22)の許可ルールと、ESTABLISHED・RELATEDな戻り通信の許可ルールを先に入れます。作業は別セッションを開いたまま行い、新しい接続が張れるか確認しながら進めます。締め出しに備え、変更前のルールを控えていつでも戻せる状態にしておくと安全です。

iptablesだけでLinuxサーバーのセキュリティは十分ですか?

十分ではありません。iptablesはホスト1台のパケットを通す・落とす制御に限られ、認証の総当たりを機械的に締め出すFail2banのような動的遮断、通信内容から侵入を検知するIDS・IPS、そしてSSHの鍵認証や不要ポートの停止といった対策と重ねて使うものです。複数サーバーにまたがる守りやクラウドのネットワーク境界での制御は、iptablesとは別のレイヤで設計します。多層防御の一枚として位置づけるのが適切です。

関連記事

資料請求

RELATED POSTS 関連記事