導入
ルールが読めたら、次は 足す・消す です。「このポートは外から触らせたくない」——たとえばデータベースの 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