手当たり次第に書くんだ

飽きっぽいのは本能

VyOS IPv4 / IPv6 Firewall – input / forward の責務を分ける

VyOS で IPv4 と IPv6 の両方を扱う場合、Firewall も IPv4 と IPv6 を別々に設定します。ただし、設計思想まで別物にしてしまうと、どちらか片方だけが緩い、あるいは片方だけが通らないという状態になりやすくなります。

この記事では、VyOS 1.5 を前提に、IPv4 / IPv6 Firewall を inputforward の責務で分けて整理します。

input と forward は守る対象が違う

input はルーター自身へ入ってくる通信を扱います。SSH、OpenVPN、ICMP、ルーター上の管理サービスなどが対象です。

forward はルーターを通過する通信を扱います。内部ネットワークから外部へ出る通信、外部から内部公開サービスへ入る通信、拠点間トンネルを通過する通信などが対象です。

  • input: ルーター自身を守る
  • forward: ルーターを通過する通信を制御する
  • output: ルーター自身が送信する通信を必要に応じて制御する

IPv4 と IPv6 は同じ思想で別々に書く

VyOS では IPv4 と IPv6 の Firewall ツリーが分かれています。そのため、IPv4 で許可したからといって IPv6 でも許可されるわけではありません。逆も同じです。

IPv4 の基本例

set firewall ipv4 input filter default-action 'drop'
set firewall ipv4 input filter default-log
set firewall ipv4 input filter rule 300 action 'accept'
set firewall ipv4 input filter rule 300 inbound-interface group 'trust'
set firewall ipv4 forward filter default-action 'drop'
set firewall ipv4 forward filter default-log
set firewall ipv4 forward filter rule 300 action 'accept'
set firewall ipv4 forward filter rule 300 inbound-interface group 'trust'

IPv6 の基本例

set firewall ipv6 input filter default-action 'drop'
set firewall ipv6 input filter default-log
set firewall ipv6 input filter rule 300 action 'accept'
set firewall ipv6 input filter rule 300 inbound-interface group 'trust'
set firewall ipv6 forward filter default-action 'drop'
set firewall ipv6 forward filter default-log
set firewall ipv6 forward filter rule 300 action 'accept'
set firewall ipv6 forward filter rule 300 inbound-interface group 'trust'

ここでは、内部側として分類した trust からの通信を許可し、それ以外は明示的に許可しない限り落とす考え方にしています。

外部側は jump で分岐させる

外部インターフェイスから入る通信は、直接大量のルールを書くより、用途別の名前付きルールへ jump させる方が読みやすくなります。

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'

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

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

outside-in は通過通信、outside-local はルーター自身への通信です。この名前を分けておくことで、公開サービスと管理面の制御を混ぜずに済みます。

ICMP と IPv6 ICMP は雑に落とさない

IPv4 では ICMP を制限したくなることがありますが、IPv6 では ICMPv6 が Neighbor Discovery や経路制御の前提にも関わります。IPv6 を扱う場合、ICMPv6 を IPv4 の ICMP と同じ感覚で雑に落とすと、通信そのものが不安定になります。

set firewall ipv4 name outside-local rule 1500 action 'accept'
set firewall ipv4 name outside-local rule 1500 protocol 'icmp'

set firewall ipv6 name outside-local rule 1500 action 'accept'
set firewall ipv6 name outside-local rule 1500 protocol 'ipv6-icmp'

実運用では、どこからの ICMP / ICMPv6 を許可するかを環境に合わせて調整します。重要なのは、IPv6 では ICMPv6 を通信の付属物ではなく、IPv6 の動作に必要な要素として扱うことです。

まとめ

VyOS の IPv4 / IPv6 Firewall は、設定ツリーは別ですが、設計思想は揃えるべきです。input でルーター自身を守り、forward で通過通信を制御し、外部側は outside-inoutside-local に分けると、ルールの責務が明確になります。

IPv6 を扱う場合は、IPv4 の設定を単純にコピーするのではなく、ICMPv6 や Neighbor Discovery の性質を踏まえて、同じ思想で別のプロトコルとして設計する必要があります。

関連する記事

次に進む

参考書籍

参考書籍
参考書籍
マスタリングTCP/IP 入門編 第6版

IPv4 / IPv6 と Firewall 設計の前提になる TCP/IP の基本を確認したい場合の参考書籍です。

Amazon で見る

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

VyOS IPv4 / IPv6 Firewall – input / forward の責務を分ける

コメントを残す

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

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

トップへ戻る