冷やし中華的タイトルではありますが、かなりマニアック(専門的)な話題です。
今更ながら、IPv6デビューと相成りました。
外から中への通信制御(通す・止める)こともパケットレベルで確認済みです。
というか、NUROさんからレンタルしてるルータ、フィルタリング設定に凄い癖があって、ちょっと悩みました。
※以下、IPv6のフィルタ設定(「有効IPフィルタ」(日本語…)をON、「フィルタリング方法」が「ハイブリッド」の前提)の話で、IPv4はデフォルトのままという前提(内→外のアウトバウンド方向だけOK)です。
で、この「癖」ですけど、一言(?)でいえば、
「ステートフルのフリをしているけど、実は全然ステートフルじゃないやん!(メ゚皿゚)」
というところ。
ファイアウォールにおいては一般的ですが、以下の2つのルールを設定するとします。
- アウトバウンド方向(内→外。NUROルータ的には「アップストリーム」)は全許可
- インバウンド方向(外→内。NUROルータ的には「ダウンストリーム」)を全拒否
※インバウンド方向のルールは、いわゆる、Cleanup Rule(s)ですね。
すると…インバウンド方向どころかアウトバウンド方向までIPv6通信が出来なくなります。(´・ω・`)
ここで、インバウンド方向のフィルタを削除すると、IPv6通信が可能になります。
※明示的に許可していないので、インバウンド方向の通信が出来ない点では一緒。
もちろん、フツーのファイアウォールなら、何事もなく想定通りに動きます。
通信セッションを監視して、パケットを通す通さないを判断している(=ステートフル)だから当然ですね。
ところが、NUROルータはどうやらそうではなく、中ではステートレスなパケットフィルタが動いていて、implicit rules(暗黙のルール)で、Cisco様のACLでいう「established」な通信を通すようになっているのではないかと。
もちろん、明示的にestablishedなパケットを許可する・拒否することは出来ません。
これでもまあ実用的には…と思っちゃいがちなのですが、ステートレスなパケットフィルタを扱うことにおいて、不安(試してないので、あくまで不安なだけですが)は2つあります。
- UDPにはセッション(コネクション)の概念がないので、establishedを使ったルールは書けません。となると、サーバ側はアウトバウンド方向のUDPをフルオープンにしておかないと、向こうはランダムでポートアサインするので通信できません。これは最小権限の原則に反するので、かなり嫌な感じです。
- ちょっと深刻なのですが、ACKフラグを立てたパケットなら素通し(もちろん端末側で拒否するでしょうが、届くことは届く)ってことです。となると、TCP通信での「ACK flooding攻撃」が成立します。
※いきなりACKフラグが立っているTCPパケットを出そうと思うと、パケットをねつ造しないとできないですが、ねつ造が不可能というわけでもない…インターネットをまともに通るかは別ですが。
NUROの網側で、その辺守られてたら…いいなぁと思います。
この際、ルータは全スルーにして、その下でIX2105にでも任せようかな、とも思ったですが、そうするとこのルータのWifi機能で繋がる機器が危険に晒されるし、ルータそのものも危ないかも(IPv4でしか接続できないかもですけど)と思います。
悩ましいなぁ…。