ウイルス対策(Amavisd-new + F-Prot)


おやじのところでは、メールのウイルス対策として H+BEDV の AntiVir Mailgate for Linux を利用していますが、FRISK の F-Prot Antivirus for Linux もホームユースなら無料で使用できるため、RedHat9、Fedora Core2、SuSE9.1 に導入してみました。 基本的な差はありませんが、デストリによって少しずつ対応が異なります。
ここでは、RedHat9を中心に紹介することとし、他のデストりについては異なる点を示すことにします。
なお、Postfix は既にインストールされて動作しているものとします。

■F-Prot Antivirus for Linux のインストール

ウイルススキャンエンジンとしては、ホームユースなら無料で使用できる、FRISK の F-Prot Antivirus for Linux を使用します。ダウンロードのページで必要事項を記入して登録すれば、ダウンロードできます。
  1. F-Prot Antivirus for Linux をダウンロードしてインストールし、ウイルス定義ファイルをアップデートしておく。

    # rpm -ihv fp-linux-ws.rpm
    # /usr/local/f-prot/check-updates.sh


  2. ウイルス定義ファイルの自動アップデートの設定をする。/etc/crontab に下記を追加する。下記は毎日4:03に更新する例である。

    03 04 * * * root /usr/local/f-prot/check-updates.sh


    最近(2006/12)のものはスクリプトが下記のように変更になっている。更新時にroot宛てにメッセージがくるのがうるさいなら、最後に「-quiet」を付与すればよい。動いている証でもあるので、メールは受けたほうが安心?(結構な頻度で更新されており、多いときには日に2〜3度)

    03 04 * * * root /usr/local/f-prot/tools/check-updates.pl -cron (-quiet)


■Amavisd-new のインストールと設定

