ClamAVの「connect_error」ログがあったので、調べてみた。

■ClamAVの「connect_error」ログがあったので、調べてみた。

$ sudo grep -i "warn\|error" /var/log/clamav/freshclam.log | cut -c 21- | sort -u
2012 -> connect_error: getsockopt(SO_ERROR): fd=4 error=110: Connection timed out

■結論から言うと、ClamAVのパターンファイル更新サーバのうち、
 BIT-DRIVE「219.106.240.0/22」内の「219.106.242.51」のサーバだけ落ちてるのが原因。
 「clamav-daemon」、「calmav-freshclam」の動作には問題は無かった。
 以下に、切り分けた方法について書きます。

■発見の経緯は以下のメールにあったため。

 ローテーション前に、前日までのログから任意のキーワードで抽出、メールする。
 http://d.hatena.ne.jp/labunix/20121213

■環境

 Squeezeにclamavを導入。EICARチェック
 http://d.hatena.ne.jp/labunix/20120423

 clamavでPermission deniedが出る場合の対処(暫定)
 http://d.hatena.ne.jp/labunix/20120511

 ClamAVのチェック時にエラーも取得した方が良いかも
 http://d.hatena.ne.jp/labunix/20121023

■「connect_error」の前後を見ると、アップデートは出来ていて、
 「db.local.clamav.net (IP: 219.106.242.51)」への接続は失敗しているという状況。

$ sudo grep -A 1 -B 1 "connect_error" /var/log/clamav/freshclam.log | tail -3
Sun Dec 16 19:29:08 2012 -> main.cvd is up to date (version: 54, sigs: 1044387, f-level: 60, builder: sven)
Sun Dec 16 19:29:29 2012 -> connect_error: getsockopt(SO_ERROR): fd=4 error=110: Connection timed out
Sun Dec 16 19:29:29 2012 -> Can’t connect to port 80 of host db.local.clamav.net (IP: 219.106.242.51)

$ sudo grep "Can.t connect to" /var/log/clamav/freshclam.log | sed s/".*80 of host "//g | sort -u
db.local.clamav.net (IP: 219.106.242.51)

■他のIPでは成功している様子。

$ sudo grep -i "update" /var/log/clamav/freshclam.log | \
  grep "Database updated" | \
  awk '{print $1,$2,$3,$4,$5,$9,$12,$14}'
Sun Dec 16 06:25:28 2012 (1379020 db.local.clamav.net 211.10.155.48)
Sun Dec 16 07:25:52 2012 (1379384 db.local.clamav.net 211.10.155.48)
Sun Dec 16 08:26:16 2012 (1379863 db.local.clamav.net 27.96.54.66)
Sun Dec 16 10:26:42 2012 (1380706 db.local.clamav.net 203.178.137.175)
Sun Dec 16 11:27:06 2012 (1380876 db.local.clamav.net 203.178.137.175)
Sun Dec 16 13:27:31 2012 (1381219 db.local.clamav.net 27.96.54.66)
Sun Dec 16 14:27:55 2012 (1381394 db.local.clamav.net 27.96.54.66)
Sun Dec 16 16:28:21 2012 (1381526 db.local.clamav.net 218.44.253.75)
Sun Dec 16 17:28:44 2012 (1381625 db.local.clamav.net 27.96.54.66)
Sun Dec 16 18:29:08 2012 (1382010 db.local.clamav.net 203.178.137.175)
Sun Dec 16 19:29:32 2012 (1382263 db.local.clamav.net 27.96.54.66)

■「219.106.242.51」を含むIPが引ける。

$ dig db.local.clamav.net | grep -v "^\;\|^\$"
db.local.clamav.net.    2493    IN      CNAME   db.jp.clamav.net.
db.jp.clamav.net.       58      IN      A       203.212.42.128
db.jp.clamav.net.       58      IN      A       211.10.155.48
db.jp.clamav.net.       58      IN      A       218.44.253.75
db.jp.clamav.net.       58      IN      A       219.94.128.99
db.jp.clamav.net.       58      IN      A       219.106.242.51
db.jp.clamav.net.       58      IN      A       27.96.54.66
db.jp.clamav.net.       58      IN      A       120.29.176.126
db.jp.clamav.net.       58      IN      A       203.178.137.175

■念のため、手動アップデート

$ sudo /etc/init.d/clamav-daemon stop
$ sudo /etc/init.d/clamav-freshclam stop
$ sudo freshclam -v | grep "up to date"
main.cvd is up to date (version: 54, sigs: 1044387, f-level: 60, builder: sven)
daily.cld is up to date (version: 15842, sigs: 337835, f-level: 63, builder: neo)
bytecode.cld is up to date (version: 208, sigs: 41, f-level: 63, builder: neo)

■プロキシを経由する設定がされていることを確認。

$ sudo grep ^HTTP /etc/clamav/freshclam.conf | sed s/"[0-9]"/"X"/g
HTTPProxyServer XXX.XX.XX.XX
HTTPProxyPort XXXX

■「503」が該当のエラーの様子。

$ sudo tail -100 /var/log/squid/access.log | \
  grep db.local.clamav.net | \ 
  sed s/"^.*\["/"\["/g | sed s/"\""/"\n"/g
[16/Dec/2012:20:06:27 +0900]
GET http://db.local.clamav.net/daily-15843.cdiff HTTP/1.0
 503 757
-

ClamAV/0.97.6 (OS: linux-gnu, ARCH: x86_64, CPU: x86_64)
 TCP_MISS:DIRECT
[16/Dec/2012:20:06:57 +0900]
GET http://db.local.clamav.net/daily-15843.cdiff HTTP/1.0
 200 12953
-

ClamAV/0.97.6 (OS: linux-gnu, ARCH: x86_64, CPU: x86_64)
 TCP_MISS:DIRECT
[16/Dec/2012:20:08:27 +0900]
GET http://db.local.clamav.net/daily-15843.cdiff HTTP/1.0
 200 427
-

ClamAV/0.97.6 (OS: linux-gnu, ARCH: x86_64, CPU: x86_64)
 TCP_MISS:DIRECT

■80ポートへ直接アクセスが可能なサーバで以下のテスト。
 「219.106.242.51」のサーバが落ちてる。

$ telnet 219.94.128.99 80 | head -5
Trying 219.94.128.99...
Connected to 219.94.128.99.
Escape character is '^]'.
GET / HTTP/1.0

HTTP/1.1 200 OK
Date: Sun, 16 Dec 2012 11:21:03 GMT

$ telnet 219.106.242.51 80
Trying 219.106.242.51...
GET / HTTP/1.0

telnet: Unable to connect to remote host: Connection timed out

■「ClamAV update process started」の時間で再度ログを確認。

$ sudo tail -20 /var/log/clamav/freshclam.log | grep "19\:42\:" | grep "up to date"
sudo tail -500 /var/log/clamav/freshclam.log | grep "19\:42\:" | grep "up to date"
Sun Dec 16 19:42:55 2012 -> main.cvd is up to date (version: 54, sigs: 1044387, f-level: 60, builder: sven)
Sun Dec 16 19:42:55 2012 -> daily.cld is up to date (version: 15842, sigs: 337835, f-level: 63, builder: neo)
Sun Dec 16 19:42:55 2012 -> bytecode.cld is up to date (version: 208, sigs: 41, f-level: 63, builder: neo)

■デーモンの開始

$ sudo /etc/init.d/clamav-daemon start
Starting ClamAV daemon: clamd .

$ sudo /etc/init.d/clamav-freshclam start
Starting ClamAV virus database updater: freshclam.