VyOS で IPv4 と IPv6 の両方を扱う場合、Firewall も IPv4 と IPv6 を別々に設定します。ただし、設計思想まで別物にしてしまうと、どちらか片方だけが緩い、あるいは片方だけが通らないという状態になりやすくなります。
この記事では、VyOS 1.5 を前提に、IPv4 / IPv6 Firewall を input と forward の責務で分けて整理します。
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-in と outside-local に分けると、ルールの責務が明確になります。
IPv6 を扱う場合は、IPv4 の設定を単純にコピーするのではなく、ICMPv6 や Neighbor Discovery の性質を踏まえて、同じ思想で別のプロトコルとして設計する必要があります。
関連する記事
- VyOS ネットワーク設定ガイド
VyOS 1.5 の設定記事をまとめたハブページです。 - VyOS Firewall 基本設計 – trust / outside-in / outside-local を分ける
Firewall 全体の責務分界を整理した前提記事です。 - VyOS nat66 masquerade と IPv6 NAT の考え方
IPv6 と NAT66 の考え方を整理した記事です。
次に進む
- VyOS ネットワーク設定ガイドへ戻る
VyOS Firewall 関連の記事へ進む場合はハブページから確認できます。
参考書籍
IPv4 / IPv6 と Firewall 設計の前提になる TCP/IP の基本を確認したい場合の参考書籍です。
Amazon で見るこのリンクは Amazon アソシエイトリンクです。

