CentOS4.x Postfix-2.1 clamd-0.90 clamav-0.90 amavisd-new-2.5

Postfix+ClamAV+Amavisd-newによるウイルス対策を行います

前提条件

Postfixの導入Postfix+PostfixAdminによるバーチャルホスト運用(PostgreSQL編)でメールの送受信環境は整っているものとします

ここでは、Postfix+PostfixAdminによるバーチャルホスト運用(PostgreSQL編)で構築された環境に対して行う事を前提にしています

Recommend Book

Postfixを使ったメールサーバー構築に役立つ知識やノウハウを養えます

各ソフトウェアの構成

Postfix,ClamAV,amavisの構成は以下の様になります

ウイルス付きメールはvirusalert@example.comに転送します

また、送信者に対し、警告メールを送付します

作業手順

ClamAVの導入

インストール

yumにてインストールします。

rootにて以下を実行します。

# yum install clamd
依存関係で clamav.i386,clamav-db.i386 もインストールされます

設定

設定ファイルは/etc/clamd.confです

パスワード付きZIPファイルをウイルスアラートとしない

ArchiveBlockEncrypted というパラメータを指定すると、パスワード付きZIPファイルを無条件にウイルス、VIRUS(Encrypted.Zip) というアラートが送られてきます

CentOSではデフォルトで有効となっていますので、この機能をOFFにするには、コメント化します

#ArchiveBlockEncrypted

clamscanを使ってみる

# clamscan ファイル名[or ディレクトリ名]

で、指定したファイル(ディレクトリ下のファイル)のウイルスチェックを行います

使用例

# clamscan aaa.txt
aaa.txt: OK          <- ウイルスがいた場合、FOUNDとなる

----------- SCAN SUMMARY -----------
Known viruses: 36934
Engine version: 0.86.2
Scanned directories: 0
Scanned files: 1
Infected files: 0
Data scanned: 0.00 MB
Time: 2.971 sec (0 m 2 s)

Clamdの設定

/etc/clamd.confに以下の設定を行う

LocalSocket /var/run/clamav/clamd.sock

Clamdの自動起動設定

マシン起動時(ランレベル2,3,4,5)にclamdが起動する様にします

rootにて以下を実行します

# chkconfig --level 2345 clamd on

Clamdの起動

rootにて以下を実行します

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

ウイルスデータベースの更新

freshclamコマンドで、ウイルスデータベースを更新します

freshclamの設定ファイルは/etc/freshclam.confです

rootにて以下を実行します。

# /usr/bin/freshclam

clamav-dbパッケージ導入により、/etc/cron.daily/freshclamファイルが配置されているので、毎日決まった時間にウイルスデータベースの更新が自動で行われます

参考:/etc/cron.daily/freshclamの中身

# cat /etc/cron.daily/freshclam
#!/bin/sh

### A simple update script for the clamav virus database.
### This could as well be replaced by a SysV script.

### fix log file if needed
LOG_FILE="/var/log/clamav/freshclam.log"
if [ ! -f "$LOG_FILE" ]; then
    touch "$LOG_FILE"
    chmod 644 "$LOG_FILE"
    chown clamav.clamav "$LOG_FILE"
fi

/usr/bin/freshclam \
    --quiet \
    --datadir="/var/clamav" \
    --log="$LOG_FILE" \
    --log-verbose \
    --daemon-notify="/etc/clamd.conf"

amavisd-newの導入

インストール

yumにてインストールします。

rootにて以下を実行します。

# yum install amavisd-new

依存関係で たくさんのパッケージが同時にインストールされます

perl-Archive-Tarパッケージのインストール

amavisd-newパッケージの不備なのか、perl-Archive-Tarがないとamavisは動作しないので導入します

yumにてインストールします

rootにて以下を実行します

# yum install perl-Archive-Tar

設定

amavisdの設定を行います

設定ファイルは、/etc/amavisd.confです

/etc/amavisd.confに以下を設定します

$mydomain = 'example.com';   # a convenient default for other settings

$final_virus_destiny      = D_REJECT;    <-ウイルスメールと判定したメールを送信元に送り返す
                                           送り返さない場合は、D_DISCARD

$virus_admin               = "virusalert\@$mydomain";  # notifications recip.

$final_spam_destiny       = D_PASS;          <- SPAMと判定したメールも通過させる
$sa_spam_subject_tag      = '***SPAM*** ';   <- SPAMと判定したメールの件名に追加させる文字列

