ローカルメール環境構築:その3
「その1」および「その2」の続き。最終回、postfixを利用したSMTPサーバーおよびまとめ(実際の動作確認)。参考URLは下記。
今回もChatGPTを適宜利用。
ネットワーク構成図
再掲。
- 192.168.2.249: DNSサーバーおよびメールクライアントuser4@annecy2dc.com
- 192.168.2.2: メールサーバーannecy2dc.com
- 192.168.2.251: メールサーバーannecy1dc.com
- 192.168.2.239: メールクライアントuser1@annecy1dc.com
postfixによるSMTPサーバー構築
インストール
$ sudo apt install postfix sasl2-bin
インストール中に下記画面が表示されるが、「設定なし」を選択する(後ほどマニュアルで設定ファイルを修正するため)。
アカウント
その2同様、Linuxのアカウントを用いず、仮想アカウント利用。”virtual_mailbox”というファイルにアカウント情報を記載する。(ただし、SMTP認証については、dovecot利用。)
user4@annecy2dc.com	annecy2dc.com/user4/Maildir/
後述する設定ファイル”main.cf”にて、”virtual_mailbox_base = /var/mail/vmail”となっており、アカウント”user4@annecy2dc.com”に対するメールボックスが”/var/mail/vmail/annecy2dc.com/user4/Maildir/”であることを示す。なお、最後の”/”(Maildir/)は必須(これがないと動作せず)。次のコマンドでデータベース(?)化する。
$ sudo postmap /etc/postfix/virtual_mailbox
$ ls virtual_mailbox*
virtual_mailbox  virtual_mailbox.db
”virtual_mailbox.db”が作成される。
設定ファイル
/etc/postfix/main.cf
上記した参考URL情報をもとに、サンプルファイル”main.cf.proto”からの追記分を下記する。
mail_owner = postfix
myhostname = AAA.annecy2dc.com
mydomain = annecy2dc.com
myorigin = $mydomain
inet_interfaces = all
mydestination = localhost
local_recipient_maps = unix:passwd.byname $alias_maps
今回、仮想メールアカウントを利用しており、後述する”virtual_mailbox_domains”にドメイン名が登録されているため、”mydestination = localhost”のみとする必要があるらしい。また、今回はLinuxアカウントを利用していないため、”local_recipient_maps = unix:passwd.byname $alias_maps”は不要かもしれない(未調査)。
mynetworks_style = subnet
mynetworks = 127.0.0.0/8, 192.168.2.0/24
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
home_mailbox = Maildir/
smtpd_banner = $myhostname ESMTP
sendmail_path = /usr/sbin/postfix
newaliases_path = /usr/bin/newaliases
mailq_path = /usr/bin/mailq
setgid_group = postdrop
#html_directory =
#manpage_directory =
#sample_directory =
#readme_directory =
上記は、特記事項なし。
disable_vrfy_command = yes
smtpd_helo_required = yes
message_size_limit = 10240000
- disable_vrfy_command:アカウント存在確認(VRFYコマンド)無効化
- smtpd_helo_required = yes:HELO必須
- message_size_limit = 10240000:サイズ制限(10MB)
virtual_mailbox_domains = annecy2dc.com
virtual_mailbox_base = /var/mail/vmail
virtual_mailbox_maps = hash:/etc/postfix/virtual_mailbox
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
上記は仮想アカウント関連の設定(ドメイン名、メールボックス、仮想アカウントIDなど)。ここは、その2も参照。
smtp_tls_CApath=/etc/ssl/certs
smtp_tls_security_level=may
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtp_tls_note_starttls_offer = yes
”smtp_”は、他のメールサーバーへメール送信するときの設定である。
- smtp_tls_CApath=/etc/ssl/certs:TLS証明書のパス
- smtp_tls_security_level=may:相手メールサーバーがTLS対応していれば暗号化、そうでなければ平文で通信
- smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache:TLSキャッシュデーターベース
- smtp_tls_note_starttls_offer = yes:相手メールサーバーがSTARTTLSをサポートしているかをログに記録
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_tls_security_level=may
smtpd_tls_received_header = yes
”smtpd_”は、他のメールサーバーからメール受信するときの設定である。
- smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem:証明書
- smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key:鍵
- smtpd_tls_security_level=may:相手メールサーバーがTLS対応していれば暗号化、そうでなければ平文で通信
- smtpd_tls_received_header = yes:受信メールに”Received:”ヘッダーを追加、TLS使用かどうかを明示
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
smtpd_recipient_restrictions = 
  permit_mynetworks,
  permit_sasl_authenticated,
  reject_unauth_destination
SMTP認証に関する設定である。
- smtpd_sasl_type = dovecot:認証バックエンドにdovecot利用
- smtpd_sasl_path = private/auth:dovecotの認証ソケットパス
- smtpd_sasl_auth_enable = yes:SMTP認証有効化
- smtpd_recipient_restrictions =
 permit_mynetworks,
 permit_sasl_authenticated,
 reject_unauth_destination:受信者制限ルール(自ネットワークメールを許可、SMTP認証メールを許可、未許可宛先は拒否)
/etc/postfix/master.cf
他にも有効化されている行(設定内容)はあるが、ここで重要なのは下記のようだ。まずは、smtp(ポート25)に関する設定。
# ==========================================================================
# service type  private unpriv  chroot  wakeup  maxproc command + args
#               (yes)   (yes)   (no)    (never) (100)
# ==========================================================================
smtp      inet  n       -       y       -       -       smtpd
Submission(ポート587)に関する設定。
submission inet n       -       y       -       -       smtpd
  -o syslog_name=postfix/submission
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_tls_security_level=encrypt
  -o smtpd_tls_wrappermode=no
  -o smtpd_sasl_type=dovecot
  -o smtpd_sasl_path=private/auth
  -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject
