ローカルネットワークの同一ドメイン内でメール疎通できるようにするための手順を記載します。
Ubuntu環境
Ubuntu 22.04
Postfix 3.6.4-1ubuntu1
dovecot-core 1:2.3.16+dfsg1-3ubuntu2.1
dovecot-imapd 1:2.3.16+dfsg1-3ubuntu2.1
dovecot-pop3d 1:2.3.16+dfsg1-3ubuntu2.1
sasl2-bin 2.1.27+dfsg2-3ubuntu1
事前準備
事前準備として、以下の作業を行います。
DNSサーバの構築
postfixはデフォルトでhostsを参照しないので、今回は別途DNSサーバを構築しました。
正引きゾーンファイルは以下のように設定
;
; BIND data file for local loopback interface
;
$TTL 604800
@ IN SOA localhost. root.localhost. (
20221231 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS localhost.
@ IN A 127.0.0.1
@ IN AAAA ::1
@ IN MX 10 think01.murci.local.
think01 IN A 192.168.9.10
win10 IN A 192.168.9.7
メールクライアント用のホームディレクトリ作成
$ sudo mkdir -p /home/admin/Maildir/tmp
$ sudo chown -R user2:user2 user2
※デフォルトで所有ユーザ:所有グループがrootなので、user2に変更する
FWの許可設定
$ sudo ufw allow Postfix Dovecot
$ sudo ufw app list
※利用可能なアプリケーションにPostfixが表示されること
PostfixでSMTPサーバ構築
postfixの役割としては、メール送信時のMTA(メール転送)、MDA(メール配送)、MSA(Submission)となる
パッケージのインストール
$ sudo apt-get update
$ sudo DEBIAN_PRIORITY=low apt install postfix
対話モード起動
メール設定の一般的なタイプ: Local only
システムメール名: example.com (mail.example.comではない)
rootおよびpostmasterメール受信者: プライマリLinuxアカウントユーザー名(例ではwebapp)
メールを受信する他の宛先: $myhostname, example.com、localhost.example.com、localhost
メールキューの同期更新を強制しますか?: No
ローカルネットワーク: 127.0.0/8 [:ffff:127.0.0.0]/104 [:1]/128
メールボックスのサイズ制限: 0
ローカルアドレス拡張文字: +
使用するインターネットプロトコル: all
# OP25B対策でRELAY HOSTを設定する。
再設定は、sudo dpkg-reconfigure postfix
postconfコマンド設定
対話モードの設定に加えて、postconfで設定します。
$ sudo postconf -e 'myhostname=think01.murci.local'
※ホスト名を設定(FQDN)
$ sudo postconf -e 'mydomain=think01.murci.local'
※ドメイン名を設定(FQDN)
$ sudo postconf -e 'home_mailbox=Maildir/'
※メールボックス用のディレクトリ作成
$ sudo postconf -e 'masquerade_domains= $mydomain'
※ホスト名を隠す設定
$ sudo postconf -e 'smtpd_banner = $myhostname ESMTP'
※SMTPバナー(ステータスコード220の後に続くテキスト)
main.cfを直接編集
mydestination = think01.murci.local, $myhostname, think01, localhost.localdomain, localhost, murci.local ※追加
mynetworks= 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 192.168.9.0/24 ※追加
#inet-interfaces = loopbackonly
inet-interfaces = all
設定の反映確認
$ postconf -n
masquerade_domains = $mydomain
mydestination = think01.murci.local, $myhostname, think01,
localhost.localdomain, localhost, murci.local
mydomain = think01.murci.local
myhostname = think01.murci.local
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 192.168.9.0/24
myorigin = /etc/mailname
$ sudo postfix check #構文エラーチェック
$ sudo systemctl restart postfix #プロセス再起動
telnetメール疎通確認
SMTPサーバのメール送信テストを行います。
$ telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 think01.murci.net ESMTP
helo localhost
250 think01.murci.net
mail from:user1@think01.murci.local
250 2.1.0 Ok
rcpt to:user2@think01.murci.local
250 2.1.5 Ok ※不通の場合はステータス451など
data
354 End data with .
HELLO from10 to10
. ※このタイミングでmail.logに送信状態が出力される
250 2.0.0 Ok: queued as 7FE854A2EE6
quit
221 2.0.0 Bye
Connection closed by foreign host.
/var/log/mail.logで送信ステータス確認
telnetのメール送信タイミングでmail.logの出力を確認します。
Jan 6 00:02:18 think01 postfix/local[2870114]: 2535E4A2EC1: to=, relay=local, delay=28, delays=28/0.01/0/0.01, dsn=2.0.0, status=sent (delivered to maildir)
※status=sentであること
送信先ユーザのメールボックスにメールが届いているか確認
送信先ユーザのメールボックス(ホームディレクトリ)にメールが届いているか確認します。
$ sudo ls -ltr /home/user2/Maildir/new
合計 8
-rw------- 1 user user 461 2月 13 11:14 167xxxxx.xxxxxxxxx.think01.murci.local
$ sudo cat ../user2/Maildir/new/167xxxxx.xxxxxxxxx.think01.murci.local
Return-Path:
X-Original-To: user2@think01.murci.local
Delivered-To: user2@think01.murci.local
Received: from localhost (localhost [127.0.0.1])
by think01.murci.local (Postfix) with SMTP id 643B34A0023
for ; Mon, 13 Feb 2023 11:13:44 +0900 (JST)
Message-Id: <xxxxxxxx.xxxxxxxxx@think01.murci.local>
Date: Mon, 13 Feb 2023 11:13:44 +0900 (JST)
From: user1@think01.murci.local
GO HELL IMMIDIETORY
DovecotでIMAPサーバ構築
設定対象ファイル
/etc/dovecot/
dovecot.conf
conf.d/10-master.conf
conf.d/10-auth.conf
conf.d/10-mail.conf
conf.d/10-ssl.conf
conf.d/15-mailboxes.conf
conf.d/90-quota.conf
conf.d/90-acl.conf
conf.d/90-plugin.conf
設定内容
/etc/dovecot/dovecot.conf
< protocols = imap pop3 ※追加
/etc/dovecot/conf.d/
10-master.conf
※doveconfでエラーが出る箇所をコメントアウト
86c86
< #service auth {
---
> service auth {
・・・他
10-auth.conf
11d10
< disable_plaintext_auth = no ※noに変更
101c100
< auth_mechanisms = plain login ※login追記
---
> auth_mechanisms = plain
10-mail.conf
30,31c30
< #mail_location = mbox:~/mail:INBOX=/var/mail/%u
< mail_location = maildir:~/Maildir ※メールボックスの場所を指定
---
> mail_location = mbox:~/mail:INBOX=/var/mail/%u
< valid_chroot_dirs = /home ※追記
10-ssl.conf
以下コメントアウト
13,15c12,13
< #ssl_cert = ssl_cert = ssl_key = ssl_client_ca_dir = /etc/ssl/certs
57c55
< #ssl_dh = ssl_dh =
15-mailboxes.conf
doveconfのエラー箇所をすべてコメントアウト
< # mailbox Drafts {
< # special_use = \Drafts
< # }
90-acl.conf
doveconfのエラー箇所をすべてコメントアウト
11c11
< #plugin {
---
> plugin {
90-plugin.conf
doveconfのエラー箇所をすべてコメントアウト
< #plugin {
---
> plugin {
11c11
< #}
---
> }
メールクライアントで疎通確認(Thunderbird)
アカウント追加
以下設定でアカウントを追加します。相互にメールを送受信できることを確認します
name:user
mailaddress:user@murci.local
password:xxxxxxxxx
IMAP
Server:think01.murci.local
port:110
User:user
Authentivcation method : None
Connection Secutiry : Password
SMTP
Server:think01.murci.local
port:25
User:user
Authentivcation method : None
Connection Secutiry : None
SASLでユーザ認証設定
パッケージのインストール
sasl2-binと各ライブラリをインストールする
$ sudo apt install sasl2-bin
$ dpkg -l | grep sasl
ii libauthen-sasl-perl 2.1600-1.1 all Authen::SASL - SASL Authentication framework
ii libsasl2-2:amd64 2.1.27+dfsg2-3ubuntu1 amd64 Cyrus SASL - authentication abstraction library
ii libsasl2-dev 2.1.27+dfsg2-3ubuntu1 amd64 Cyrus SASL - development files for authentication abstraction library
ii libsasl2-modules:amd64 2.1.27+dfsg2-3ubuntu1 amd64 Cyrus SASL - pluggable authentication modules
ii libsasl2-modules-db:amd64 2.1.27+dfsg2-3ubuntu1 amd64 Cyrus SASL - pluggable authentication modules (DB)
ii libsasl2-modules-gssapi-mit:amd64 2.1.27+dfsg2-3ubuntu1 amd64 Cyrus SASL - pluggable authentication modules (GSSAPI)
ii sasl2-bin 2.1.27+dfsg2-3ubuntu1 amd64 Cyrus SASL - administration programs for SASL users database
SASLコンフィグ設定
略
OPTIONS=”-c -m /var/run/saslauthd”
※実際にこのフォルダが存在することを確認、無ければ作成する
START=yes
SASLユーザ作成
$ sudo saslpasswd2 -u think01.murci.local -c user2
[sudo] user2 のパスワード:
Password:
Again (for verification):
疎通確認
テストコマンドを実施。
$ sudo testsaslauthd -u "user" -p "xxxxxxxxx"
0: OK "Success."
実際にメールクライアントでも送受信確認を行い、送信前にパスワード認証が走るか確認します。