« 実は独りぼっち | Main | 911 回も怒られるの巻き »

2007年11月08日

CnetOS 5.0 への ClamAV のインストール手順

先日、自分の Mac の Parallels にある CentOS 5.0 に ClamAV をインストールした。その手順をメモしておく。他の CentOS マシンにもインストールしようと思っているので。

2007年11月13日追記

サンプルの clamd 起動用のスクリプトが reload で間違いがあったので訂正しました。ダウンロードした人は再度ダウンロードしてください。


前置き

CentOS 5.0 には Fedora Core のように ClamAV の rpm パッケージが無ありません。RedHat 系の Linux は rpm パッケージで管理するのが楽なのですが、公式パッケージに登録されていないとアップデートがいちいち面倒なことになります。ついでに ClamAv の Linux 用パッケージのページを見ても CentOS 用は記載されていません。

アップデートが面倒と言えば clamav-update があります。非公式 rpm でもソースからのビルドでも clamav-update があれば自動でできて手間いらずです。それに clamav-update はアップデータではありますがインストーラーとしても使えます。どうせ clamav-update でアップデート管理をするのであれば、clamav-update でインストールしてしまいましょう。

ここでは次のようにして ClamAV を運用することにします。

  • freshclam をデーモンとして使用する。
  • clamd も使用する。
  • freshclam と clamav-update を連携させて ClamAV 自体の自動アップデートをする。
  • freshclam と clamd のログは syslog に出す。

CentOS 限定ではなくほとんどの Linux でほぼ同じ手順でできるでしょう。

clamav-update のインストール

  1. clamav-update から最新版をダウンロードする。

    clamav-update-バージョン.tar.gz というアーカイブファイルがダウンロードされます。

  2. アーカイブファイルを解凍する。

    解凍した場所に clamav-update-バージョン というディレクトリができます。

  3. インストールスクリプトを実行する。

    root で clamav-update-バージョン ディレクトリに移動した後に次のようにします。

    ./install.sh --verbose

    --verbose オプションを付けているのでどこに何がインストールされたかわかります。ClamAV のダウンロード元を変えるためのオプションもあります。--help オプションを用いると説明が出力されます。

ClamAV のインストール

  1. clamav グループを作成する。

    root で次のようにします。

    groupadd -r clamav
  2. clamav ユーザを作成する。

    root で次のようにします。

    useradd -r -d /var/clamav -g clamav -s /sbin/nologin clamav

    このままですと clamav ユーザのホームディレクトリが作成されませんが、clamav ユーザでログインしないので要りません。

  3. clamav-update.pl を実行する。

    root で次のようにします。

    clamav-update.pl --force --config=/usr/local/etc/clamav-update.conf

    ダウンロードからやるので反応が出るのに少し時間がかかります。いらちの人は /usr/local/etc/clamav-update.conf を編集してログレベルを infodebug にしておきましょう。

ClamAV の設定

freshclam の設定

ClamAV のウィルスデータベースを常に最新にするために freshclam を設定します。ここではデーモンとして freshclam を使用することにし、clamav-update と連携させて ClamAV 自体も常に最新に保つようにします。

  1. /usr/local/etc/freshclam.conf を編集する。

    freshclam.conf を次の要領で編集します。

    • Example をコメントにする。
      オリジナル
      Example
      変更後
      #Example
    • syslog にログを出力する。
      オリジナル
      #LogSyslog yes
      変更後
      LogSyslog yes
    • pid ファイルを指定する。
      オリジナル
      #PidFile /var/run/freshclam.pid
      変更後
      PidFile /var/run/freshclam.pid
    • root で稼働するようにする。
      オリジナル
      #DatabaseOwner clamav
      変更後
      DatabaseOwner root

      これは freshclam を clamav-update.pl に連動させるためです。freshclam が ClamAV 自体のアップデートを検知したら clamav-update.pl を実行するようにするのですが、clamav-update.pl は root でないと動作しないからです。一般には root 権限で freshclam が稼働するのは推奨されません。

    • ウィルスデータベースのミラーサーバを指定する。
      オリジナル
      #DatabaseMirror db.XY.clamav.net
      変更後
      DatabaseMirror db.jp.clamav.net

      もちろんこの例は日本の場合です。

    • 更新時に clamd にリロードさせるようにする。
      オリジナル
      #NotifyClamd /path/to/clamd.conf
      変更後
      NotifyClamd /usr/local/etc/clamd.conf
    • ClamAV アップデートを自動化する。
      オリジナル
      #OnOutdatedExecute command
      変更後
      OnOutdatedExecute /usr/local/bin/clamav-update.pl --config=/usr/local/etc/clamav-update.conf
  2. freshclam 起動スクリプトを設置する。

    起動スクリプト freshclam を作っておきました。このファイルを /etc/rc.d/init.d/ に置いて実行パーミッションを付けておきます。

    このスクリプトでは reload はウィルスデータベースの即時アップデートを意味しています。

  3. freshclam 起動スクリプトを有効にする。

    root で次のようにします。

    chkconfig --add freshclam
  4. freshclam を起動する。

    root で次のようにします。

    /etc/rc.d/init.d/freshclam start
