上から順に通すか止めるか決める
ファイアウォールのルールとは、通信を通すか止めるかを、上から順に決めていく一覧です。一行ごとに、「この条件の通信は、通す」または「止める」と書きます。
書き方を間違えると、止めたい通信が通ったり、必要な通信が止まったりします。ルールの読み方を身につけると、誰が書いたルールでも、結果を自分で予想できます。
このレッスンのゴール
メモ
ファイアウォールのルールの一覧を読み、ある通信が通るか止まるかを言える。
重要な言葉
| ことば | いみ | れい |
|---|---|---|
| ルール | 条件と、通すか止めるかの組 | |
| 許可 | 通信を通すこと | accept |
| 拒否 | 通信を止めること | drop |
| 最初に合ったルール | 上から読んで、最初に条件が合った一行 | |
| デフォルトポリシー | どのルールにも合わない通信への扱い | |
| 接続の追跡 | 始まった接続を覚えておく仕組み |
学生が入力するセルは、このプレビューでは空白です。
最初に合ったルールで決まる
ファイアウォールは、通信が一つ来るたびに、一覧を上から読みます。条件が合う最初の行が見つかったら、そこで決まります。下の行は読みません。
どの行にも合わなければ、デフォルトポリシーが使われます。下の表で、通信ごとにどの行で決まるかを追いましょう。
例: 四つの通信を追う
| 番号 | ルール | 通信: 管理PCから22番 | 通信: 外から3306番 |
|---|---|---|---|
| 1 | 管理PCの22番を許可 | 合う。許可で終わり | 合わない |
| 2 | 80番と443番を許可 | 読まない | 合わない |
| 3 | どれにも合わない | 読まない | デフォルトの拒否 |
学生が入力するセルは、このプレビューでは空白です。
ゲートウェイのルールを読む
sudo ip netns exec gw nft list chain inet filter forwardここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
ラボのルールが言うこと
出力の中ほどに policy drop があります。どのルールにも合わない通信は、止められます。
続く二行は、ct state established,related accept と、iifname "to-lan" accept です。前者は、すでに始まった接続の返事を通します。後者は、lan 側から入ってきた通信を通します。
許可の行を数える
sudo ip netns exec gw nft list ruleset | grep -c acceptここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
初めは全部止めて、必要なものを通す
デフォルトを「止める」にして、必要な通信だけを許可すると、書き漏らしても安全な側に倒れます。逆にデフォルトが「通す」だと、書き漏らした通信が全部通ってしまいます。
この考え方をデフォルト拒否といいます。多くの組織で、最初の方針に使われます。
例: 事務所用のルール
# 例です。ラボでは入力しません。
table inet office {
chain input {
type filter hook input priority 0; policy drop;
ct state established,related accept
iifname "lo" accept
ip saddr 192.168.10.0/24 tcp dport 22 accept
tcp dport { 80, 443 } accept
}
}事務所用の例を一行ずつ読む
policy drop で、初めは全部止めます。始まった接続の返事と、機械自身の内側の通信(lo)は通します。
22番は 192.168.10.0/24 の管理用の網からだけ、80番と443番は誰からでも許可します。それ以外は、どの行にも合わず、止まります。
順番を変えると結果が変わる
広いルールを先に書くと、後ろの細かいルールは一度も読まれません。例えば「22番を全員に許可」の後に「22番を拒否」を書いても、拒否の行は意味がありません。
具体的な例外を上に、広い決まりを下に書きます。一覧を読むときも、上から順に確かめます。
同じ条件の二つの行を探す
printf 'allow tcp 22\ndeny tcp 22\nallow tcp 80\n' | grep -n 'tcp 22'ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
よくある間違い
注意
「一覧の全部を読んで、一番厳しい行が勝つ」と思う人が多いです。一つの一覧では、最初に合った行で決まります。あとの行が拒否でも、上の許可で通信は通ります。順番が結果を決めます。
発展: 自分の事務所のルール
小さな店で、ウェブを公開し、店長のPCだけがSSHで管理する場合を考えます。デフォルトを拒否にして、必要な行を三行で書いてみましょう。
次に、書いた行の順番を入れ替えて、結果が変わる通信があるかを調べます。