bind DNS Postfix Server

【Postfix/Dovecot/SASL】ローカル環境のSMTP/IMAPサーバ構築手順

2023年1月28日


ローカルネットワークの同一ドメイン内でメール疎通できるようにするための手順を記載します。

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."

実際にメールクライアントでも送受信確認を行い、送信前にパスワード認証が走るか確認します。

CATEGORIES & TAGS

bind, DNS, Postfix, Server,

Author:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

カテゴリー

むるし

フリーランスのインフラ系エンジニア。
備忘録で色々書いていきます。
お問い合わせは↓
mo-gyu@murci.net
LPIC303 Security
%d人のブロガーが「いいね」をつけました。