Oracle Linux 6.2 に amavisd-new 2.6.4 をインストール

Oracle Linux 6.2 にメール・サーバーを構築する第4章。SMTPサーバー機能のないシンプルなアンチウイルス・ソフトをラップしてSMTPサービスを付加してくれるamavisd-newを使って、Postfixの配送プロセス中にウイルス・スキャンを行うようにする。ボクはアンチウイルス・ソフトに Avira AntiVir Personal (UNIX) を導入済みなのでそれを使用するが、アンチウイルス・ソフトが未導入の場合は 複眼中心: Scientific Linux 5.5 に Avira AntiVir Personal (UNIX) 3.1.3.5-0 をインストール または 複眼中心: Scientific Linux 6.1 に avast! Linux Home Edition 1.3.0 をインストール を参照してほしい。以下では Oracle Linux 6.2 を使用しているが、Red Hat Enterprise Linux (RHEL) / CentOS / Scientific Linux でも同様だろう。

メール配送フロー中にウイルス・スキャンするタイミングはいくつかある。シンプルに行うのであればProcmailを使って受信箱直前にスキャンする方法だが、これは送信メールがスキャンされない問題と、Procmailが使えないバーチャル・メールボックス宛てのメールがスキャンできない問題がある。咳が出るときにはマスクをするように、自分が万が一ウイルスに感染してしまった場合にウイルス・メールをばらまかないように、送信メールもウイルス・スキャンするべきだろう。

となると、MTAのPostfixの配送プロセス中にスキャンする必要があり、①smtpd_proxy_filterを使ってsmtpd→cleanupの間でスキャンする方法、②MDAにpipeを使ってqmgr→pipe→スキャナー→sendmail→pickupとスキャンする方法、③スキャナーをSMTPサーバーにしてqmgr→smtp→スキャナー→smtpdとスキャンする方法が考えられる。


メール・スキャナー 経路①


メール・スキャナー 経路②


メール・スキャナー 経路③

①は経路がシンプルであり、②③はループしてincomingキューに2度入る複雑さがあるが、①はincomingキューに入る前にスキャンを行うため、MUAからのSMTPセッションにスキャン時間が含まれてしまう、つまりユーザーからするとメールがなかなか送信できないという問題と、内部からsendmailコマンドで送信されるメールがスキャンさえない問題がある。②を使うと最大1分間、pickupのデキューを待つことになる。そのため、パフォーマンスとしては③が最善であるが、スキャナーがSMTPとして動作しないといけないという制約がある。そこでamavisd-newの登場だ

それではamavisd-newをインストールしよう。amavisd-newは Sceintific Linux 6 の公式リポジトリには含まれていないので、EPELRepoforge (RPMforge) からインストール必要があり、ボクはEPELのほうを使用した。EPELとRepoforgeで設定ファイルの内容が異なるので、Repoforgeを使う方は以下の設定を適宜読みかえてほしい。これらをリポジトリに追加する方法は 複眼中心: 国内 Oracle Linux 6 サーバーのためのYum設定 を参照してほしい。

amavisd-newはAntiVirなどのアンチウイルス・ソフトをラップするだけでなく、合わせて Apache SpamAssassin を使ってスパム・フィルターをすることも可能だが、これをするとSpamAssassinの学習がamavisd-newを実行するamavisユーザーですべて行われてしまう。すると、学習した情報がメール・サーバーで単一になってしまうので、あるユーザーが某メール・マガジンをスパムとして処理してしまうと、同じメール・サーバーを使用しているすべてのユーザーで某メール・マガジンがスパムとして処理されてしまう可能性がある。そのため、今回はamavisd-newでスパム・フィルターを行わず、SpamAssassinはProcmailで行うようにした。

$mydomainを自分のドメイン名に変更する。

$virus_adminにメール・アドレスを設定しておくと、そのメール・アドレス宛にウイルスを検出したときに警告メールを送ってくれる。正しく動いているかのデバッグ用に、まずは設定しておいたほうが良いだろう。警告メールの送信者は postmaster@$hostname になるので、必要あれば$mailfrom_notify_adminを変更しよう。

@av_scannersにアンチウイルス・ソフトの設定を行う。デフォルトでは先頭に記述されている、依存性解決のためにインストールされたClamAV-clamdが使われてしまうので、これをコメントアウトする。

@av_scannersにAntiVirの設定はすでにされているように見えるが、これはバージョン2用のもので、バージョン3では動作しない。そのため、すでに書かれているものをコメントアウトし、最新の amavisd-new 2.7.0 にはバージョン3のものがあるので、そちらから設定をコピペしてくる。

@av_scannersに指定したものはプライマリ・スキャナーとなるが、これが何らかの障害で使えないときのために@av_scanners_backupにセカンダリ・スキャナーを指定できる。依存性解決のためにclamavもインストールされているので、せっかくなのでこれをセカンダリ・スキャナーとして使うことにする。設定はすでにされているので何もしなくてよい。

スキャナーが両方とも何らかの障害で使えないときには、メール配信を停止するのではなく、スキャンせずにそのまま送るようにするには以下のコメントを外す。

ここまでで、一度、動作確認のためにamavisd-newを起動してみよう。/var/log/maillog に以下のように表示されるはずだ。

No decorder for と表示された拡張子には未対応の圧縮形式なので、必要であればインストールしよう。また、primary av scannersecondary av scanner が適切に設定されているかも確認しよう。

amavisd-newは適切に動作するようになったので、Postfixのqmgrがamavisd-newに送るように /etc/postfix/main.cf に設定を追加する。

amavisd-newをPostfixの配送プロセスに加えよう。設定方法は公式マニュアルの Integrating amavisd-new in Postfix のものをそのまま追加した。

Postfixをリロードしたら、試しにeicarのテスト用ウイルスを送信してみよう。宛先にはメールが届かず、$virus_adminに警告メールが届けば正しく動作している。

/var/log/maillog には以下のように出力され、Eiter-Test-Signatureに感染しているためブロックされたことが分かる。

$virus_adminに届いたメールはこんな感じ。

SELinuxが有効だとamavisd-newがアンチウイルス・ソフトを実行できない。always-cleanのコメントを外しているとメール自体は届いてしまって気づきにくいので、必ず /var/log/maillog を確認しよう。

そこで一部のセキュリティ・コンテキストを変更し、以下のようなTEファイルを作成した。独自のTEファイルを作成する場合は 複眼中心: Scientific Linux 6 でのSELinux管理コマンドまとめ を参照してほしい。

コメントを残す