読者です 読者をやめる 読者になる 読者になる

PSLブログ

ヨシナシゴトヲツヅリマス

IPv6を無効化した弊害

今日発表されたglibc脆弱性(CVE-2015-0235、通称GHOST)は、gethostbyname関数を悪用することで、サーバ上の任意のコードを外から実行できてしまうというもので、ただちにパッチを当てるべきとのことで、さっそく受け持ちのサーバに対応させていった。最近サーバが安くなったのもあって、自社やクライアントの専用サーバやVPSがいくつもあり、それらすべてをアップデートする必要があった。

アップデートの方法自体は簡単で、glibcのパッケージをyumで更新するだけだ。

yum -y update glibc

いつもと違うのは、その後サーバ自体をrebootさせてやる必要があることで、手元にコンソールがないわけだがssh経由で片っ端からリブートをかけていったが、1台だけうまくいかないサーバがあった。

そのサーバでは、1年くらい前に、IPv6を無効にしたことがあった。

CentOS6でIPv6を無効にする http://www.psl.ne.jp/blog/?p=498

最初に気づいたのは、dovecotが立ち上がらず、ここにのっている100件以上のメールアカウントのIMAP/POP接続ができなくなっていたことで、立ち上げようとすると

Error: service(pop3-login): listen(::, 110) failed: Address family not supported by protocol
Error: socket() failed: Address family not supported by protocol
Error: service(pop3-login): listen(::, 995) failed: Address family not supported by protocol
Error: socket() failed: Address family not supported by protocol
Error: service(imap-login): listen(::, 143) failed: Address family not supported by protocol
Error: socket() failed: Address family not supported by protocol
Error: service(imap-login): listen(::, 993) failed: Address family not supported by protocol
Fatal: Failed to start listeners

というエラーが出てしまった。ネットに解決方法が書いてあって、

dovecotでAddress family not supported by protocolというエラーが出る http://choice-site.com/2013/10/17/dovecot%E3%81%A7address-family-not-supported-by-protocol%E3%81%A8%E3%81%84%E3%81%86%E3%82%A8%E3%83%A9%E3%83%BC%E3%81%8C%E5%87%BA%E3%82%8B/

/etc/dovecot/dovecot.conf

listen = *, ::
 ↓ 
listen = *

として、listenする対象をIPv4だけにすればよいとのこと。それは記事の通りにしたら立ち上がった。

Postfixにも問題があって、maillogに以下のエラーを吐いていた(上記の本部ログの記事にコメントを書いていただいた方の指摘通りのことが起きた)。

Postfixのipv6設定を無効にする方法 http://qiita.com/AH_korikori/items/ce30aecf38c85c3afc01

上記を参考に、以下のように設定を変えて再起動して解決した。

/etc/postfix/main.cf

inet_protocols = all
 ↓ 
inet_protocols = ipv4

とすることでエラーが出なくなった。

まだ問題があって、Virtualminが立ち上がらない。

[root@serv init.d]# service webmin restart
Stopping Webmin server in /usr/libexec/webmin
cat: /var/webmin/miniserv.pid: No such file or directory
kill: usage: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]
Starting Webmin server in /usr/libexec/webmin
Pre-loaded virtual-server/virtual-server-lib-funcs.pl in virtual_server
Pre-loaded virtual-server/feature-unix.pl in virtual_server
Pre-loaded virtual-server/feature-dir.pl in virtual_server
Pre-loaded virtual-server/feature-dns.pl in virtual_server
Pre-loaded virtual-server/feature-mail.pl in virtual_server
Pre-loaded virtual-server/feature-web.pl in virtual_server
Pre-loaded virtual-server/feature-webalizer.pl in virtual_server
Pre-loaded virtual-server/feature-ssl.pl in virtual_server
Pre-loaded virtual-server/feature-logrotate.pl in virtual_server
Pre-loaded virtual-server/feature-mysql.pl in virtual_server
Pre-loaded virtual-server/feature-postgres.pl in virtual_server
Pre-loaded virtual-server/feature-ftp.pl in virtual_server
Pre-loaded virtual-server/feature-spam.pl in virtual_server
Pre-loaded virtual-server/feature-virus.pl in virtual_server
Pre-loaded virtual-server/feature-webmin.pl in virtual_server
Pre-loaded virtual-server/feature-virt.pl in virtual_server
Pre-loaded virtual-server/feature-virt6.pl in virtual_server
Pre-loaded WebminCore
Failed to open socket family 10 : Address family not supported by protocol at /usr/libexec/webmin/miniserv.pl line 538.

出てきたエラーがdovecotと同じなので、これもIPv6を殺してしまったせいだと思った。なお、今のVirtualminでは、バーチャルホストの設定でIPv6を使うかどうかを設定できるので、元から殺す必要がなかった。運用開始から一度も再起動をかけてこなかったサーバなので今頃こんな弊害が出てしまった。

IPv6を殺したときと逆のことをすれば直るかと思っていろいろ試していて、よくわからずsysctl -pを連発したりしていたらサーバが応答しなくなってしまった。またdovecotが止まってしまった。どうしようもなくなって、さくらのリブート専用窓口に電話して依頼する羽目に。最終的に物理的にリブートをかけて、無事起動し、復旧したが、30分以上の間メールの受信ができなくなり、そのサーバを使っていたお客さんに迷惑をかけてしまった。運用中のサーバをあわてていろいろといじるのはリスクが大きい。

今回のこの対応で3時間くらいかかってしまった。Virtualminが立ち上がらないのは困るので、近いうちに何とかする必要がある。