Help us understand the problem. What is going on with this article?

PostfixのSMTPテスト環境構築メモ

More than 1 year has passed since last update.

Postfixのメール(SMTP)テスト環境構築メモ

CentOS6上にPostfixのメール(SMTP)のテスト環境を構築した際のメモを残します。

Postfixのメールテスト環境目的

本テスト環境の目的は、環境内部からの環境内部へのメール送受信、およびPostfixの動作確認です。外部へのメールの送信、外部からのメール受信、実用的なメールサーバ構築は目的としていません。
以下の動作が確認可能な環境の構築および動作確認を行います。

  • メールをローカルユーザのメールボックスに配送する。(delivery)
  • メールをローカルのSMTPダミーサーバにリレーする。(relay)

本エントリでは、以下で構築したOSX上のCentOS6に構築します。
https://qiita.com/keikmobile/items/2c1cec8b875387a83a71
SElinuxは無効とすることを前提としています。

Postfixのメールテスト環境・動作確認方針

上記目的を実現するためのメールテスト環境構成・設定値・動作確認の方針・前提条件を記述します。

メールテスト環境プロセス構成方針

本メールテスト環境は以下のプロセス構成をとる方針とします。

  • MTA(SMTPサーバ)はPostfixを使用する。
  • リレー先のSMTPダミーサーバはPostfixに含まれるsmtp-sinkコマンドを使用する。
  • SMTPクライアントはtelnetおよび、Postfixに含まれるsmtp-soruceコマンドを使用する。
  • 上記のプロセスは全て同一のCent OS上に構成する。
  • 以下は各コンポーネントのイメージ。(http://plantuml.com/) postfix_component.png
@startuml
[smtp-source,telnet] -right-> [Postfix] : SMTP
[Postfix] -right-> [smtp-sink] : SMTP (Relay)
[Postfix] -down-> [Local user mailbox] : (Deliver)
@enduml

Postfix設定構成方針

Postfixの振る舞いを設定する設定値は以下の方針で決定します。

  • ローカルユーザのメールボックスへの配送(外部からのメッセージを受けない)のためのドメインは.localhostとする。(https://tools.ietf.org/html/rfc2606#section-2)
  • ローカルユーザ宛以外のリレー先は、ローカルのSMTPダミーサーバとする。
  • メールボックスの形式は、Maildir(qmail)形式とする。

動作確認方針

本テスト環境の動作確認は以下の方針で実施します。

  • ローカルユーザのメールボックスへの配送の動作の確認を行う。以下の確認観点で行う。
    • SMTPクライアントへの応答
    • ローカルメールボックスのメッセージファイル
    • Postfixのログ(/var/log/maillog)
  • ローカルのSMTPダミーサーバーにリレーの動作の確認を行う。以下の確認観点で行う。
    • SMTPクライアントへの応答
    • SMTPダミーサーバの出力
    • Postfixのログ(/var/log/maillog)

Postfixのメールテスト環境構築手順

postfixのインストール

yumでpostfixをインストールし、rpmでインストールされたことを確認します。smtp-source,smtp-sinkコマンドもインストールされます。
chkconfigで起動設定を有効化します。
メールの送信確認で使用するtelnetコマンドもインストールします。

$ sudo yum -y postfit telnet
...
$ rpm -qa | egrep 'postfix|telnet'
...
$ chkconfig postfix on
...

Postfixの設定(main.cf)

前述のPostfix設定構成方針に従い、Postfixの設定を行います。
main.cfの以下設定値を書き換えます。

  • /etc/postfix/main.cf
設定 設定値 Note
myhostname host.localhost メールシステムのホスト名を指定します。host.localhost宛のローカルでメールを受信するためhost.localhostを指定します。
ローカルで受信するメール設定の詳細は下記URLよりmydestination設定を参照ください。
mydomain localhost メールシステムのドメイン名を指定します。localhost宛のメールを受信するためlocalhostを指定します。
ローカルで受信するメール設定の詳細は下記URLよりmydestination設定を参照ください。
mynetworks_style host メールのリレー(中継)アクセス制御の設定を記述します。ローカルホストからのメールのみを信頼しリレー(中継)を許可する設定とするため、hostを指定します。
メールのリレー(中継)アクセス制御の設定の詳細は下記URLよりmynetworksを参照ください。
relay_domains 設定値削除 リレーさせるドメインを指定します。mynetworks_styleで指定したローカルホストからのメールのみをリレーさせるため設定値を削除します。
relayhost 127.0.0.1:10025 リレー先のホスト,ポートを指定します。本環境ではローカル宛以外のメールはダミーSMTPサーバを立て、ダミーSMTPサーバにリレーさせます。ダミーSMTPサーバのホスト・ポートを指定します。
home_mailbox Maildir/ メールボックスファイルの形式、パスを指定します。ユーザのホームディレクトリのMaildir以下にMaildir(qmail)形式で作成するため、Maildir/を指定します。

main.cfのフォーマット、各種設定値の詳細は以下を参照。
http://www.postfix.org/postconf.5.html

以下はmain.cfのdefaultとのdiffです。

75c75
< #myhostname = host.domain.tld
---
> myhostname = host.localhost
83c83
< #mydomain = domain.tld
---
> mydomain = localhost
251c251
< #mynetworks_style = host
---
> mynetworks_style = host
296c296
< #relay_domains = $mydestination
---
> relay_domains = 
317a318
> relayhost = 127.0.0.1:10025
419c420
< #home_mailbox = Maildir/
---
> home_mailbox = Maildir/

postconf -nコマンドで上記設定の確認をします。

$ postconf -n | egrep 'home_mailbox|mydestination|mydomain|myhostname|mynetworks_style|relay_domains|relayhost'
home_mailbox = Maildir/
mydestination = $myhostname, localhost.$mydomain, localhost
mydomain = localhost
myhostname = host.localhost
mynetworks_style = host
relay_domains = 
relayhost = 127.0.0.1:10025
$ 

Maildirテンプレートの作成

Maildirのテンプレートを作成します。

$ sudo mkdir -p /etc/skel/Maildir/new
$ sudo mkdir -p /etc/skel/Maildir/cur
$ sudo mkdir -p /etc/skel/Maildir/tmp
$ sudo chmod -R 700 /etc/skel/Maildir/

postfixの再起動

serviceコマンドでpostfixの再起動を行います。

$ sudo service postfix restart

リレー先SMTPダミーサーバの起動

smtp-sinkでダミーサーバを立ち上げます。postfixのmain.cfのrelayhostで指定した127.0.0.1ホストの10025ポートで立ち上げます。メッセージはsink/%Y%m%d%H/%M.以下のファイルに出力されます。

$ smtp-sink -R /home/vagrant -u vagrant -d sink/%Y%m%d%H/%M. 127.0.0.1:10025 5 &

Postfixのメールテスト環境動作確認

ローカルユーザへのメール送信の確認(telnetコマンド)

telnetコマンドでローカルユーザへのメール送信の確認を行います。telnetでlocalhostの25ポートにアクセスし、SMTPコマンドでメールを送信します。ローカルユーザである"vagrant@localhost"宛に送信します。

$ telnet localhost 25
Trying 0.0.0.0...
Connected to localhost.
Escape character is '^]'.
220 host.localhost ESMTP Postfix
mail from:<>
250 2.1.0 Ok
rcpt to:<vagrant@localhost>
250 2.1.5 Ok
data
354 End data with <CR><LF>.<CR><LF>
test message
.
250 2.0.0 Ok: queued as 71D0620555
quit
221 2.0.0 Bye
Connection closed by foreign host.
$ 

vagrantユーザのホームディレクトリ以下のMaildir/new/に受信したメールを確認することができます。

$ cat Maildir/new/1514888325.Vfd01I160013M791677.centos601 
Return-Path: <>
X-Original-To: vagrant@localhost
Delivered-To: vagrant@localhost.localhost
Received: from centos601 (centos601 [127.0.0.1])
        by host.localhost (Postfix) with SMTP id 71D0620555
        for <vagrant@localhost>; Tue,  2 Jan 2018 10:18:14 +0000 (UTC)
Message-Id: <20180102101827.71D0620555@host.localhost>
Date: Tue,  2 Jan 2018 10:18:14 +0000 (UTC)
From: MAILER-DAEMON
To: undisclosed-recipients:;

test message
$ 

また、/var/log/maillogに以下の例のログ出力が確認できます。

... postfix/smtpd[4493]: connect from centos601[127.0.0.1]
... postfix/smtpd[4493]: 71D0620555: client=centos601[127.0.0.1]
... postfix/cleanup[4496]: 71D0620555: message-id=<20180102101827.71D0620555@host.localhost>
... postfix/qmgr[4236]: 71D0620555: from=<>, size=337, nrcpt=1 (queue active)
... postfix/local[4497]: 71D0620555: to=<vagrant@localhost.localhost>, orig_to=<vagrant@localhost>, relay=local, delay=31, delays=31/0.01/0/0, dsn=2.0.0, status=sent (delivered to maildir)
... centos601 postfix/qmgr[4236]: 71D0620555: removed
... centos601 postfix/smtpd[4493]: disconnect from centos601[127.0.0.1]

smtp-sourceでのメール送信

telnetコマンドでなく、smtp-sourceコマンドでメールを送信することも可能です。

$ smtp-source -v -f "" -t "vagrant@localhost" 127.0.0.1:25
smtp-source: name_mask: all
smtp-source: vstream_tweak_tcp: TCP_MAXSEG 32732
smtp-source: <<< 220 host.localhost ESMTP Postfix
smtp-source: HELO centos601
smtp-source: <<< 250 host.localhost
smtp-source: MAIL FROM:<>
smtp-source: <<< 250 2.1.0 Ok
smtp-source: RCPT TO:<vagrant@localhost>
smtp-source: <<< 250 2.1.5 Ok
smtp-source: DATA
smtp-source: <<< 354 End data with <CR><LF>.<CR><LF>
smtp-source: .
smtp-source: <<< 250 2.0.0 Ok: queued as 7CD2320555
smtp-source: QUIT
smtp-source: <<< 221 2.0.0 Bye
$

ローカルのSMTPダミーサーバーにリレーの確認(smtp-source)

smtp-sourceコマンドでリモートへのメール送信の確認を行います。リモートである"vagrant@host.remotehost"宛に送信します。

[vagrant@centos601 ~]$ smtp-source -v -f "" -t "vagrant@host.remotehost" 192.168.33.10:25                                                              
smtp-source: name_mask: all
smtp-source: vstream_tweak_tcp: TCP_MAXSEG 32741
smtp-source: <<< 220 host.localhost ESMTP Postfix
smtp-source: HELO centos601
smtp-source: <<< 250 host.localhost
smtp-source: MAIL FROM:<>
smtp-source: <<< 250 2.1.0 Ok
smtp-source: RCPT TO:<vagrant@host.remotehost>
smtp-source: <<< 250 2.1.5 Ok
smtp-source: DATA
smtp-source: <<< 354 End data with <CR><LF>.<CR><LF>
smtp-source: .
smtp-source: <<< 250 2.0.0 Ok: queued as 26C5F20574
smtp-source: QUIT
smtp-source: <<< 221 2.0.0 Bye
[vagrant@centos601 ~]$ 

また、/var/log/maillogに以下の例のログ出力が確認できます。
relay=127.0.0.1[127.0.0.1]:10025へrelayされていることが確認可能です。

... postfix/smtpd[26308]: connect from unknown[192.168.33.10]
... postfix/smtpd[26308]: 26C5F20574: client=unknown[192.168.33.10]
... postfix/smtp[26314]: 26C5F20574: to=<vagrant@host.remotehost>, relay=127.0.0.1[127.0.0.1]:10025, delay=0.13, delays=0.08/0/0/0.04, dsn=2.0.0, status=sent (250 2.0.0 Ok)
keikmobile
cassandra、ansible、serverspec等に興味があります!
http://keikmobile.hatenablog.com
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした