手当たり次第に書くんだ

飽きっぽいのは本能

VyOS Firewall 基本設計 – trust / outside-in / outside-local を分ける

VyOS の Firewall は、単に許可ルールを並べるだけでは整理しにくくなります。特にルーターでは、内側から外側へ出る通信、外側から内側へ転送される通信、外側からルーター自身へ届く通信を分けて考える必要があります。

この記事では、VyOS 1.5 を前提に、trustoutside-inoutside-local という考え方で Firewall の基本設計を整理します。

Firewall は通信の向きで分ける

ルーターの Firewall で最初に決めるべきなのは、個別のポート番号ではなく、通信の向きです。通信の向きを分けないままルールを増やすと、どの通信を守っているのか分からなくなります。

  • trust: 内部側として信頼するインターフェイス群
  • outside-in: 外部から内部サービスへ転送される通信
  • outside-local: 外部からルーター自身へ届く通信

この3つを分けると、公開サービスを許可する話と、ルーター自身の管理ポートを守る話を混ぜずに済みます。

state policy を先に決める

多くの通信では、確立済みの戻り通信を許可し、不正な状態の通信を落とすのが基本になります。これを個別ルールで毎回書くより、グローバルな state policy として整理した方が分かりやすくなります。

設定例

set firewall global-options state-policy established action 'accept'
set firewall global-options state-policy related action 'accept'
set firewall global-options state-policy invalid action 'drop'

establishedrelated は戻り通信や関連通信を扱うための前提です。invalid を落とすことで、状態として成立しない通信を明示的に除外します。

trust はインターフェイスグループで表現する

内部側インターフェイスを毎回ルールに直接書くと、構成変更に弱くなります。内部側として扱うインターフェイスは interface-group にまとめておくと、ルール側の意味が安定します。

設定例

set firewall group interface-group trust interface 'lo'
set firewall group interface-group trust interface 'eth1'
set firewall group interface-group trust interface 'bond0'
set firewall group interface-group trust interface 'tun1000'

ここで重要なのは、trust が安全という意味ではなく、内部側として扱う設計上の分類だということです。内部側であっても、必要に応じてセグメント間制御や管理アクセス制限は別途考えます。

outside-in と outside-local を分ける

outside-in は、外部から内部サービスへ通す通信です。たとえば DNAT で Web、DNS、メールなどを内部へ転送する場合、この分類に入ります。

一方、outside-local は、外部からルーター自身へ届く通信です。SSH、OpenVPN、ICMP など、ルーター自身が終端する通信はこちらです。ここを混ぜると、公開サービスの許可がルーター管理面の許可に見えてしまい、設計が危険になります。

ジャンプ先を分ける例

set firewall ipv4 forward filter rule 600 action 'jump'
set firewall ipv4 forward filter rule 600 inbound-interface name 'eth0'
set firewall ipv4 forward filter rule 600 jump-target 'outside-in'

set firewall ipv4 input filter rule 600 action 'jump'
set firewall ipv4 input filter rule 600 inbound-interface name 'eth0'
set firewall ipv4 input filter rule 600 jump-target 'outside-local'

forward はルーターを通過する通信、input はルーター自身へ入る通信です。この2つを分けるだけでも、Firewall の読みやすさは大きく変わります。

default drop と default log

外部側から入る通信は、基本的に明示的に許可したものだけを通す方が安全です。そのため、filter の default action は drop にし、必要に応じて default log を有効にしておくと、意図しない通信の確認がしやすくなります。

set firewall ipv4 forward filter default-action 'drop'
set firewall ipv4 forward filter default-log
set firewall ipv4 input filter default-action 'drop'
set firewall ipv4 input filter default-log

ログは便利ですが、量が多すぎると運用できません。外部側で何を落としているかを見る目的と、ログ基盤側でどこまで保持するかを合わせて考えます。

まとめ

VyOS の Firewall は、ポート番号の一覧ではなく、通信の責務分界として設計する方が安定します。内部側を trust としてまとめ、外部から内部へ通す通信を outside-in、外部からルーター自身へ届く通信を outside-local として分けると、ルールの意味が追いやすくなります。

この分け方を先に決めておくと、DNAT、OpenVPN、SSH、ICMP、IPv6 Firewall などを追加しても、設計の軸が崩れにくくなります。

関連する記事

次に進む

参考書籍

参考書籍
参考書籍
マスタリングTCP/IP ルーティング編

Firewall、経路制御、ルーター設計の前提として、IP ルーティングを体系的に確認したい場合の参考書籍です。

Amazon で見る

このリンクは Amazon アソシエイトリンクです。

VyOS Firewall 基本設計 – trust / outside-in / outside-local を分ける

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

トップへ戻る