February 13, 2016

MacOSX 10.5.8 に clamav

かなり古いMac mini (2007年のCore 2 Duo)のメンテをして、ウイルス対策をほどこすことにしました。といってもMac mini自体のウイルス対策をするというよりは、プロキシと組み合わせてウイルススキャンゲートウェイとし、他のPCのインターネットアクセスを保護しようという使い方をしています。プロキシにはsquid-3.4.13、ウイルススキャンにはclamav-0.99、間をつなぐのはc_icap-0.4.2 + c_icap_module-0.4.2 で構成しました。『icap連携をしてみる』『ウイルス対策の組込み(ClamAV)』を参考にしつつ、全てセルフビルドで構成してみました。

中でも古いMacOSX 10.5.8にclamavの導入には苦労したので、備忘録をここに残しておこうと思います。必要なライブラリ(最低限zlib)が揃っていれば configure && make && make install まで通るのですが、いざ動かしてみようとすると、例えばウイルス定義データベースを更新するfreshclamを実行すると

WARNING: [LibClamAV] cli_cvdload: Corrupted CVD header
ERROR: Verification: Malformed database

となって死んでしまいます。これは結局のところ、MacOSX 10.5.8に入っているzlibが古くzlib-1.2.3であることが原因でした。以下、対処方法を書いておきます。

気を取り直して最も新しいzlib-1.2.8をビルド、インストール。なお元からある古いものはそのままにしておきたいので、別のディレクトリ(ここでは /usr/local/zlib)にいれることにします。

$ wget http://zlib.net/zlib-1.2.8.tar.gz
$ tar zvxf zlib-1.2.8.tar.gz
$ (cd zlib-1.2.8 && ./configure --prefix=/usr/local/zlib && make && sudo make install)

zlibはlibxml2とも依存関係があるようなのでlibxml2も更新。

$ wget ftp://xmlsoft.org/libxml2/libxml2-2.9.3.tar.gz
$ tar zvxf libxml2-2.9.3.tar.gz
$ (cd libxml2-2.9.3 && ./configure --prefix=/usr/local/libxml2 --with-zlib=/usr/local/zlib && make && sudo make install)

そして上記のライブラリを見るようにclamavをビルド、インストール。ちなみにopensslも古いものだと良くないので /usr/local/ssl に新しいものを作ってあることを想定しています。

$ wget http://www.clamav.net/downloads/production/clamav-0.99.tar.gz
$ tar zvxf clamav-0.99.tar.gz
$ (cd clamav-0.99 && ./configure -with-openssl=/usr/local/ssl --with-zlib=/usr/local/zlib --with-xml=/usr/local/libxml2 && make && sudo make install)

これを気を取り直してfreshclamをかけてみると通りました。念のため調査してみます。

$ otool -L /usr/local/lib/libclamav.dylib
/usr/local/lib/libclamav.dylib:
/usr/local/lib/libclamav.7.dylib (compatibility version 9.0.0, current version 9.1.0)
/usr/local/libxml2/lib/libxml2.2.dylib (compatibility version 12.0.0, current version 12.3.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 111.1.7)
/usr/lib/libbz2.1.0.dylib (compatibility version 1.0.0, current version 1.0.5)
/usr/lib/libiconv.2.dylib (compatibility version 7.0.0, current version 7.0.0)
/usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 7.4.0)
/usr/local/ssl/lib/libssl.1.0.0.dylib (compatibility version 1.0.0, current version 1.0.0)
/usr/local/ssl/lib/libcrypto.1.0.0.dylib (compatibility version 1.0.0, current version 1.0.0)
/usr/local/zlib/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.8)
/usr/local/lib/libpcre.1.dylib (compatibility version 4.0.0, current version 4.6.0)
/usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)

うまくいきました。最悪リンクしているライブラリが違う場合はinstall_name_toolを使って強引に修正するということも可能です(『otool と install_name_tool を使ったライブラリのパス変更』に詳しい)。

さらに追記ですが、c_icap-0.4.2、c_icap_modeule-0.4.2には、ビルド前に以下のパッチをあてて対応しています。

パッチをあてることで、c_icap-0.4.2はビルドエラーの修正、c_icap_modeule-0.4.2はファイルソケットに対応できる(clamd_mod.ClamdSocketが使える)ようになります。

21:37 fenrir が投稿 : 固定リンク | | このエントリーを含むはてなブックマーク | トラックバック
このエントリーのトラックバックURL: https://fenrir.naruoka.org/mt/mt-tb.cgi/936
コメント
コメントする









名前、アドレスを登録しますか?
(次回以降コメント入力が楽になります)
  • 匿名でのコメントは受け付けておりません。
  • 名前(ハンドル名可)とメールアドレスは必ず入力してください。
  • メールアドレスを表示されたくないときはURLも必ず記入してください。
  • コメント欄でHTMLタグは使用できません。
  • コメント本文に日本語(全角文字)がある程度多く含まれている必要があります。
  • コメント欄内のURLと思われる文字列は自動的にリンクに変換されます。