UbuntuにてIPv6のtemporary addressを使わないようにする。サーバ運用なので。

概要

仕様の調査

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 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アドレスを知れるのでそこに対してアタックを仕掛けるのは容易になるというリスクがあります。

コメントを残す