メインコンテンツに移動

前回は、Drupal9の初期セットアップを行いました。

今回は、自ドメイン用のメールサーバの構築を進めていきます。

 

今回のコンポーネント

今回はコンポーネントが山盛りですね。

コンポーネント 利用しているもの
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
spamass-milter 0.4.0
postfix-pcre 3.4.13

ウィルススキャン
(当初導入するも、メモリ不足で無効化)
Amavis 2.11.0
ClamAV 0.103.2

当初、ウィルススキャンとしてAmavis/ClamAVを導入しました。

メモリが2GBでは足りなかったため最終的には無効化していますが、導入手順はメモとして記載しています。
 

今回は、メールサーバ構築に関して理解しながら進めるために、段階的にステップを踏みながら構築を進めていきます。

  1. Postfixサーバの基本セットアップ
  2. TLS暗号化とDovecot IMAP/POP3サーバセットアップ
  3. PostfixAdminを使ってバーチャルメールボックス作成
  4. 信頼度向上のためのSPF/DKIMレコード作成
  5. ドメイン信頼性向上のためのDMARCセットアップ
  6. Postfixでのスパム受信ブロック
  7. SpamAssassinを使ったスパム受信ブロック
  8. AmavisとClamAVを使ったウィルス対策
  9. /li>
  10. AmavisとClamAVを使ったウィルス対策

 

1ページでの記載には大きすぎたので記事を分割します

今回の記事では、OSリアルユーザを対象とした基本セットアップであるSTEP1とSTEP2を記載します。

 

STEP1.Postfixサーバの基本セットアップ

Postfixインストール

パッケージ(apt)を利用してPostfixのインストールを行います

# apt install postfix
Image
Postfix Install 01

公開ドメイン用のメールサーバとなるためInternet Siteを選択

Image
Postfix Install 02

セットアップするドメイン名を記載します

この項目で入力した値は、/etc/mailnameに記載されます

Image
Postfix Install 03

これでインストールは完了です

 

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の値を確認

# postconf | grep message_size_limit
message_size_limit = 10240000

 

変更

messege_size_limitの値を102400000に変更

# postconf -e message_size_limit=102400000

 

事後確認

messege_size_limitの値を確認

# postconf | grep message_size_limit
message_size_limit = 102400000

 

設定反映

postfixの再起動とステータス確認

# systemctl restart postfix
# systemctl status postfix

 

 

基本設定変更

ごめんなさい、コマンドで一個ずつパラメータ変更するのはつらいので、設定ファイル/etc/postfix/main.cfを修正します

# vim /etc/postfix/main.cf

## ホスト名 (MXレコードと同一のホスト名をお勧めします)
myhostname = mail.your-domain.com

## サーバ接続時のバナー変更(アタッカーに不必要な情報を提示しない)
#smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
smtpd_banner = $myhostname ESMTP unknown

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_security_level=may
smtpd_tls_security_level=may

smtp_tls_cert_file=/etc/letsencrypt/live/your-domain.com/fullchain.pem
smtpd_tls_cert_file=/etc/letsencrypt/live/your-domain.com/fullchain.pem
smtp_tls_key_file=/etc/letsencrypt/live/your-domain.com/privkey.pem
smtpd_tls_key_file=/etc/letsencrypt/live/your-domain.com/privkey.pem

smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache

smtp_tls_CApath=/etc/ssl/certs
smtpd_tls_CApath=/etc/ssl/certs

smtp_tls_loglevel = 1
smtpd_tls_loglevel = 1

smtp_tls_mandatory_protocols = !SSLv2,!SSLv3,!TLSv1,!TLSv1.1
smtp_tls_protocols = !SSLv2,!SSLv3,!TLSv1

smtpd_tls_mandatory_protocols = !SSLv2,!SSLv3,!TLSv1,!TLSv1.1
smtpd_tls_protocols = !SSLv2,!SSLv3,!TLSv1

送信/受信共にTLSでの暗号化は強制していません。smtp_tls_security_level = maysmtpd_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
!include_try /usr/share/dovecot/protocols.d/*.protocol

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 {
 unix_listener /var/spool/postfix/private/dovecot-lmtp {
   mode = 0600
   user = postfix
   group = postfix
  }
}

Postfix設定変更

main.cfを編集します

# vim /etc/postfix/main.cf

末尾に記述を追加します

ltmpに関する記述を末尾に追加

mailbox_transport = lmtp:unix:private/dovecot-lmtp
smtputf8_enable = no

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のセットアップを進めます