clamd の設定

Linux ではメールサブシステムのためによく clamd を利用しますが、それはまた別の機会にして、ここでは clamav-update プロジェクトの ClamdOmitScan を利用して定期スキャンをする目的で root または clamav グループに所属するユーザだけが利用できるように設定します。

  1. /usr/local/etc/clamd.conf を編集する。

    clamd.conf を次の要領で編集します。

    • Example をコメントにする。
      オリジナル
      Example
      変更後
      #Example
    • syslog にログを出力する。
      オリジナル
      #LogSyslog yes
      変更後
      LogSyslog yes
    • pid ファイルを指定する。
      オリジナル
      #PidFile /var/run/clamd.pid
      変更後
      PidFile /var/run/clamd.pid
    • 作業ディレクトリを指定する。
      オリジナル
      #TemporaryDirectory /var/tmp
      変更後
      TemporaryDirectory /var/clamav/tmp

      たまに一時ファイルやディレクトリを残してしまうことがあるので一気に消せるように独自のディレクトリを指定します。

    • ソケットファイルを指定する。
      オリジナル
      LocalSocket /tmp/clamd.socket
      変更後
      LocalSocket /var/clamav/clamd.socket
    • 圧縮率が高い圧縮ファイルも許容する。
      オリジナル
      #ArchiveMaxCompressionRatio 300
      変更後
      ArchiveMaxCompressionRatio 1000

    あとはお好みに合わせて適当にやってください。

  2. clamd 起動スクリプトを設置する。

    起動スクリプト clamd を作っておきました。このファイルを /etc/rc.d/init.d/ に置いて実行パーミッションを付けておきます。

    この起動スクリプトでは reload の実行に clamdsh を利用しています。後述のように clamdsh をインストールしてください。その reload はウィルスデータベースのリロードを意味しています。

  3. clamd 起動スクリプトを有効にする。

    root で次のようにします。

    chkconfig --add clamd

この段階ではまだ clamd は起動しないでください。準備の続きがあります。

clamdsh のインストール

clamdsh とは clamd を操作するための簡易シェルです。ここでは clamd 起動スクリプトの中で reload の実行のために使用しています。もちろん単体でもバージョン確認や動作確認に使えて便利です。

  1. clamav-update から最新版をダウンロードする。

    clamdsh-バージョン.tar.gz というアーカイブファイルがダウンロードされます。

  2. アーカイブファイルを解凍する。

    解凍した場所に clamdsh-バージョン というディレクトリができます。

  3. インストールする。

    root で clamdsh-バージョン ディレクトリに移動した後に次のようにします。

    make install

解凍したディレクトリはまだ消さないでください。まだそこにあるファイルを使います。

Perl モジュール Getopt::Long 最新版のインストール

clamdsh は Perl モジュール Getopt::Long 2.36 以上を必要としています。cpan コマンドを使ってバージョンアップしておきましょう。CentOS 5.0 では Getopt::Long 2.35 がインストールされていますし、他のシステム大抵は 2.35 です。

cpan コマンドを root ユーザで起動して cpan コマンドのプロンプトで次のようにします。

install Getopt::Long

ClamdOmitScan のインストール

定期スキャンには ClamAV 付属の clamdscan や clamscan ではなく、効率的な ClamdOmitScan を使用します。

  1. clamav-update から最新版をダウンロードする。

    ClamdOmitScan-バージョン.tar.gz というアーカイブファイルがダウンロードされます。

  2. アーカイブファイルを解凍する。

    解凍した場所に ClamdOmitScan-バージョン というディレクトリができます。

  3. インストールする。

    root で ClamdOmitScan-バージョン ディレクトリに移動した後に次のようにします。

    make install

解凍したディレクトリはまだ消さないでください。まだそこにあるファイルを使います。

アップデート用 clamav-update 設定ファイルの整理

