nexryai / lance-light

Yet another human-friendly firewall
https://lance.sda1.net/
MIT License
12 stars 0 forks source link

Insufficient IPv6 support / IPv6対応が不十分 #14

Closed nexryai closed 8 months ago

nexryai commented 1 year ago

概要

nftablesではipv6に関するルールを定義する場合、ipではなくip6を使う必要がある。高度なルールのレンダリングやipset周りのコードがIPv6の存在を考慮しておらず以下のような問題が発生する

nexryai commented 1 year ago

考えられる対応

nexryai commented 1 year ago

みたいな仕様でいいかな

nexryai commented 11 months ago

ルーター機能が有効なときにLAN側のデバイスへの着信パケットフィルタリングをどうするか問題があるわ

nexryai commented 11 months ago

手始めにv6経由でのpingを許可するオプションを実装しようと思ったけどicmpv6 type echo-request limit rate 5/second acceptしても通らないし謎すぎる

nexryai commented 11 months ago

何書いてもブロックされるわね

nexryai commented 11 months ago
nexryai commented 11 months ago
nexryai commented 11 months ago

新たに分かったこと

nexryai commented 10 months ago
nexryai commented 10 months ago

configAsRouterなら暫定処置として無条件でIPv6の着信接続を拒否する

これにするとTailscaleのMagicDNS使用時みたいなユーザー側が特に意識しないけど勝手にIPv6が使われるようになってるような環境(現時点ではMagicDNSはAAAAレコードを返さないけど将来的にそうなる可能性がある)でIPv6を優先的に使おうとするソフトを動かすと不具合に繋がる気がする

nexryai commented 10 months ago

configAsRouterなら暫定処置として無条件でIPv6の着信接続を拒否する

これにするとTailscaleのMagicDNS使用時みたいなユーザー側が特に意識しないけど勝手にIPv6が使われるようになってるような環境(現時点ではMagicDNSはAAAAレコードを返さないけど将来的にそうなる可能性がある)でIPv6を優先的に使おうとするソフトを動かすと不具合に繋がる気がする

これはUFWとかFirewalldでIPの範囲を指定して許可してる場合も同様のことが言えるのでLance側で対応する筋合いはない気がしてきた。対応するとしてもそのうち #16 で対応したい

nexryai commented 10 months ago

easiest solution:

net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
nexryai commented 10 months ago

新たに分かったこと

  • allowIPを指定していない場合はIPv6でのアクセスも受け付けるっぽい
  • ↑の場合レンダリングされるルールはtcp dport 80 acceptとなる。一般的なIPv4環境の場合はこれで問題ないがv6では全てのデバイスがグローバルIPに相当するアドレスを持つという危険仕様があり、ルーターやゲートウェイサーバーにLanceを入れてる場合に背後で80でlistenしてるサーバーがあればそれへのアクセスが可能になってしまう可能性ある ←要検証

v6でも他ホスト宛はinputチェーンじゃなくてforwardチェーンに行くっぽいので問題なさそう