0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ローカルメール環境構築(その3:SMTPサーバー+まとめ)

Posted at

ローカルメール環境構築:その3

その1」および「その2」の続き。最終回、postfixを利用したSMTPサーバーおよびまとめ(実際の動作確認)。参考URLは下記。

今回もChatGPTを適宜利用。

ネットワーク構成図

再掲。

構成図.png

  • 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

インストール中に下記画面が表示されるが、「設定なし」を選択する(後ほどマニュアルで設定ファイルを修正するため)。

PostFixInstall.PNG

アカウント

その2同様、Linuxのアカウントを用いず、仮想アカウント利用。”virtual_mailbox”というファイルにアカウント情報を記載する。(ただし、SMTP認証については、dovecot利用。)

/etc/postfix/virtual_mailbox
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サーバー

Submissionのコピー.png

STARTTLS後、TLSによる暗号化が行われている。ポート番号は587。

SMTPサーバー間

STARTTLStoTLSのコピー.png

こちらも、STARTTLS後、TLSによる暗号化が行われている。ポート番号は25。

メーラーからPOPサーバー

POP3.png

最初からTLSによる暗号化が行われている。ポート番号は995。

OK

EOF

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?