また、同ファイルの「@av_scanners = (」内に、以下を追記します

### http://www.clamav.net/
['ClamAV-clamd',
  \&ask_daemon, ["CONTSCAN {}\n", "/var/run/clamav/clamd.sock"],
  qr/\bOK$/, qr/\bFOUND$/,
  qr/^.*?: (?!Infected Archive)(.*) FOUND$/ ],

元々コメント化されているもののコメントを外します

また、clamdの設定時に指定したものに合わせる為、「/var/run/clamav/clamd.sock」と指定します

amavisdの自動起動設定

マシン起動時(ランレベル2,3,4,5)にamavisdが起動する様にします

rootにて以下を実行します

# chkconfig --level 2345 amavisd on

amavisdの起動

rootにて以下を実行します

# /etc/rc.d/init.d/amavisd start

動作確認

TELNETで動作確認する

10024ポートに接続できたらOKです

# telnet localhost 10024
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
220 [127.0.0.1] ESMTP amavisd-new service ready
quit
221 2.0.0 [127.0.0.1] amavisd-new closing transmission channel
Connection closed by foreign host.

Postfixの設定


/etc/postfix/main.cfの変更

/etc/postfix/main.cfに以下を設定します

content_filter=smtp-amavis:[127.0.0.1]:10024

/etc/postfix/master.cfの変更

/etc/postfix/master.cfの最後に以下を設定します

smtp-amavis unix -    -    n    -    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    -    n    -    -  smtpd
    -o content_filter=
    -o local_recipient_maps=
    -o relay_recipient_maps=
    -o smtpd_restriction_classes=
    -o smtpd_delay_reject=no
    -o smtpd_client_restrictions=permit_mynetworks,reject
    -o smtpd_helo_restrictions=
    -o smtpd_sender_restrictions=
    -o smtpd_recipient_restrictions=permit_mynetworks,reject
    -o mynetworks_style=host
    -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 smtpd_client_connection_count_limit=0
    -o smtpd_client_connection_rate_limit=0
    -o receive_override_options=no_header_body_checks,no_unknown_recipient_checks

Postfixの再起動

Postfixを再起動します

rootにて以下を実行します

# /etc/rc.d/init.d/postfix restart

動作確認

TELNETで動作確認する

10025ポートに接続できたらOKです

# telnet localhost 10025
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
220 saturday.d-agent.local ESMTP Postfix
quit
221 Bye
Connection closed by foreign host.

メールアカウントの登録

ウイルスメールを発見した時に転送するアカウントであるvirusalert@example.comを登録する

ちなみに、virusalertアカウントの定義は、/etc/amavisd.confで

$virus_admin               = "virusalert\@$mydomain";  # notifications recip.

として最初から定義されています

任意のアドレスにしたい場合は、ここを変更すればよいです

余談

/etc/aliasesに
virusalert:     root

で登録されているから不要かもしれないけど・・・

動作テスト

通常メールの送信

受信したメールのヘッダに

X-Virus-Scanned: amavisd-new at example.com

が付加されていればOkです。

ウイルス付きメールの送信

The Anti-Virus test fileより、ウイルスのサンプルを入手し、適当なメーラから送信してみる

結果、virusalert@example.comにウイルスメールが届き、送信先にはメールは届かない

また、送信者に対しアナウンスのメールが届きます

TELNETによるウイルス付きメールの動作確認

TELNETで、10024ポートに接続し、ウイルス付きメールを送信してみる

#telnet localhost 10024
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
220 [127.0.0.1] ESMTP amavisd-new service ready
MAIL FROM:<foo@example.com>
250 2.1.0 Sender foo@example.com OK
RCPT TO:<bar@example.com>
250 2.1.5 Recipient bar@example.com OK
DATA
354 End data with <CR><LF>.<CR><LF>
Subject: test

X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*
.
550 5.7.1 Message content rejected, id=03845-09 - VIRUS: Eicar-Test-Signature
quit
221 2.0.0 [127.0.0.1] amavisd-new closing transmission channel
Connection closed by foreign host.

として、virusalert@example.com にメールが届いていたらOK

SPAMメールの送信

本文に、

XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X

と記載したメールを送信してみる

または、TELNETにて以下の様にメールを送ってみる

$ telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 saturday.example.com ESMTP Postfix
EHLO localhost
250-saturday.example.com
250-PIPELINING
250-SIZE 10240000
250-ETRN
250-AUTH PLAIN LOGIN
250-AUTH=PLAIN LOGIN
250 8BITMIME
MAIL FROM:<postmaster@example.com>
250 Ok
RCPT TO:<foo@example.com>
250 Ok
DATA
354 End data with <CR><LF>.<CR><LF>

XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X
.
250 Ok: queued as 45AEE51419E
quit
221 Bye
Connection closed by foreign host.
$

受信したメールの件名(subject)に

***SPAM***

と追加されていたらOK

関連ページ