今回は、自ドメイン用のメールサーバの構築を進めていきます。
今回のコンポーネント
今回はコンポーネントが山盛りですね。
コンポーネント | 利用しているもの |
---|---|
MTA | Postfix 3.4.13 |
POP/IMAPサーバ | Dovecot 2.3.7 |
メールボックス管理 | PostfixAdmin 3.2.1 |
SSL証明書 | Let's Encrypt |
DNS | Bind 9.16.1 |
データベース | MariaDB 10.3.25 |
DKIM | OpenDKIM 2.11.0 |
DMARC | OpenDMARC 1.3.2 |
グレーリスト管理 | postgrey 1.36 |
Log Report | Pflogsumm 1.1.5 |
SPAM管理 |
SpamAssassin 3.4.4 |
ウィルススキャン (当初導入するも、メモリ不足で無効化) |
Amavis 2.11.0 ClamAV 0.103.2 |
当初、ウィルススキャンとしてAmavis/ClamAVを導入しました。
メモリが2GBでは足りなかったため最終的には無効化していますが、導入手順はメモとして記載しています。
今回は、メールサーバ構築に関して理解しながら進めるために、段階的にステップを踏みながら構築を進めていきます。
- Postfixサーバの基本セットアップ
- TLS暗号化とDovecot IMAP/POP3サーバセットアップ
- PostfixAdminを使ってバーチャルメールボックス作成
- 信頼度向上のためのSPF/DKIMレコード作成
- ドメイン信頼性向上のためのDMARCセットアップ
- Postfixでのスパム受信ブロック
1ページでの記載には大きすぎたので記事を分割します
今回の記事では、OSリアルユーザを対象とした基本セットアップであるSTEP1とSTEP2を記載します。
STEP1.Postfixサーバの基本セットアップ
Postfixインストール
パッケージ(apt)を利用してPostfixのインストールを行います
# apt install postfix
公開ドメイン用のメールサーバとなるためInternet Siteを選択
セットアップするドメイン名を記載します
この項目で入力した値は、/etc/mailnameに記載されます
これでインストールは完了です
Postfixインストール確認
Postfixバージョン確認
# postconf mail_version
mail_version = 3.4.13
動作確認
TCP 25番ポートをListenしていることを確認
# ss -lnpt | grep master
LISTEN 0 100 0.0.0.0:25 0.0.0.0:* users:(("master",pid=10089,fd=13))
LISTEN 0 100 [::]:25 [::]:* users:(("master",pid=10089,fd=14))
テストメール送信
hoge@gmail.com向けにテストメールを送信します
# echo "test email" | sendmail hoge@gmail.com
GmailではSPAMに分類されるので、迷惑メールの中からテストメールを確認します
送信元アドレスが利用予定のドメインになっていることを確認します
※送信元ドメインはmyoriginパラメータになります。myhostnameパラメータではありません
スプールディレクトリ確認
メールスプールディレクトリが/var/mailになっていることを確認
# postconf mail_spool_directory
mail_spool_directory = /var/mail
パラメータ確認
# postconf
Postfixの全パラメータが確認できます
コマンドを使ったパラメータ変更方法
例として、コマンドでメッセージサイズの変更する方法を記載します
項目 | コマンド例 |
---|---|
事前確認 |
messege_size_limitの値を確認
|
変更 |
messege_size_limitの値を102400000に変更
|
事後確認 |
messege_size_limitの値を確認
|
設定反映 |
postfixの再起動とステータス確認
|
基本設定変更
ごめんなさい、コマンドで一個ずつパラメータ変更するのはつらいので、設定ファイル/etc/postfix/main.cfを修正します
# vim /etc/postfix/main.cf
## ホスト名 (MXレコードと同一のホスト名をお勧めします) ## サーバ接続時のバナー変更(アタッカーに不必要な情報を提示しない) |
Firewall設定変更
Postfix(TCP25番)を許可
# ufw allow Postfix
設定変更確認
# ufw status verbose
TCP25番がアプリケーションポリシー(Postfix)で追加されたことを確認します
25/tcp (Postfix) ALLOW IN Anywhere
25/tcp (Postfix (v6)) ALLOW IN Anywhere (v6)
これで、自サーバからのメール送信、自サーバでのメール受信するための最低限の設定ができました
STEP2.TLS暗号化とDovecot IMAP/POP3サーバセットアップ
続いて、外部からPOP/IMAPでメールを取得できるよう設定を行います
PostfixにてSubmission/SMTPSの有効化
Postfix設定編集
設定ファイル/etc/postfix/master.cfを編集
# vim /etc/postfix/master.cf
Submission/SMTPSに関する記述を追加
submission inet n - y - - smtpd -o syslog_name=postfix/submission -o smtpd_tls_security_level=encrypt -o smtpd_tls_wrappermode=no -o smtpd_sasl_auth_enable=yes -o smtpd_relay_restrictions=permit_sasl_authenticated,reject -o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject -o smtpd_sasl_type=dovecot -o smtpd_sasl_path=private/auth smtps inet n - y - - smtpd -o syslog_name=postfix/smtps -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes -o smtpd_relay_restrictions=permit_sasl_authenticated,reject -o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject -o smtpd_sasl_type=dovecot -o smtpd_sasl_path=private/auth |
続いて設定ファイル/etc/postfix/main.cfを編集
# vim /etc/postfix/main.cf
# TLS parameters smtp_tls_cert_file=/etc/letsencrypt/live/your-domain.com/fullchain.pem smtp_tls_CApath=/etc/ssl/certs |
送信/受信共にTLSでの暗号化は強制していません。smtp_tls_security_level = mayやsmtpd_tls_security_level = mayというのは日和見TLSの設定です。
相手先がサポートしていればTLSが使われます。平文での送信が受け入れられるため、TLSプロトコルとしてTLSv1.1は許容しています。
Dovecotインストール
パッケージ(apt)を使って、Dovecot IMAPサーバ、POP3サーバをインストールします
# apt install dovecot-core dovecot-imapd dovecot-pop3d
Dovecotインストール確認
dovecotコマンドを打ち、インストールされたdovecotのバージョンを確認します
# dovecot --version
2.3.7.2 (3c910f64b)
IMAP/POP3の有効化
dovecotの設定ファイルは/etc/dovecot/dovecot.confになります
/etc/dovecot/dovecot.conf抜粋 # Enable installed protocols |
aptを利用してインストールした際は標準で/usr/share/dovecot/protocols.d/*.protcolを読み込むため、設定ファイルが配置されていることを確認します
# ls /usr/share/dovecot/protocols.d/
imapd.protocol pop3d.protocol
メールボックスの配置
まずPostfixでの設定を確認し、/var/mailがメールスプールディレクトリであることを確認します
# postconf mail_spool_directory
mail_spool_directory = /var/mail
続いて、dovecotでの設定を確認します。メールボックスに関する設定は/etc/dovecot/conf.d/10-mail.confに記載があり、Postfixと同等であることを確認します
/etc/dovecot/conf.d/10-mail.conf抜粋 mail_location = mbox:~/mail:INBOX=/var/mail/%u |
Dovecotを利用してメッセージストアにメールを配送
パッケージ(apt)を利用し、Dovecot LMTP Serverをインストール
# apt install dovecot-lmtpd
lmtpdの設定ファイルが追加されたことを確認
# ls /usr/share/dovecot/protocols.d/
imapd.protocol lmtpd.protocol pop3d.protocol
Dovecot設定変更
# vim /etc/dovecot/conf.d/10-master.conf
UNIX LisntenerをPostfixから接続可能な/var/spool/postfix以下にpostfixユーザ権限で作成
ltmpに関する記述を変更 service lmtp { |
Postfix設定変更
main.cfを編集します
# vim /etc/postfix/main.cf
末尾に記述を追加します
ltmpに関する記述を末尾に追加 mailbox_transport = lmtp:unix:private/dovecot-lmtp |
1行目はPostfixが受け取ったメールをDovecot LMTP Serverを使ってローカルメッセージストアに配送
2行目はDovecot-LMTPがサポートしていないため、SMTPUTF8を無効化
認証関連設定
aptでインストールした際のDovecotの認証関連設定は/etc/dovecot/conf.d/10-auth.confに記載されます
設定ファイル修正
# vim /etc/dovecot/conf.d/10-auth.conf
2か所修正を行います
① SSL/TLS暗号化されていない際のプレーンテキスト認証を無効化
下記行をコメントアウト
#disable_plaintext_auth = yes disable_plaintext_auth = yes |
② 認証ユーザ名フォーマット変更
下記行を変更
コメントを外し、値を%nに変更します
#auth_username_format = %Lu auth_username_format = %n |
デフォルトではDovecotはメール配送先ユーザを探す際に、フルメールアドレス(username@domain.name)を利用します。
STEP2の時点ではOSユーザをメールボックスユーザとして利用しています。
Dovecotはフルドメインフォーマット(username@domain.name)を利用しているためメールボックスユーザを見つけることができません。
そのため、auth_username_format = %nとすることによりドメイン部分を落とすことにより、Dovecotがメールボックスユーザ(OSユーザ)を見つけることができるようにします。
この設定では、ログイン時にはフルメールアドレスを利用することが可能です。
SSL/TLS暗号化設定
SSL/TLS関連の設定は/etc/dovecot/conf.d/10-ssl.confに記載します
# vim /etc/dovecot/conf.d/10-ssl.conf
① SSL/TLS暗号化を必須に変更
下記行を変更
#ssl = yes ssl = required |
②サーバ指定の暗号化スイートを優先するよう変更
下記行を修正
# Prefer the server's order of ciphers over client's. #ssl_prefer_server_ciphers = no ssl_prefer_server_ciphers = yes |
③ TLS1.2以上を利用するよう設定
# Minimum SSL protocol version to use. Potentially recognized values are SSLv3, # TLSv1, TLSv1.1, and TLSv1.2, depending on the OpenSSL version used. #ssl_min_protocol = TLSv1 ssl_min_protocol = TLSv1.2 |
DH鍵交換に使用するパラメータファイル作成
DH鍵交換に使用するパラメータファイル/etc/dovecot/dh.pemを作成します。かなりの時間を要しますので気長に待ちます。
# openssl dhparam -out /etc/dovecot/dh.pem 4096
SASL認証設定
設定ファイル/etc/dovecot/conf.d/10-master.confを修正します
# vim /etc/dovecot/conf.d/10-master.conf
service authセクションを修正し、PostfixがDovecot認証サーバを参照するよう設定します。
service auth { unix_listener /var/spool/postfix/private/auth { mode = 0660 user = postfix group = postfix } } |
送受信フォルダの自動作成
設定ファイル/etc/dovecot/conf.d/15-mailboxes.confを修正します
# vim /etc/dovecot/conf.d/15-mailboxes.conf
ゴミ箱(Trash)フォルダを自動生成します
mailbox Trash { auto = create special_use = \Trash } } |
Postfix/Dovecot 再起動
# systemctl restart postfix dovecot
稼働確認
dovecotがTCP 110(pop3), 143(imap), 993(imaps), 995(pop3s)をLISTENしている事を確認します
# lsof -i -P | grep dovecot
dovecot 40750 root 21u IPv4 283624 0t0 TCP *:110 (LISTEN)
dovecot 40750 root 22u IPv6 283625 0t0 TCP *:110 (LISTEN)
dovecot 40750 root 23u IPv4 283626 0t0 TCP *:995 (LISTEN)
dovecot 40750 root 24u IPv6 283627 0t0 TCP *:995 (LISTEN)
dovecot 40750 root 40u IPv4 284683 0t0 TCP *:143 (LISTEN)
dovecot 40750 root 41u IPv6 284684 0t0 TCP *:143 (LISTEN)
dovecot 40750 root 42u IPv4 284685 0t0 TCP *:993 (LISTEN)
dovecot 40750 root 43u IPv6 284686 0t0 TCP *:993 (LISTEN)
Firewall設定変更
PostfixにてSMTPS/Submissionを、DovecotにてIMAP/POP3/IMAPS/POP3Sへの通信を有効化
# ufw allow "Postfix SMTPS"
# ufw allow "Postfix Submission"
# ufw allow "Dovecot IMAP"
# ufw allow "Dovecot POP3"
# ufw allow "Dovecot Secure IMAP"
# ufw allow "Dovecot Secure POP3"
ここまでで、メールの送受信のTLS化、外部からPOP3/IMAPによるメール受信が可能になりました。
確認
外部からPOP3S/IMAPSクライアントでメールを受信できるか確認します
項目 | パラメータ |
---|---|
接続先 | サーバホスト名(例:mx.your-domain.com) |
User | フルメールアドレス(例:user@your-domain.com) |
Password | メールサーバ上のOSリアルユーザ(例:user)のパスワード |
Protocol | pop3s / imaps |
続いて、外部からSMTP認証を使ってメール送信ができるか確認します
項目 | パラメータ |
---|---|
接続先 | サーバホスト名(例:mx.your-domain.com) |
User | フルメールアドレス(例:user@your-domain.com) |
Password | メールサーバ上のOSリアルユーザ(例:user)のパスワード |
Protocol | smtps / submission |
記事が長くなってきたので、記事を分割します
次回は、バーチャルメールボックスと管理用GUIのPostfixAdminのセットアップを進めます