postfixの勉強 #4

以下の続き.
postfixの勉強 #1 - NK5のノート
postfixの勉強 #2 - NK5のノート
postfixの勉強 #3 - NK5のノート

Postfixが受け取ったメールはcleanup(8)の正規化を経て,
incomingキューに投入され,それをqmgr(8)が拾う,という話だった.

qmgr(8)は,incomingキューに届いたメールを
「このメールは自分宛?それとも他所宛?」
と仕分けしてくれる.
仕分け自体はtrival-rewrite(8)というデーモンが代行するようだ.

Postfix manual - qmgr(8)
Postfix manual - trivial-rewrite(8)

自分宛だったら,自分の然るべきディレクトリにメールを格納するし,
他所宛だったら,別のメールサーバに転送する.

さて,今までの記事では他所宛,すなわち「送信」しかしてこなかったが,
どうせならここで「受信」も出来るようにしてみようと思う.

そもそも,何もせずに,Postfixにメールを送ろうとしたらどうなるか?
試しに外部からpostfixサーバ(172.17.0.2)の25番ポートにtelnetしてみる.

# telnet 172.17.0.2 25
Trying 172.17.0.2...
telnet: Unable to connect to remote host: Connection refused

このように,残念ながら拒否される.
Postfixは,main.cfにinet_interfacesというパラメータを有しており,
ここに書かれている者以外の利用を認めないからである.

Postfix設定パラメータ

なので,これを以下のように修正する.

# vi /etc/postfix/main.cf
(編集作業,中略)
# grep "inet_interfaces =" /etc/postfix/main.cf
inet_interfaces = all

# postfix stop
postfix/postfix-script: stopping the Postfix mail system
# postfix start
postfix/postfix-script: starting the Postfix mail system

allというのは,「全部許容しますよ」という意味.
上記まで実施したら,改めて外部からtelnet.今度はうまく繋がる.

# telnet 172.17.0.2 25
Trying 172.17.0.2...
Connected to 172.17.0.2.
Escape character is '^]'.
220 3832cc77bd2d.localdomain ESMTP Postfix
quit
221 2.0.0 Bye
Connection closed by foreign host.

さらに,メールを受信できるように,以下のように設定しておく,

# vi /etc/postfix/main.cf
(色々と編集,中略)
# grep "mydomain =" /etc/postfix/main.cf
mydomain = oreore.com
# grep "mydestination =" /etc/postfix/main.cf
mydestination = $mydomain
# grep "home_mailbox =" /etc/postfix/main.cf
home_mailbox = Mailbox

# postfix reload
postfix/postfix-script: refreshing the Postfix mail system

それぞれ,
・自分のドメイン名はoreore.comです
・自分宛のメールはmydomain(先ほど設定したoreore.com)です
・メールは各ホームディレクトリの「Mailbox」というファイルに格納します
という意味となる.

試しに外部からtelnetでroot@oreore.com宛でメールを送ってみる.

# telnet 172.17.0.2 25
Trying 172.17.0.2...
Connected to 172.17.0.2.
Escape character is '^]'.
220 3832cc77bd2d.oreore.com ESMTP Postfix
HELO hogehoge
250 3832cc77bd2d.oreore.com
MAIL FROM:<tekitou@tekitou.com>
250 2.1.0 Ok
RCPT TO:<root@oreore.com>
250 2.1.5 Ok
DATA
354 End data with <CR><LF>.<CR><LF>
FROM:tekitou@tekitou.com
TO:root@oreore.com
SUBJECT:Test Mail
test mail
.
250 2.0.0 Ok: queued as D62D860138FD
quit
221 2.0.0 Bye
Connection closed by foreign host.

送れたっぽいメッセージが表示されている.
さっそく,Postfix側のログとディレクトリを確認してみる.

# journalctl -n 7
-- Logs begin at Sat 2017-03-25 08:35:13 UTC, end at Sat 2017-03-25 10:16:50 UTC. --
Mar 25 10:15:41 3832cc77bd2d postfix/smtpd[429]: connect from (telnetしたマシンのホスト名)[172.17.0.1]
Mar 25 10:16:12 3832cc77bd2d postfix/smtpd[429]: D62D860138FD: client=(telnetしたマシンのホスト名)[172.17.0.1]
Mar 25 10:16:49 3832cc77bd2d postfix/cleanup[432]: D62D860138FD: message-id=<>
Mar 25 10:16:49 3832cc77bd2d postfix/qmgr[428]: D62D860138FD: from=<tekitou@tekitou.com>, size=292, nrcpt=1 (queue active)
Mar 25 10:16:49 3832cc77bd2d postfix/local[433]: D62D860138FD: to=<root@oreore.com>, relay=local, delay=48, delays=48/0.12/0/0.08, dsn=2.0.0, status=sent (delivered to mailbox)
Mar 25 10:16:49 3832cc77bd2d postfix/qmgr[428]: D62D860138FD: removed
Mar 25 10:16:50 3832cc77bd2d postfix/smtpd[429]: disconnect from (telnetしたマシンのホスト名)[172.17.0.1]

# ll /root
total 8
-rw------- 1 root root  432 Mar 25 10:16 Mailbox
-rw------- 1 root root 3354 Dec 14 14:59 anaconda-ks.cfg

# cat /root/Mailbox
From tekitou@tekitou.com  Sat Mar 25 10:16:49 2017
Return-Path: <tekitou@tekitou.com>
X-Original-To: root@oreore.com
Delivered-To: root@oreore.com
Received: from hogehoge ((telnetしたマシンのホスト名) [172.17.0.1])
        by 3832cc77bd2d.oreore.com (Postfix) with SMTP id D62D860138FD
        for <root@oreore.com>; Sat, 25 Mar 2017 10:16:01 +0000 (UTC)
FROM:tekitou@tekitou.com
TO:root@oreore.com
SUBJECT:Test Mail

test mail

無事,メールを受信できていることを確認した.

※なお,言うまでもなく,oreore.comなんてドメインは存在しない.
 正しく活用するためには,ドメインを然るべき場所で取得した上で
 DNSサーバにMXレコードを登録する必要があるが,今回は省略.

さて,ログをよく見ると,qmgrの後の登場人物が「local」になっている.
今までは「smtp」だったが,何が違うのか?


以外と長くなったので次回に.今度こそ次で終わり.