本文へスキップ
BecomeCoder

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

iptables -A / -D ― ポートを閉じる・開ける

ブラウザで完結

導入

ルールが読めたら、次は 足す・消す です。「このポートは外から触らせたくない」——たとえばデータベースの 3306 番(MySQL)を外部から遮断する、といった設定を iptables で組み立てます。サーバーを守る、いちばん実践的な操作です。

説明

ルールを追加するのは -A(append=末尾に足す)です。「どのチェインに・どんな条件で・どうする」を並べて書きます(root で実行します)。

su -
iptables -A INPUT -p tcp --dport 3306 -j DROP
iptables -L INPUT --line-numbers

一覧の末尾に、3306番の TCP を落とすルールが増えたはずです。指定の意味は次のとおりです。

iptables -A INPUT -p tcp --dport 3306 -j DROP
        │   │       │  │    │         │  └ どうする(-j: ACCEPT 通す / DROP 捨てる / REJECT 拒否を返す)
        │   │       │  │    └───────── 宛先ポート(--dport)
        │   │       │  └────────────── プロトコル(-p: tcp / udp)
        │   │       └───────────────── どのチェインに足すか(INPUT)
        │   └───────────────────────── ルールを末尾に追加(-A = append)
        └───────────────────────────── コマンド本体

特定の送信元だけを対象にしたいときは -s(source)を足します。「社内ネットワークからは通すが、他は落とす」のような絞り込みに使います(第6章のサブネット /24 が効いてきます)。

iptables -A INPUT -p tcp -s 10.0.0.0/24 --dport 22 -j ACCEPT

いらなくなったルールは -D(delete)で消します。iptables -L --line-numbers で番号を確かめ、番号で 消すのが安全で分かりやすいやり方です。

iptables -L INPUT --line-numbers
iptables -D INPUT 4
iptables -L INPUT --line-numbers

チェインのルールをまるごと空にするのが -F(flush)です。取り消せないので本番では要注意(このシミュレータは「最初からやり直す」で戻せます)。

iptables -F INPUT
iptables -L INPUT

ルールは 上から順に 照合され、最初に一致したものが適用されます。だから「通す許可」を書く順番と、末尾の policy の設計が肝心です。本物の環境では、設定を再起動後も残すために iptables-save / iptables-restore を使いますが(この章では名前だけ)、まずは足す・消すの感覚をつかみましょう。

やってみよう

su - で root になってから、iptables -A INPUT -p tcp --dport 3306 -j DROP で 3306番を落とすルールを足し、iptables -L INPUT --line-numbers で末尾に増えたことを確認しましょう。次に、増えたルールの番号を見て iptables -D INPUT 番号 で消し、元に戻せることを試してください。最後に iptables -F INPUT で INPUT のルールが空になることも見てみましょう。

演習

root に切り替えたうえで、外から 8080番(TCP) への通信を落とす(DROP する)ルールを INPUT チェインに追加してください。

ヒント1を見る

追加は -A チェインプロトコル-p tcp、宛先ポートは --dport 8080、動作は -j DROP です。

ヒント2を見る

su - のあと iptables -A INPUT -p tcp --dport 8080 -j DROP

実際に動かしてみよう

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

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

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