Closed nexryai closed 8 months ago
allowIPv6Access
みたいなのを各port設定で許可するみたいな仕様でいいかな
ルーター機能が有効なときにLAN側のデバイスへの着信パケットフィルタリングをどうするか問題があるわ
手始めにv6経由でのpingを許可するオプションを実装しようと思ったけどicmpv6 type echo-request limit rate 5/second accept
しても通らないし謎すぎる
何書いてもブロックされるわね
ip6 nexthdr ipv6-icmp icmpv6 type { nd-router-advert, nd-neighbor-solicit, nd-neighbor-advert } accept
は多分効いてる ←なんで????????????????????新たに分かったこと
tcp dport 80 accept
となる。一般的なIPv4環境の場合はこれで問題ないがv6では全てのデバイスがグローバルIPに相当するアドレスを持つという危険仕様があり、ルーターやゲートウェイサーバーにLanceを入れてる場合に背後で80でlistenしてるサーバーがあればそれへのアクセスが可能になってしまう可能性ある ←要検証configAsRouter
なら暫定処置として無条件でIPv6の着信接続を拒否するMkAllowPort
とMkDenyIp
は既にv6に対応しているためv6アドレスを必要に応じて許可/拒否できるこの仕様は維持するconfigAsRouterなら暫定処置として無条件でIPv6の着信接続を拒否する
これにするとTailscaleのMagicDNS使用時みたいなユーザー側が特に意識しないけど勝手にIPv6が使われるようになってるような環境(現時点ではMagicDNSはAAAAレコードを返さないけど将来的にそうなる可能性がある)でIPv6を優先的に使おうとするソフトを動かすと不具合に繋がる気がする
configAsRouterなら暫定処置として無条件でIPv6の着信接続を拒否する
これにするとTailscaleのMagicDNS使用時みたいなユーザー側が特に意識しないけど勝手にIPv6が使われるようになってるような環境(現時点ではMagicDNSはAAAAレコードを返さないけど将来的にそうなる可能性がある)でIPv6を優先的に使おうとするソフトを動かすと不具合に繋がる気がする
これはUFWとかFirewalldでIPの範囲を指定して許可してる場合も同様のことが言えるのでLance側で対応する筋合いはない気がしてきた。対応するとしてもそのうち #16 で対応したい
easiest solution:
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
新たに分かったこと
- allowIPを指定していない場合はIPv6でのアクセスも受け付けるっぽい
- ↑の場合レンダリングされるルールは
tcp dport 80 accept
となる。一般的なIPv4環境の場合はこれで問題ないがv6では全てのデバイスがグローバルIPに相当するアドレスを持つという危険仕様があり、ルーターやゲートウェイサーバーにLanceを入れてる場合に背後で80でlistenしてるサーバーがあればそれへのアクセスが可能になってしまう可能性ある ←要検証
v6でも他ホスト宛はinputチェーンじゃなくてforwardチェーンに行くっぽいので問題なさそう
概要
nftablesではipv6に関するルールを定義する場合、
ip
ではなくip6
を使う必要がある。高度なルールのレンダリングやipset周りのコードがIPv6の存在を考慮しておらず以下のような問題が発生するisValidIP()
でのみ検証しているかつIPv6の存在を考慮していないコードがあると不正な設定ファイルがレンダリングされ適用時にエラーになるFetchIpSet()
はv6が混在するリストへの暫定対応としてIPv6の行を捨てる実装になっているがこれは問題な気がするそもそも開発者の環境が非IPv6なのでIPv6に仮に対応したとしても正常に動作するかを確認できない(致命的)←VPSで全てを解決した