さくらのVPS+Docker+Freenomでメールサーバー構築(セキュリティ編)

Secure Mailserver on Docker

さくらのVPS+Docker+Freenomでメールサーバー構築 の続きで、少しばかりセキュリティ強化してみます

dockerで前回のサーバを起動していれば、停止しておきます

$ docker-compose down

imap,submissionを閉じる 

前回記事にて、imaps,smtpsの通信が確認出来ているので、imapとsubmissionを閉じます

docker-compose.yml (変更箇所のみ記載)

# - "143:143"  # IMAP4 (explicit TLS => STARTTLS)
# - "587:587"  # ESMTP (explicit TLS => STARTTLS)

mailserver.env 

今回利用しているdocker-mailserver では、Amabis、Spamassasin ,Postgey ,Fail2banなど、この他にも数々のセキュリティに関するパッケージが含まれており、デフォルトでは、これらが無効になっているため、有効にしてみます

これらに関する環境設定は、docker-compose.yml内でmailserver.envを読みに行くようになっているので、mailserver.envを編集します

29c29
< ONE_DIR=0
---
> ONE_DIR=1
82c82
< ENABLE_CLAMAV=0
---
> ENABLE_CLAMAV=1
99c99
< ENABLE_FAIL2BAN=0
---
> ENABLE_FAIL2BAN=1
126c126
< SSL_TYPE=
---
> SSL_TYPE=letsencrypt
234c234
< ENABLE_SPAMASSASSIN=0
---
> ENABLE_SPAMASSASSIN=1
338c338
< ENABLE_POSTGREY=0
---
> ENABLE_POSTGREY=1

今回は、spamassassin,clamav,fail2ban,postgrey,letsencryptを有効にします

注意事項として、fail2banを有効したら、docker-compose.ymlにcap_add項目を追記してねって記載されていますが、デフォルトのdocker-compose.ymlはすでに明記されているので、確認のみ

# If you enable Fail2Ban, don't forget to add the following lines to your `docker-compose.yml`:
#    cap_add:
#      - NET_ADMIN

docker-mailserver実行 

$ docker-compose up -d

送信確認 

このサーバから外部へメールを送信し、外部で受信したメールの詳細を見てみます

Authentication-Results: mx.google.com;
       dkim=pass header.i=@example.com header.s=mail header.b=C63+umjQ;
       spf=neutral (google.com: 11.22.33.44 is neither permitted nor denied by best guess record for domain of luca@example.com) smtp.mailfrom=luca@example.com
X-Virus-Scanned: Yes
Message-ID: <58537768-c77f-dd1e-86e5-974bbde830bd@example.com>
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=example.com; s=mail; t=1629964527; bh=pL1ua6FIYyAoJ8aaVxx8tGucm6c4TPztQ6rqOsE2j/w=; h=To:From:Subject; b=C63+umjQRGivlaHV5GV7c7HjHUmwXhgvvXS8C6GDcW487VdgX/9gpaa/Fw73dW3vu
	 QZZJbkIG79fQZbQQjrOeOkZYOE+DEsaFWQoQeHbCVevDLlrL5NbKtEqhiU/wuE68v8

DKIMもAmavis(X-Virus-Scanned)の動作も確認出来てますね

受信テスト 

外部から、このメールアドレス(luca@example.com)へ送信し、このサーバで受信したメールを確認

X-Virus-Scanned: Yes
X-Spam-Flag: NO
X-Spam-Score: 2.038
X-Spam-Level: **
X-Spam-Status: No, score=2.038 tagged_above=2 required=6.31
	tests=[DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1,
	DKIM_VALID_EF=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25,
	FREEMAIL_FROM=0.001, HTML_MESSAGE=0.001, PYZOR_CHECK=1.985,
	RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_PASS=-0.001]
	autolearn=no autolearn_force=no

AmavisによるウィルススキャンもSpamassasinによるスパムチェックも行われている事を確認

その他 

含まれているサービスは下記の通りになりますが、LDAP認証も出来るようなので、かなり完成度は高いですね

Postfix with SMTP or LDAP auth
Dovecot for SASL, IMAP (or POP3), with LDAP Auth, Sieve and quotas
Amavis
SpamAssassin supporting custom rules
ClamAV with automatic updates
OpenDKIM
OpenDMARC
Fail2ban
Fetchmail
Postscreen
Postgrey
LetsEncrypt and self-signed certificates
Setup script to easily configure and maintain your mailserver
Basic Sieve support using dovecot
SASLauthd with LDAP auth
Persistent data and state
CI/CD
Extension Delimiters (you+extension@example.com go to you@example.com)

ちなみに、今回試験したさくらのVPSではメモリが2GBだったので、足りるか心配でしたが、Docker内での消費メモリを調べてみたら、約1GBとなっておりました。
メール負荷がほとんどない状態でしたので、もしかすると、AmavisやSpamassasinが動き出すと、もっとメモリを消費するかもしれませんね。


See also