- syslog_name=postfix/submission:syslog名称
- smtpd_sasl_auth_enable=yes:SMTP認証(SASL)有効化
- smtpd_tls_security_level=encrypt:TLS暗号化
- smtpd_tls_wrappermode=no:TLSラッパーモード無効化
- smtpd_sasl_type=dovecot:SASL認証としてdovecot利用
- smtpd_sasl_path=private/auth:dovecotソケットパス
- smtpd_recipient_restrictions=permit_sasl_authenticated,reject:受信制限;認証必須、認証なしは拒否
Smtps(ポート465)に関する設定。
smtps     inet  n       -       y       -       -       smtpd
  -o syslog_name=postfix/smtps
  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes
- syslog_name=postfix/smtps:syslog名称
- smtpd_tls_wrappermode=yes:SMTPS有効化(最初から SSL/TLS利用)
- smtpd_sasl_auth_enable=yes:SMTP(SASL)有効化
こちらは実質未使用、後述する検証内容には含まれていない。
検証
user4@annecy2dc.comからuser1@annecy1dc.comへメール送信を実施、user1@annecy1dc.comにてメール受信を実施したときの状況を記す。
/var/log/mail.log
メール送信(Submission)を受けたSMTPサーバー
メールクライアントからのメール送信のログは下記となる。
2025-03-26T11:08:16.606094+09:00 S-SMTP postfix/submission/smtpd[6000]: connect from unknown[192.168.2.249]
2025-03-26T11:08:16.679424+09:00 S-SMTP postfix/submission/smtpd[6000]: A5D56100080: client=unknown[192.168.2.249], sasl_method=PLAIN, sasl_username=user4@annecy2dc.com
2025-03-26T11:08:16.681034+09:00 S-SMTP postfix/cleanup[6004]: A5D56100080: message-id=<ce79942d-d3b9-5f67-d1d1-d82421c6be1e@annecy2dc.com>
2025-03-26T11:08:16.682439+09:00 S-SMTP postfix/qmgr[2427]: A5D56100080: from=<user4@annecy2dc.com>, size=789, nrcpt=1 (queue active)
2025-03-26T11:08:16.684165+09:00 S-SMTP postfix/submission/smtpd[6000]: disconnect from unknown[192.168.2.249] ehlo=2 starttls=1 auth=1 mail=1 rcpt=1 data=1 quit=1 commands=8
送信先SMTPサーバーへのログは下記となる。
2025-03-26T11:08:17.283764+09:00 S-SMTP postfix/smtp[6005]: A5D56100080: to=<user1@annecy1dc.com>, relay=mail.annecy1dc.com[192.168.2.251]:25, delay=0.61, delays=0.01/0.01/0.45/0.14, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as 3FBE924EE9)
2025-03-26T11:08:17.284105+09:00 S-SMTP postfix/qmgr[2427]: A5D56100080: removed
メール受信およびPOPサーバー
メール受信時のpostfixのログは下記となる。
2025-03-26T02:08:17.044945+00:00 R-SMTP postfix/smtpd[1057]: connect from mail.annecy2dc.com[192.168.2.2]
2025-03-26T02:08:17.263002+00:00 R-SMTP postfix/smtpd[1057]: 3FBE924EE9: client=mail.annecy2dc.com[192.168.2.2]
2025-03-26T02:08:17.269856+00:00 R-SMTP postfix/cleanup[1061]: 3FBE924EE9: message-id=<ce79942d-d3b9-5f67-d1d1-d82421c6be1e@annecy2dc.com>
2025-03-26T02:08:17.289896+00:00 R-SMTP postfix/qmgr[735]: 3FBE924EE9: from=<user4@annecy2dc.com>, size=1178, nrcpt=1 (queue active)
2025-03-26T02:08:17.297977+00:00 R-SMTP postfix/smtpd[1057]: disconnect from mail.annecy2dc.com[192.168.2.2] ehlo=2 starttls=1 mail=1 rcpt=1 data=1 quit=1 commands=7
2025-03-26T02:08:17.358024+00:00 R-SMTP postfix/virtual[1062]: 3FBE924EE9: to=<user1@annecy1dc.com>, relay=virtual, delay=0.15, delays=0.08/0.05/0/0.02, dsn=2.0.0, status=sent (delivered to maildir)
2025-03-26T02:08:17.360953+00:00 R-SMTP postfix/qmgr[735]: 3FBE924EE9: removed
POP実施時のdovecotのログは下記となる。
2025-03-26T02:08:54.484845+00:00 R-SMTP dovecot: pop3-login: Login: user=<user1@annecy1dc.com>, method=PLAIN, rip=192.168.2.239, lip=192.168.2.251, mpid=1065, TLS, session=<BDm5UTUxUszAqALv>
2025-03-26T02:08:54.710541+00:00 R-SMTP dovecot: pop3(user1@annecy1dc.com)<1065><BDm5UTUxUszAqALv>: Disconnected: Logged out top=0/0, retr=1/1302, del=0/9, size=12141
Wireshark取得データ
メーラーからSMTPサーバー
STARTTLS後、TLSによる暗号化が行われている。ポート番号は587。
SMTPサーバー間
こちらも、STARTTLS後、TLSによる暗号化が行われている。ポート番号は25。
メーラーからPOPサーバー
最初からTLSによる暗号化が行われている。ポート番号は995。
OK
EOF





