概要
- 自宅サーバを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アドレスの表示があり、片方が一時アドレスになります。
https://ipv6-test.com/ にGoogle Chromeでアクセスすると、この変更されたipv6のアドレスが表示されます。
では、このRFC3041をOSではどのように実装しているかというと、Linuxの場合は以下のパラメータで調整します。
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 wlx net.ipv6.conf.wlx0013eff32167.temp_prefered_lft = 86400 net.ipv6.conf.wlx0013eff32167.temp_valid_lft = 604800 net.ipv6.conf.wlx0013eff32167.use_tempaddr = 2
use_tempaddrが2になっています。デスクトップ向けの設定という感じです。サーバならばこれが0か1になるべきです。
では、AWS EC2ではどのように設定されているかを見てみます。
$ sudo sysctl -a|grep -e temp_valid_lft -e temp_prefered_lft -e use_tempaddr|grep ens net.ipv6.conf.ens5.temp_prefered_lft = 86400 net.ipv6.conf.ens5.temp_valid_lft = 604800 net.ipv6.conf.ens5.use_tempaddr = 0
0になっています。
まぁ、自宅サーバなのでuse_tempaddrは1に設定しておこうかと思います。
設定
matsu@dell ~> sudo sysctl net.ipv6.conf.wlx0013eff32167.use_tempaddr net.ipv6.conf.wlx0013eff32167.use_tempaddr = 2 matsu@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=1 net.ipv6.conf.wlx0013eff32167.use_tempaddr = 1 matsu@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 10 Jun 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:785d Jun 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:785d Jun 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:785d Jun 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:785d Jun 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:46e3 Jun 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:46e3
ddns-route53もtemporary addressを使っていたようなので、今回の設定によってpublic addressを使うようになりました。
あと、IPv6のフィルタリングが気になったのでポートスキャンしてみます。
$ nmap -6 240b:10:2120:f400:f93f:c66f:26ff:46e3 Starting Nmap 7.80 ( https://nmap.org ) at 2020-06-06 05:09 UTC Nmap scan report for 240b:10:2120:f400:f93f:c66f:26ff:46e3 Host is up (0.012s latency). Not shown: 992 closed ports PORT STATE SERVICE 22/tcp open ssh 80/tcp open http 139/tcp open netbios-ssn 443/tcp open https 445/tcp open microsoft-ds 3000/tcp open ppp 3001/tcp open nessus 3003/tcp open cgms
む。ipv6のフィルタ設定が漏れていたので、ちゃんとfilterをしました。世の中にサンプルとして公開されているYAMAHA RTX系ルータの設定って危険ですね。。。。再テストします。
$ nmap -6 240b:10:2120:f400:f93f:c66f:26ff:46e3 Starting Nmap 7.80 ( https://nmap.org ) at 2020-06-06 06:16 UTC Nmap scan report for 240b:10:2120:f400:f93f:c66f:26ff:46e3 Host is up (0.013s latency). Not shown: 997 filtered ports PORT STATE SERVICE 22/tcp open ssh 80/tcp open http 443/tcp open https Nmap done: 1 IP address (1 host up) scanned in 4.79 seconds
まとめ
- 自宅サーバのIPv6アドレスが、長期間変更されないようになりました。
考察
上記の解説をもとにして、こちらの記事を見てみると、この記事内で指摘しているセキュリティリスクを理解できると思います。ブルートフォースで端末のIPv6アドレスを探すのは非常に困難です。
しかしながら、サーバサイドに悪意のあるサーバや途中経路に悪意のあるノードがいる場合は、接続元のIPv6アドレスを知れるのでそこに対してアタックを仕掛けるのは容易になるというリスクがあります。
Comments