本文へスキップ
BecomeCoder

ネットワークコース · 第5章 ネットワークを守る · レッスン19

iptables -L ― ファイアウォールのルールを見る

ブラウザで完結

導入

「このサーバー、外からどのポートに入れる設定になっている?」を決めているのが、前レッスンの関所=ファイアウォールです。Linux で昔から使われてきたのが iptables。まずは今どんなルールが入っているかを 読む ところから始めます。設定を変える前に、現状を把握するのが鉄則です。

説明

iptables の操作には root 権限 が必要です。一般ユーザーのまま打つと、こう弾かれます(第5章の susudo の出番です)。

iptables -L

Permission denied (you must be root) と出たら、root に切り替えてからもう一度打ちます。

su -
iptables -L

今度はルールの一覧が出ます。filter テーブルの3つの チェイン(関所)が並びます。

  • INPUT … サーバーに 入ってくる 通信への関所
  • OUTPUT … サーバーから 出ていく 通信への関所
  • FORWARD … サーバーを 通り抜ける 通信への関所(ルーター用途)

各チェインの1行目 (policy ACCEPT) は、どのルールにも当てはまらなかったときの 既定の扱いです。INPUT の下には「22番(SSH)は通す・80番(HTTP)は通す・23番(telnet)は落とす」というルールが並んでいます。targetACCEPT(通す)と DROP(黙って捨てる)に注目してください。

入ってきたパケットは、INPUT チェインのルールを 上から順に 照合され、最初に当たったルールで運命が決まります。どれにも当たらなければ、最後に policy が適用されます。

flowchart TD
    P["入ってくるパケット"] --> R1{"22番 (SSH)?"}
    R1 -->|一致| A1["ACCEPT<br/>(通す)"]
    R1 -->|不一致| R2{"80番 (HTTP)?"}
    R2 -->|一致| A2["ACCEPT<br/>(通す)"]
    R2 -->|不一致| R3{"23番 (telnet)?"}
    R3 -->|一致| D1["DROP<br/>(捨てる)"]
    R3 -->|不一致| PL["policy ACCEPT<br/>(既定の扱い)"]

番号付きで見たいときは --line-numbers、名前解決せず数字で見たいときは -n を足します(pingss と同じ感覚です)。

iptables -L INPUT --line-numbers
iptables -L -n

iptables は歴史ある道具ですが、いまのディストリビューションでは後継の nftablesnft コマンド)や、その上位の firewalldufw が主流になりつつあります。ただし現場にはまだ iptables の記法があふれているので、読めることがまず大事です(netstatss の関係に似ています)。

やってみよう

まず iptables -L をそのまま打って、root でないと弾かれることを体感しましょう。su - で root に切り替えてから iptables -L を打ち、INPUT チェインに 22・80・23 のルールが並ぶことを確認してください。iptables -L INPUT --line-numbers で各ルールに番号が振られること、iptables -L -nanywhere0.0.0.0/0 と数字表記になることも見てみましょう。

演習

root に切り替えたうえで、ファイアウォールの全ルールを一覧表示してください。

ヒント1を見る

先に su - で root になります。一覧は list の頭文字 -L です。

ヒント2を見る

su - のあと iptables -L

実際に動かしてみよう

本文のサンプルや演習のコードは、コードブロック右上の「コピー」ボタンでコピーして、下のエディタに貼り付ければそのまま実行できます。

Linux シェル(シミュレート)

ブラウザ内でコマンドを試せる仮想シェルを読み込みます(本物のLinuxカーネルではなく学習用の再現です)。
スクロールして表示された時点でも自動で読み込まれます。