PostfixにAmavis-new + Spamassassin + ClamAVをインストールする

 

UbuntuサーバーにメールソフトPostfixをすでに実装しているという前提で、スパム・ウィルス対策として、Amavis-new + Spamassassin + ClamAV のセットを組み込みます。

Spamassassin はスパムフィルタソフトウェア、ClamAV はアンチウィルスソフトウェアです。Postfix の smtpd と Spamassassin、ClamAV 間での受け渡しを行うソフトウェアとして、Amavis-new を採用します。

対象とした Linux は、Ubuntu 14.04 LTS です。
一からの設定は確認していませんが、Ubuntu 18.04.2 LTS でも機能しています。

 

I. ソフトウェアインストール

まず、amavisd-new、spamassassin、clamav-daemon(ClamAVのデーモン)をインストールします。

主要なディストロではパッケージが用意されているので、Debian / Ubuntu の場合は


# apt-get install amavisd-new spamassassin clamav-daemon

で、Amavis-new、Spamassassin、ClamAVのデーモンをインストールします。

スパム検出力を改善させるため、以下の追加パッケージもインストールします。


# apt-get install libnet-dns-perl libmail-spf-perl pyzor razor

添付アーカイブファイルのスキャンを改善させるために、以下の追加パッケージもインストールします。


# apt-get install arj bzip2 cabextract cpio file gzip lhasa nomarch pax rar unrar unzip zip zoo

 

II. ClamAVの設定

今回のケースでは clamav-daemon はすでに起動していましたが、必要な場合は clamav-daemon を起動します。


# /etc/init.d/clamav-daemon start

freshclam の設定ファイル /etc/clamav/freshclam.conf を確認すると、


Checks 24

つまり、シグネチャを1日24回更新する設定になっていました。

変更せず、このままにしておきました。

ClamAV がスキャンファイルにアクセスできるようにするために、clamav ユーザを amavis グループに追加し、amavis ユーザを clamav グループに追加します。


# adduser clamav amavis
# adduser amavis clamav

 

III. Spamassassinの設定

Amavis は Spamassassin ライブラリを利用する(つまり、Amavis は Spamassassin のデーモンになる)ので、Spamassassin の設定は必要はありませんし、Spamassassin の起動さえ必要ありません。

以下のコマンドを実行して、razor と pyzor を利用できるようにします。


# su - amavis -s /bin/bash
# razor-admin -create
# razor-admin -register
# pyzor discover

/var/lib/amavis ディレクトリに .razor .pyzor の2ファイルが作成されました。

razor や pyzor の設定は必要ありません。

 

IV. Amavis-new の設定

Amavis-new の設定ファイルは、Cent OS などでは、/etc/amavisd.conf ファイルになりますが、Debian / Ubuntu では、/etc/amavis/conf.d ディレクトリ下に分散しています。

そのうちの、/etc/amavis/conf.d/15-content_filter_mode ファイルはデフォルトで、Amavis-new のアンチウィルスチェックとアンチスパムチェックが無効になっています。


# Default antivirus checking mode
# Please note, that anti-virus checking is DISABLED by
# default.
# If You wish to enable it, please uncomment the following lines:

#@bypass_virus_checks_maps = (
#   \%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re);

# Default SPAM checking mode
# Please note, that anti-spam checking is DISABLED by
# default.
# If You wish to enable it, please uncomment the following lines:

#@bypass_spam_checks_maps = (
#   \%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re);

ClamAV によるアンチウィルスチェックと SpamAssassin によるアンチスパムチェックを有効にするために、このファイルの各2行、計4行をアンコメントします。

ただし、50-user 以外のファイルは Amavis-new の更新に伴って新たなファイルに上書きされるので、50-user ファイル(ユーザ設定ファイル)に追加記載することにします。

50-user ファイルはこのディレクトリの他の設定ファイルを上書きします。


### 15-content_filter_mode ファイルの修正
### アンチウィルスチェックを有効にするために以下2行を追加
@bypass_virus_checks_maps = (
   \%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re);

### 15-content_filter_mode ファイルの修正
### アンチスパムチェックを有効にするために以下2行を追加
@bypass_spam_checks_maps = (
   \%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re);

Amavis-new を再起動します。

# /etc/init.d/amavis restart

 

V. Postfix との統合

Postfix と Amavis-new 間のソケットポートは、デフォルトでは、Postfix から Amavis-new に10024ポートでメールを配送し、ClamAV と Spamassassin でチェックを終えた後、Amavis-new から Postfix に10025ポートで返送されます。

Postfix の設定ファイル /etc/postfix/main.cf に、Postfix から Amavis-new へのメール配送ソケットのIPアドレスとポートを指定します。


### Amavis Postfix integration
### content_filter 設定変数の行を追加。Postfix からAmavis-new への配送IPアドレス・ポート。
content_filter = smtp-amavis:[127.0.0.1]:10024

Postfix のマルチインスタンス化時など必要な場合は、$inet_socket_port、$notify_method、$forward_method を指定します。

次に、master の設定ファイルになる /etc/postfix/master.cf の最後に、以下の内容を追加します。


# Amavis Postfix integration
# smtp-amavis と 127.0.0.1:10025 の行を追加。
smtp-amavis     unix    -       -       -       -       2       smtp
        -o smtp_data_done_timeout=1200
        -o smtp_send_xforward_command=yes
        -o disable_dns_lookups=yes
        -o max_use=20

127.0.0.1:10025 inet    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 smtpd_data_restrictions=reject_unauth_pipelining
        -o smtpd_end_of_data_restrictions=
        -o mynetworks=127.0.0.0/8
        -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

また、スパムを報告するメッセージがスパムに分類されないために、pickup の行


#628       inet  n       -       -       -       -       qmqpd
pickup    unix  n       -       -       60      1       pickup
cleanup   unix  n       -       -       -       0       cleanup
qmgr      unix  n       -       n       300     1       qmgr

に以下の2行


         -o content_filter=
         -o receive_override_options=no_header_body_checks

を追加します。


#628       inet  n       -       -       -       -       qmqpd
pickup    unix  n       -       -       60      1       pickup
### Amavis Postfix integration
### スパムを報告するメッセージがスパムに分類されないために、pickup の行に以下の2行を追加。
         -o content_filter=
         -o receive_override_options=no_header_body_checks
cleanup   unix  n       -       -       -       0       cleanup
qmgr      unix  n       -       n       300     1       qmgr

Postfixを再起動(または、再ロード)して、設定したコンテンツフィルターを有効にします。


/etc/init.d/postfix reload