目的
amavisを導入して、ウイルス検知、スパム検知、フィルタ機能を一元管理することを目的とする。
amavisの構築は以下2パターンあるが、本書では前者について記載し、文末で後者との差分を記載する。
- amavisコンテナを独立して構築し、postfixコンテナと連携する
- docker-mailserverの中にバンドルされたamavisを使用して、コンテナの中でpostfixと連携する
9/20時点でウイルス検知、スパム検知できていない
環境:
- OS : Ubuntu
- docker-compose環境を構築済
- docker-mailserverを構築済
参考:
–
amavisのdocker-compose.yml作成
各ポート番号は以下のとおり
- 783:spamassassin
- 3310:clamav
- 10024:amavis(対Postfix受信、送信用)
version: '2'
services:
mariadb:
image: mariadb
restart: always
volumes:
- /mariadb/data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: murci
amavis:
image: aknaebel/amavis
links:
- mariadb
ports:
- "783:783"
- "3310:3310"
- "10024:10024"
volumes:
- ./amavis:/var/lib/amavis
- ./clamav:/var/lib/clamav
- ./spamassassin:/var/lib/spamassassin
- ./amavis/conf.d:/etc/amavis/conf.d
- ./clamav/conf:/etc/clamav
- ./spamassassin/conf:/etc/spamassassin
environment:
VIMBADMIN_PASSWORD: murci
DBHOST: mariadb
HOSTNAME: think01.murci.local
container_name: amavis
restart: always
dns:
- 8.8.8.8
postfixのdocker-compose.yml編集
amavisで検査したメールの受信口であるポート10025を開放する
ports:
- "25:25"
- "143:143"
- "465:465"
- "587:587"
- "9993:993"
- "10025:10025"
amavisの設定
/etc/amavis/conf.d/50-custom
@local_domains_acl = qw(.);
$notify_method = 'smtp:[192.168.9.10]:10025';
#$inet_socket_bind = '0.0.0.0'];
$inet_socket_bind = undef;
@inet_acl = qw( 127.0.0.1 [::1] 172.18.0.0/16 192.168.0.0/16 );
$forward_method = 'smtp:[127.0.0.1]:10024';
・・・1
$requeue_method = 'smtp:[192.168.9.7]:10025';
・・・2
$localhost_name = 'think01.murci.local';
1. postfixから転送されたメールを検査して、postfixへ返送するためのamavis側のIPポート。IPはコンテナ名でも可。
2. postfixへ返送するためのpostfix側のIPポート。IPはコンテナ名でも可。
/etc/amavis/conf.d/50-user
amavis起動時にエラー出るので以下コメントアウト
# We need to provide list of domains for which filtering need to be done
#@lookup_sql_dsn = (
# ['DBI:mysql:database=vimbadmin;host=mariadb;port=3306',
# 'vimbadmin',
# 'murci']);
/etc/amavis/conf.d/15-content_filter_mode
以下コメント解除して、検査を有効にする
$ grep bypass 15-content_filter_mode
@bypass_virus_checks_maps = (
\%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re);
@bypass_spam_checks_maps = (
\%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re);
spamassassinの設定
/etc/spamassassin/local.cf
件名にスパム識別文字を追加する
required_scoreでスパムレベルを設定する(1.0〜10.0、デフォルト5)。値が小さいほど厳格になり検知のハードルが低い
$ cat local.cf
report_safe 0
report_header 1
rewrite_header Subject [SPAM!!!]
required_score 1.0
postfixの設定
/etc/postfix/main.cf
フィルタ名とメールの転送先であるamavisのIP
ポートを指定する
$ grep content_filter ~/src/config/docker/docker-mailserver/config/main.cf
content_filter = smtp-amavis:[192.168.9.10]:10024
/etc/postfix/master.cf
postfix起動時に自動で以下追記される?
#
# Amavis configuration
#
smtp-amavis unix - - n - 2 smtp
-o syslog_name=postfix/$service_name
-o smtp_data_done_timeout=1200
-o smtp_send_xforward_command=yes
-o disable_dns_lookups=yes
-o max_use=20
-o smtp_tls_security_level=none
-o smtp_tls_wrappermode=no
127.0.0.1:10025 inet n - n - - smtpd
・・・1
-o syslog_name=postfix/smtpd-amavis
-o content_filter=smtp-amavis:[192.168.9.10]:10024
-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,no_milters
-o smtp_tls_security_level=none
1. amavisで検査されたメールの転送を受けるpostfix側のIPポート
コンテナを起動する
$ docker-compose up -d
clamavの定義ファイル更新
インターネットからウイルス検知用の定義ファイルをダウンロードする
amavisコンテナに入り、以下を実行する
# /etc/init.d/clamav-freshclam start
Starting ClamAV virus database updater: freshclam.
# freshclam
Wed Sep 20 15:33:25 2023 -> ClamAV update process started at Wed Sep 20 15:33:25 2023
ウイルス、スパム検知テスト
9/20時点で、EICARウイルスチェックおよびスパムメール検知は失敗。postixからamavisへのメール転送には成功しているが、amavisからpostixへの返送時にタイムアウトとなる
murci.localドメインからmurci.internalへメール送付時ログ
Eicar
「eicar.com」ファイルとして保存することでウィルスと認識させることが出来ます。
X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*
GTUBE
メール本文に貼り付けることでスパムメールとして認識させることが出来ます。
XJSC4JDBQADN1.NSBN32IDNENGTUBE-STANDARD-ANTI-UBE-TEST-EMAILC.34X
docker-mailserverの中にバンドルされたamavisを使用して、コンテナの中でpostfixと連携する場合の差分
amavisの設定
/etc/amavis/conf.d/50-custom
同じコンテナ内でamavisが起動しているため、$requeue_methodを127.0.0.1に変更
# cat 50-custom
@local_domains_acl = qw(.);
$notify_method = 'smtp:[127.0.0.1]:10025';
#$inet_socket_bind = '0.0.0.0'];
$inet_socket_bind = undef;
@inet_acl = qw( 127.0.0.1 [::1] 172.18.0.0/16 192.168.0.0/16 );
$forward_method = 'smtp:[127.0.0.1]:10024';
$requeue_method = 'smtp:[127.0.0.1]:10025';
$localhost_name = 'host01.murci.internal';
postfixの設定
/etc/postfix/main.cf
同じコンテナ内でamavisが起動しているため、127.0.0.1に変更
$ grep content_filter ~/src/config/docker/docker-mailserver/config/main.cf
content_filter = smtp-amavis:[127.0.0.1]:10024