Amavisd-new は、RedHat9、Fedora Core2、SuSE9.1なら基本的には RPM からインストールできます。但し、おやじが試験した時は、Fedora Core2 はRPM ではうまく起動できませんでしたので、後述のようにソースからインストールしました。(関連モジュールが非常に沢山あり、個別に選択インストールするのはかなり面倒くさいので、Fedora Core2 でRPM がうまく起動できないとしても、一旦は yum または apt でインストールすることを薦めます。うまく起動しない場合は、amavisd-new だけ rpm をアンインストールすれば後々の作業が非常に楽です。) SuSE9.1はYaST2でインストールできます。

  1. Amavisd-new インストール準備(SuSEは不要)

    RedHat9、Fedora Core2 の場合、RPM をインストールできるようにするため、/etc/yum.conf にサイトを設定します。 apt を使われている方は、こちらを参考にし設定してください。設定したら、yum を再起動します。

    [dag]
    name=Dag RPM Repository for Fedora Core
    baseurl=http://apt.sw.be/fedora/$releasever/en/$basearch/dag

    [dag]
    name=Dag RPM Repository for older Red Hat Linux
    baseurl=http://apt.sw.be/redhat/$releasever/en/$basearch/dag


  2. Amavisd-new インストール

    下記で、Amavisd-new をインストールします。関連モジュールもづらづらとインストールされます。

    # yum install amavisd-new


    SuSE の場合は RPM があるので、YaST でインストールするだけです。

    1. YaST コントロールセンタを起動し、「ソフトウェア」の「ソフトウェアのインストール/削除」を起動する。

    2. 「フィルタ」 を 「検索」 とし検索欄に 「amavisd-new」 と入力し 「検索」 ボタンを押す。

    3. 右側に該当するパッケージが出てくるので、その中の赤字のものとYaST関係にチェックマークを入れて 「了解」 を押しておしまい。

  3. Amavisd-new の設定を /etc/amavisd.conf で行う。 

    1. 自ドメインの変更

      $mydomain = 'aconus.com';   # 'example.com'から変更

    2. コマンドラインモードへの変更

      F-Protは、サーバ用とフリーで使える一般用がある。サーバ用はデーモンモードで動作するが一般用はコマンドラインモードでしか動作できないため、デフォルトのまま動作させると以下のようなエラーがでる。

      Dec 2 20:21:47 server amavis[5869]: (05869-01) FRISK F-Prot Daemon: Can't connect to INET socket 127.0.0.1:10201: Connection refused, retrying (2)
      Dec 2 20:21:47 server amavis[5869]: (05869-01) FRISK F-Prot Daemon: Can't connect to INET socket 127.0.0.1:10202: Connection refused, retrying (3)
      Dec 2 20:21:47 server amavis[5869]: (05869-01) FRISK F-Prot Daemon: Can't connect to INET socket 127.0.0.1:10203: Connection refused, retrying (4)
      Dec 2 20:21:47 server amavis[5869]: (05869-01) FRISK F-Prot Daemon: Can't connect to INET socket 127.0.0.1:10204: Connection refused, retrying (5)
      Dec 2 20:21:48 server amavis[5869]: (05869-01) FRISK F-Prot Daemon: Can't connect to INET socket 127.0.0.1:10200: Connection refused, retrying (6)
      Dec 2 20:21:48 server amavis[5869]: (05869-01) FRISK F-Prot Daemon: Can't connect to INET socket 127.0.0.1:10201: Connection refused, retrying (7)
      Dec 2 20:21:48 server amavis[5869]: (05869-01) FRISK F-Prot Daemon: Can't connect to INET socket 127.0.0.1:10202: Connection refused, retrying (8)
      Dec 2 20:21:48 server amavis[5869]: (05869-01) FRISK F-Prot Daemon: Can't connect to INET socket 127.0.0.1:10203: Connection refused, retrying (9)
      Dec 2 20:21:48 server amavis[5869]: (05869-01) FRISK F-Prot Daemon: Can't connect to INET socket 127.0.0.1:10204: Connection refused, retrying (10)
      Dec 2 20:21:54 server amavis[5869]: (05869-01) FRISK F-Prot Daemon av-scanner FAILED: Too many retries to talk to 127.0.0.1:10200 (Can't connect to INET socket 127.0.0.1:10200: Connection refused) at (eval 58) line 257.
      Dec 2 20:21:54 server amavis[5869]: (05869-01) WARN: all primary virus scanners failed, considering backups


      これは、Amavisd-newのデフォルトのamavisd.cinfでは、F-Protはprimaryスキャナとしてデーモンモードで設定されており、secondaryスキャナとしてコマンドラインモードで設定されているため、一般用のコマンドラインモードのスキャナにデーモンモードでつなぎに行こうとするので、上記のエラーが出る。 対策としては、以下の2点を変更すればよい。

      • amavisd.confのprimaryスキャナセクションにあるF-Protのデーモンモード用の設定をコメントアウトする。

      • amavisd.confのsecondaryスキャナセクションにあるF-Protのコマンドライン用の設定をprimaryスキャナセクションにコピーし、元のsecondaryスキャナセクションにあるF-Protのコマンドライン用の設定をコメントアウトする。
        これは、1項だけでも動くが、スキャンする毎にprimaryスキャナがないというエラーが出るための対策。

      両方の対策を実施した結果を下記に示す。

      @av_scanners = (

        (snip)

      # このブロックをコメントアウト
      ### http://www.f-prot.com/
      #['FRISK F-Prot Daemon',
      #  \&ask_daemon,
      #  ["GET {}/*?-dumb%20-archive%20-packed HTTP/1.0\r\n\r\n",
      #    ['127.0.0.1:10200','127.0.0.1:10201','127.0.0.1:10202',
      #     '127.0.0.1:10203','127.0.0.1:10204'] ],
      #  qr/(?i)<summary[^>]*>clean<\/summary>/,
      #  qr/(?i)<summary[^>]*>infected<\/summary>/,
      #  qr/(?i)<name>(.+)<\/name>/ ],

      # このブロックは下記からコピー
      ### http://www.f-prot.com/
      ['FRISK F-Prot Antivirus', ['f-prot','f-prot.sh'],
        '-dumb -archive -packed {}', [0,8], [3,6],
        qr/Infection: (.+)|\s+contains\s+(.+)$/ ],

        (snip)

      );

      @av_scanners_backup = (

        (snip)

      # このブロックをコメントアウト
      ### http://www.f-prot.com/   - backs up F-Prot Daemon
      #['FRISK F-Prot Antivirus', ['f-prot','f-prot.sh'],
      #  '-dumb -archive -packed {}', [0,8], [3,6],
      #  qr/Infection: (.+)|\s+contains\s+(.+)$/ ],

      (snip)

      );


■Postfix の設定

続けて、Postfix 関係の設定を行います。SuSE9.1 の場合は、全てAmavisd-new をインストールすれば設定されるので、設定は不要です。実際の設定もこちらの設定内容とは異なりますので、触らないでください。

  1. Postfix の /etc/postfix/main.cf に fowarding の設定を追加する。

    # postconf -e 'content_filter=smtp-amavis:[127.0.0.1]:10024'
    # postconf -e 'max_use=10'


  2. Postfix の /etc/postfix/master.cf に下記を追加する。最後に追加すると分かりやすいでしょう。なお、実際の設定時は、smtp-amavis と127.0.0.1:10025 の行頭に空白を入れないことと、オプション行の先頭と行内のパラメータの区切りは「Tab」を使用すること。空白ではエラーとなることがあるので注意が必要である。
    更に、下記に「y」のところはRedHat9 の場合はそのままで良いが、Fedora core2 はchroot していないので「n」とすること。

    smtp-amavis unix - - y - 2 smtp
        -o smtp_data_done_timeout=1200
        -o smtp_send_xforward_command=yes
        -o disable_dns_lookups=yes
    127.0.0.1:10025 inet n - 
    y - - smtpd
        -o content_filter=
        -o local_recipient_maps=
        -o relay_recipient_maps=
        -o smtpd_restriction_classes=
        -o smtpd_client_restrictions=
        -o smtpd_helo_restrictions=
        -o smtpd_sender_restrictions=
        -o smtpd_recipient_restrictions=permit_mynetworks
        -o mynetworks=127.0.0.0/8
        -o strict_rfc821_envelopes=yes
        -o smtpd_error_sleep_time=0
        -o smtpd_soft_error_limit=1001
        -o smtpd_hard_error_limit=1000
        -o receive_override_options=no_header_body_checks


  3. aliases(/etc/postfix/aliases) にウイルス/SPAM検出時のメール通知ユーザを追加する。設定後、newaliases すること。

    # vi /etc/postfix/aliases

    virusalert: root
    spamalert: root

    [Esc],[:],[w],[q]で保存。

    # newaliases


■動作の確認

まずは、Amavisd-new と Postfix を再起動します。netstat で 10024(Amavisd-new)、 10025(Postfix)があるか確認しておきましょう。

# /etc/init.d/amavisd start
# /etc/init.d/postfix restart
# netstat -an --tcp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address    Foreign Address State

    (snip)

tcp        0      0 127.0.0.1:10024  0.0.0.0:*       LISTEN
tcp        0      0 127.0.0.1:10025  0.0.0.0:*       LISTEN

    (snip)

tcp        0      0 0.0.0.0:465      0.0.0.0:*       LISTEN
tcp        0      0 0.0.0.0:25       0.0.0.0:*       LISTEN


正常な動作が確認できたら、テスト用のウイルスをeicarのWebサイトからダウンロードして、ウイルスが検出できるのか確認しましょう。4種類のテストウイルスがあるので、全てテストしてみましょう。うまく検出されれば、管理者宛及び送信者宛にウイルスアラートのメールが送信されるはずです。

■Amavisd-new をソースからインストールする方法

おやじの場合、Fedora Core2 では RPM から入れた Amavisd-new はうまく起動できませんでした。従って、ソースからインストールしました。この方法なら、他のデストリでも対応可能かと思います。 但し、関連モジュールがかなりあり、tar ボールを展開するとINSTALL というファイル内に示されているモジュールを各サイトやCPAN もしくはそのデストリの配布元から導入しなければなりません。
Amavisd-new をこちらからダウンロードします。おやじがダウンロードしたのは、amavisd-new-20030616-p10.tar.gz です。
tar ボールを展開すると、INSTALL というファイルと README.postfix というファイルがあるので、基本的にはこのとおり作業すれば問題ありませんが、若干そのままではうまくいかない部分もあるので、以下にインストール手順を示します。Postfix の設定等は前述のとおりです。

  1. Amavisd-newをダウンロードして展開する。

    # cd /usr/local/src
    # wget http://www.ijs.si/software/amavisd/amavisd-new-20030616-p10.tar.gz
    # tar zxfv amavisd-new-20030616-p10.tar.gz
    # cd amavisd-new-20030616


  2. まずは、Amavisd用のグループとユーザを作成する。

    # groupadd amavis
    # useradd -g amavis -s /sbin/nologin amavis


     
  3. Amavisd用のホームディレクトリを作成する。

    # mkdir /var/amavis
    # mkdir /var/amavis/tmp /var/amavis/var /var/amavis/db
    #
    chown -R amavis:amavis /var/amavis
    # chmod -R 750 /var/amavis


     
  4. Amavisdのインストール及び設定ファイルのコピーと作業用ディレクトリを作成する。

    # cp amavisd /usr/sbin/
    # chown root /usr/sbin/amavisd
    # chmod 755 /usr/sbin/amavisd

    # cp amavisd.conf /etc/
    # chown root /etc/amavisd.conf
    # chmod 644 /etc/amavisd.conf

    # mkdir /var/virusmails
    # chown amavis:amavis /var/virusmails
    # chmod 750 /var/virusmails


     
  5. Amavisd-new の起動スクリプトを設定する。

    # cp amavisd_init.sh /etc/init.d/amavisd
    # chmod 755 /etc/init.d/amavisd
    # chkconfig amavisd on


  6. Amavisd-new の /etc/amavisd.conf の設定を行う。 基本的には、下記の3箇所のみで問題ないはず。

    $mydomain = 'aconus.com';   # 'example.com'から変更
    $daemon_user = 'amavis'         # 'vscan'から変更
    $daemon_group = 'amavis'        # 'sweep'から変更