概要
- 自宅サーバをipv6対応しました。
- Ubuntu Linuxを普通に使っていると、ipv6のアドレスは7日で変わってしまう。セキュリティ的な理由で。詳細は:RFC3041
- 最近、Web上で話題になっていた、ipv6のパケットフィルタリングルールに関する話題にも関連しています。
仕様の調査
IPv6の仕様の一つに、Privacy Extensions for Stateless Address Autoconfiguration in IPv6 (IPv6ステートレスアドレス自動設定のプライバシー拡張)があります。
要するに、IPv6はNATが基本的に存在しなく、グローバルアドレスが直接ノードに振られてしまう事によってサーバサイドから追跡可能になってしまう可能性があるからそれを防ぐために定期的に使うアドレスを変更する技術です。
逆に、勝手にIPv6アドレスが変わってしまっても困るので固定のアドレスと、一時アドレスの2つをNICにアサインして基本的には一時アドレスを使いましょうという方針です。
例えば、macosでは以下のようなIPv6アドレスの表示があり、片方が一時アドレスになります。

ipv6 最初の状態

NICをoffにしてonにするとipv6の片方が入れ替わる (下)
https://ipv6-test.com/ にGoogle Chromeでアクセスすると、この変更されたipv6のアドレスが表示されます。

では、このRFC3041をOSではどのように実装しているかというと、Linuxの場合は以下のパラメータで調整します。
https://www.kernel.org/doc/Documentation/networking/ip-sysctl.txt
use_tempaddr - INTEGER Preference for Privacy Extensions (RFC3041). <= 0 : disable Privacy Extensions == 1 : enable Privacy Extensions, but prefer public addresses over temporary addresses. > 1 : enable Privacy Extensions and prefer temporary addresses over public addresses. Default: 0 (for most devices) -1 (for point-to-point devices and loopback devices)
temp_valid_lft - INTEGER valid lifetime (in seconds) for temporary addresses. Default: 604800 (7 days)
temp_prefered_lft - INTEGER Preferred lifetime (in seconds) for temporary addresses. Default: 86400 (1 day)- use_tempaddr <一時アドレスを使うかどうか制御>一時アドレスを使うかどうか制御>。0なら無効、1なら一時アドレスを有効化しますが、パブリックアドレスを優先して使う。
- temp_valid_lft: 有効期限(デフォルトは7日)
- temp_prefered_lft: 推奨される有効期間 (デフォルトは1日)
手元のUbuntu 20で確認してみます。
> sudo sysctl -a|grep -e temp_valid_lft -e temp_prefered_lft -e use_tempaddr|grep wlxnet.ipv6.conf.wlx0013eff32167.temp_prefered_lft = 86400net.ipv6.conf.wlx0013eff32167.temp_valid_lft = 604800net.ipv6.conf.wlx0013eff32167.use_tempaddr = 2use_tempaddrが2になっています。デスクトップ向けの設定という感じです。サーバならばこれが0か1になるべきです。
では、AWS EC2ではどのように設定されているかを見てみます。
$ sudo sysctl -a|grep -e temp_valid_lft -e temp_prefered_lft -e use_tempaddr|grep ensnet.ipv6.conf.ens5.temp_prefered_lft = 86400net.ipv6.conf.ens5.temp_valid_lft = 604800net.ipv6.conf.ens5.use_tempaddr = 00になっています。
まぁ、自宅サーバなのでuse_tempaddrは1に設定しておこうかと思います。
設定
matsu@dell ~> sudo sysctl net.ipv6.conf.wlx0013eff32167.use_tempaddrnet.ipv6.conf.wlx0013eff32167.use_tempaddr = 2matsu@dell ~> curl https://v6.ident.me/240b:10:2120:f400:edc1:bcf0:567b:785d
matsu@dell ~> sudo sysctl -w net.ipv6.conf.wlx0013eff32167.use_tempaddr=1net.ipv6.conf.wlx0013eff32167.use_tempaddr = 1matsu@dell ~> curl https://v6.ident.me/240b:10:2120:f400:f93f:c66f:26ff:46e3設定の永続化をするために以下を/etc/sysctl.confへ追記
net.ipv6.conf.wlx0013eff32167.use_tempaddr=1一応、ddns-route53の動作確認をします。今までは一時アドレスを使って、これからはpublic addressを使うようになっているかを確認しておきます。
root@dell /v/log# grep ddns syslog|grep IPv6|tail -n 10Jun 6 13:00:02 dell ddns-route53[110094]: #033[90mSat, 06 Jun 2020 04:00:02 UTC#033[0m #033[32mINF#033[0m Current WAN IPv6: 240b:10:2120:f400:edc1:bcf0:567b:785dJun 6 13:00:02 dell ddns-route53[110094]: #033[90mSat, 06 Jun 2020 04:00:02 UTC#033[0m #033[32mINF#033[0m WAN IPv4/IPv6 addresses have not changed since last update. Skipping...Jun 6 13:00:02 dell ddns-route53[1588297]: #033[90mSat, 06 Jun 2020 04:00:02 UTC#033[0m #033[32mINF#033[0m Current WAN IPv6: 240b:10:2120:f400:edc1:bcf0:567b:785dJun 6 13:00:02 dell ddns-route53[1588297]: #033[90mSat, 06 Jun 2020 04:00:02 UTC#033[0m #033[32mINF#033[0m WAN IPv4/IPv6 addresses have not changed since last update. Skipping...Jun 6 13:30:02 dell ddns-route53[1588297]: #033[90mSat, 06 Jun 2020 04:30:02 UTC#033[0m #033[32mINF#033[0m Current WAN IPv6: 240b:10:2120:f400:edc1:bcf0:567b:785dJun 6 13:30:02 dell ddns-route53[1588297]: #033[90mSat, 06 Jun 2020 04:30:02 UTC#033[0m #033[32mINF#033[0m WAN IPv4/IPv6 addresses have not changed since last update. Skipping...Jun 6 13:30:02 dell ddns-route53[110094]: #033[90mSat, 06 Jun 2020 04:30:02 UTC#033[0m #033[32mINF#033[0m Current WAN IPv6: 240b:10:2120:f400:edc1:bcf0:567b:785dJun 6 13:30:02 dell ddns-route53[110094]: #033[90mSat, 06 Jun 2020 04:30:02 UTC#033[0m #033[32mINF#033[0m WAN IPv4/IPv6 addresses have not changed since last update. Skipping...Jun 6 14:00:02 dell ddns-route53[1588297]: #033[90mSat, 06 Jun 2020 05:00:02 UTC#033[0m #033[32mINF#033[0m Current WAN IPv6: 240b:10:2120:f400:f93f:c66f:26ff:46e3Jun 6 14:00:03 dell ddns-route53[110094]: #033[90mSat, 06 Jun 2020 05:00:03 UTC#033[0m #033[32mINF#033[0m Current WAN IPv6: 240b:10:2120:f400:f93f:c66f:26ff:46e3ddns-route53もtemporary addressを使っていたようなので、今回の設定によってpublic addressを使うようになりました。
あと、IPv6のフィルタリングが気になったのでポートスキャンしてみます。
$ nmap -6 240b:10:2120:f400:f93f:c66f:26ff:46e3Starting Nmap 7.80 ( https://nmap.org ) at 2020-06-06 05:09 UTCNmap scan report for 240b:10:2120:f400:f93f:c66f:26ff:46e3Host is up (0.012s latency).Not shown: 992 closed portsPORT STATE SERVICE22/tcp open ssh80/tcp open http139/tcp open netbios-ssn443/tcp open https445/tcp open microsoft-ds3000/tcp open ppp3001/tcp open nessus3003/tcp open cgmsむ。ipv6のフィルタ設定が漏れていたので、ちゃんとfilterをしました。世の中にサンプルとして公開されているYAMAHA RTX系ルータの設定って危険ですね。。。。再テストします。
$ nmap -6 240b:10:2120:f400:f93f:c66f:26ff:46e3Starting Nmap 7.80 ( https://nmap.org ) at 2020-06-06 06:16 UTCNmap scan report for 240b:10:2120:f400:f93f:c66f:26ff:46e3Host is up (0.013s latency).Not shown: 997 filtered portsPORT STATE SERVICE22/tcp open ssh80/tcp open http443/tcp open httpsNmap done: 1 IP address (1 host up) scanned in 4.79 secondsまとめ
- 自宅サーバのIPv6アドレスが、長期間変更されないようになりました。
考察
上記の解説をもとにして、こちらの記事を見てみると、この記事内で指摘しているセキュリティリスクを理解できると思います。ブルートフォースで端末のIPv6アドレスを探すのは非常に困難です。
しかしながら、サーバサイドに悪意のあるサーバや途中経路に悪意のあるノードがいる場合は、接続元のIPv6アドレスを知れるのでそこに対してアタックを仕掛けるのは容易になるというリスクがあります。