ipv6で待ち受けているサービスへの防御、忘れてない??


netstat -an して、IPv6で22番ポートとかでListenしていませんか?iptablesの設定だけはしたものの、ip6tablesの設定をど忘れしていて実は繋がったりしません?手元の仮想マシン上でやってみた結果です。

テスト用サーバ構成
項目 接続元 接続先
ipv4 172.20.1.143 172.20.1.144
ipv6 fe80::20c:29ff:fecd:cd6e/64 fe80::20c:29ff:fe45:1693/64
iptables設定 :INPUT ACCEPT
:FORWARD ACCEPT
:OUTPUT ACCEPT
:INPUT DROP
:FORWARD DROP
:OUTPUT DROP
ip6tables設定 :INPUT ACCEPT
:FORWARD ACCEPT
:OUTPUT ACCEPT
:INPUT ACCEPT
:FORWARD ACCEPT
:OUTPUT ACCEPT

上記のように、ipv4の方はわざと全部のポートをふさいでいます。。。がipv6はがら空きです。その状態でSSHで繋いでみたのが下記。

lasas@ubuntu:~$ ssh 172.20.1.144
# ssh: connect to host 172.20.1.144 port 22: Connection timed out
# よしよし。繋がらないね。
lasas@ubuntu:~$ ssh fe80::20c:29ff:fe45:1693%eth0
# The authenticity of host 'fe80::20c:29ff:fe45:1693%eth0 (fe80::20c:29ff:fe45:1693%eth0)' can't be established.
# ECDSA key fingerprint is 5e:a2:df:1d:ab:9c:bd:3c:6a:de:d6:a0:96:66:ca:03.
# Are you sure you want to continue connecting (yes/no)? yes
# Warning: Permanently added 'fe80::20c:29ff:fe45:1693%eth0' (ECDSA) to the list of known hosts.
lasas@fe80::20c:29ff:fe45:1693%eth0's password:
# Welcome to Ubuntu 15.04 (GNU/Linux 3.19.0-15-generic x86_64)
#
#  * Documentation:  https://help.ubuntu.com/
#
#   System information as of Tue May 12 14:47:01 JST 2015
#
#   System load:  0.0               Processes:           88
#   Usage of /:   7.8% of 15.37GB   Users logged in:     1
#   Memory usage: 3%                IP address for eth0: 172.20.1.144
#   Swap usage:   0%
#
#   Graph this data and manage this system at:
#     https://landscape.canonical.com/
#
# Last login: Tue May 12 14:29:38 2015 from 172.20.1.251
# 普通に繋がりました。当たり前と言えば当たり前ですが(笑)

lasas@ubuntu:~$ ip a
# 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default
#     link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
#     inet 127.0.0.1/8 scope host lo
#        valid_lft forever preferred_lft forever
#     inet6 ::1/128 scope host
#        valid_lft forever preferred_lft forever
# 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
#     link/ether 00:0c:29:45:16:93 brd ff:ff:ff:ff:ff:ff
#     inet 172.20.1.144/24 brd 172.20.1.255 scope global eth0
#        valid_lft forever preferred_lft forever
#     inet6 fe80::20c:29ff:fe45:1693/64 scope link
#        valid_lft forever preferred_lft forever

lasas@ubuntu:~$ sudo su -
# [sudo] password for lasas:
# root@ubuntu:~# iptables -L
# Chain INPUT (policy DROP)
# target     prot opt source               destination
#
# Chain FORWARD (policy DROP)
# target     prot opt source               destination
#
# Chain OUTPUT (policy DROP)
# target     prot opt source               destination
# iptablesでファイアウォールをきっちり(例なので、全DROPだけど)設定したはずが・・・

# root@ubuntu:~# ip6tables -L
# Chain INPUT (policy ACCEPT)
# target     prot opt source               destination
#
# Chain FORWARD (policy ACCEPT)
# target     prot opt source               destination
#
# Chain OUTPUT (policy ACCEPT)
# target     prot opt source               destination
# ip6tablesの方は全部ACCEPT

root@ubuntu:~# netstat -an
# Active Internet connections (servers and established)
# Proto Recv-Q Send-Q Local Address           Foreign Address         State
# tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN
# tcp6       0      0 :::22                   :::*                    LISTEN
# tcp6       0      0 fe80::20c:29ff:fe45::22 fe80::20c:29ff:fe:60772 ESTABLISHED
# udp        0      0 0.0.0.0:68              0.0.0.0:*
# udp        0      0 0.0.0.0:37046           0.0.0.0:*
# udp6       0      0 :::12977                :::*
# そりゃあ、tcp6で:::22になっていますからね。

リンクローカルアドレスだから大した問題ではないと言うご意見もあると思いますが、接続出来てしまうのは良くないですね。

借りているVPSでIPv6でお隣にログインできたりするのか気になったので、2つ借りているので、試してみましたが、接続は出来ませんでした。ipv4の方のセグメント自体が異なっていたので、もう1台と少しネットワーク的に離れた個所にある為なのか、それとも運営側で意図的にフィルタしてくれているのかは定かではありませんが。

対処法

一応、下記でフィルタは出来ます。OS再起動時には、初期化されてしまうので考慮してください。以前書いた対処方法はこちらにあります。

ip6tables -P FORWARD DROP
ip6tables -P INPUT DROP
ip6tables -P OUTPUT DROP

ipv6を使っていなければ、無効化してしまっても良いかもしれません。/etc/sysctl.confに下記の2行を追記して再起動すればOKです。

net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1

ふさぎ忘れた方が悪いと言えば悪いですが、OSセットアップ後にデフォルトで有効のまま残っているipv6アドレスはセキュリティホールになりやすいのでは。

タグ付けされた , . ブックマークする へのパーマリンク.

コメントを残す

メールアドレスが公開されることはありません。