ClamAV は freshclam と clamav-update の連携で自動アップデートされますが、clamdsh と ClamdOmitScan そして clamav-update 自身も clamav-update で自動アップデートされるようにしておきましょう。

  1. clamav-update 用設定ファイル置き場を準備する。

    /etc/clamav-update.d/ ディレクトリを作成します。

  2. ClamAV 以外用の clamav-update 用設定ファイルをそこに置きます。

    次のファイルを上で作成したディレクトリにコピーします。

    • clamdsh-update.conf

      clamdsh をアップデートするための設定ファイルです。インストール時にできた clamdsh-バージョン ディレクトリの中にあります。

    • ClamdOmitScan-update.conf

      ClamdOmitScan をアップデートするための設定ファイルです。インストール時にできた ClamdOmitScan-バージョン ディレクトリの中にあります。

    更に clamav-update のアップデートのために root で次のようにします。

    ln -s /usr/local/etc/clamav-update-update.conf /etc/clamav-update.d/
  3. clamav-update を定期的に実行する。

    毎日アップデート確認をするのでしたら /etc/cron.daily/ に毎週なら /etc/cron.weekly/ に次の内容のファイルを作成して実行パーミッションを付けます。

    #!/bin/sh
    
    ClamavUpdateConfDir=/etc/clamav-update.d
    
    for ConfFile in "$ClamavUpdateConfDir"/*-update.conf;
    do
     /usr/local/bin/clamav-update.pl --config "${ConfFile}"
    done

定期スキャンの設定

さていよいよ定期スキャンの設定をします。ここでは /home/ 以下を毎日、/usr/local/ 以下を一週間に一度、それ以外を毎月スキャンすることにします。

  1. 定期スキャン用ディレクトリを作成する。

    root で次のようにします。

    mkdir /var/clamav /var/clamav/tmp /var/clamav/ClamdOmitScan /var/clamav/isolated
    chown -R clamav:clamav /var/clamav
    chmod -R 2770 /var/clamav
  2. clamd を起動する。

    root で次のようにします。

    /etc/rc.d/init.d/clamd start

    動作しているかどうかの確認は clamdsh を使用します。次はその様子です。

    # clamdsh.pl
    /var/clamav/clamd.socket# PING
    PONG
    /var/clamav/clamd.socket# exit
    
    # 
  3. ClamAV 更新のときに freshclam と clamd が再起動されるようにする。

    root で clamav-update をインストールしたときのディレクトリ clamav-update-バージョン ディレクトリに移動した後に次のようにします。

    ./install.sh --verbose --freshclam --clamd

    最初にインストールしたときからオプションが増えています。このオプションを追加すると、/usr/local/etc/clamav-update.conf に ClamAV 更新時に freshclam と clamd が再起動される設定が追加されます。最初のインストール時に付けなかったのは、まだ再起動できない状態だったからです。

  4. 定期スキャン用のコマンドを作成する。

    ClamdOmitScan を使用するのですが、オプションを纏めたコマンドを準備しておきます。定期スキャンで使用されるスキャンデータというのを共有するときにも便利です。

    というわけでそのコマンドのサンプル cronscan を用意しておきました。これに実行パーミッションを付けて /usr/local/bin/ に置いてください。中に記載してあるオプションは運用ポリシーにしたがって適当に変えてください。

    感染ファイルを隔離するオプションはコメントにしてあります。これは、スキャン対象によっては誤認識でファイルが隔離ディレクトリ(/var/clamav/isolated/)に移動されるとシステムの稼働に重大な障害が発生する可能性があるからです。スキャン対象に応じてこのスクリプトの引き数として隔離オプションを与えるのがよいでしょう。

  5. 日次スキャンスクリプトを作成する。

    次のような内容のスクリプトを /etc/cron.daily/ に作成して実行パーミッションを付けます。

    #!/bin/bash
    
    /usr/local/bin/cronscan --move=/var/clamav/isolated /home
  6. 週次スキャンスクリプトを作成する。

    次のような内容のスクリプトを /etc/cron.weekly/ に作成して実行パーミッションを付けます。

    #!/bin/bash
    
    /usr/local/bin/cronscan /usr/local
  7. 月次スキャンスクリプトを作成する。

    次のような内容のスクリプトを /etc/cron.monthly/ に作成して実行パーミッションを付けます。

    #!/bin/bash
    
    /usr/local/bin/cronscan --exclude-dir=/home --exclude-dir=/usr/local /

後始末と補足

clamav-update と ClamdOmitScan そして clamdsh をインストールするときアーカイブファイルを解凍してできたディレクトリはもう要らないので消してください。

以上で完了です。最初にほとんどの Linux でほぼ同じ手順が通用すると書きましたが、UNIX 系 OS であれば起動スクリプトや定期実行用スクリプトの作法が異なるのみで、実質的に同じ手順を踏めばセットアップできるはずです。ただし、この記事の執筆時点での clamav-update の最新版 2.2.3 は FreeBSD でうまくインストールできない、あるいはインストールしても少し不都合があることがわかっています。(参照「SourceForge.jp: Detail: 11094 FreeBSD 6.2 で clamav-update 2.2.3 をインストールできない」) この不具合は最新の CVS リポジトリ上では解消されています。解消してから三週間くらい経っていますが、なんとなくリリースしていません。FreeBSD で使ってみたい人はコメントなどでせっついてください。

last generated
2008-08-08
page view