こちらは1回線で、1ipアドレスをプロバイダーから拝借している。
その1ipアドレスはプロバイダのddnsで配布されるので常に変化する。
DNSのMXレコードが名前管理会社で付けられるようなので、ddnsな環境だけどメールサーバを作ってみた。
材料はCentOS 7。
POP/IMAP設定:mail/dovecot
SMTP-AUTH設定:mail/smtp-auth
ヴァーチャルメールボックスmail/VirtualMailbox
メーリングリスト管理mail/Mailman
sambaADと連携mail/samba
SPFmail/SPF
設定マニュアルhttp://www.postfix-jp.info/trans-2.1/jhtml/postconf.5.html
プロバイダから動的に配布されたipアドレスを、名前管理会社謹製のddnsクライアントアプリで、ホスト名web.chaperone.jpに都度アサインさせている。そして同時にホスト名/ドメイン名のMXレコードもホスト名web.chaperone.jpに割り当てている(優先度10)。
ipアドレスはダミーの値です
これでプロバイダから動的に変更されるipアドレスにwebサイトもMX情報も追従できる。
一応、nslookupで確認してみると。
[root@c ~]# nslookup
> set querytype=MX
> chaperone.jp
Server: 192.168.0.3
Address: 192.168.0.3#53
Non-authoritative answer:
chaperone.jp mail exchanger = 10 web.chaperone.jp.
Authoritative answers can be found from:
chaperone.jp nameserver = 04.dnsv.jp.
chaperone.jp nameserver = 01.dnsv.jp.
chaperone.jp nameserver = 02.dnsv.jp.
chaperone.jp nameserver = 03.dnsv.jp.
web.chaperone.jp internet address = xxx.xxx.xxx.xxx
01.dnsv.jp internet address = 157.7.32.53
02.dnsv.jp internet address = 157.7.33.53
03.dnsv.jp internet address = 157.7.32.35
03.dnsv.jp has AAAA address 2400:8500:3000::53
04.dnsv.jp internet address = 157.7.33.35
04.dnsv.jp has AAAA address 2400:8500:3fff::53
> exit
[root@c ~]#
どうやらはじめからインストールされている。
[root@c ~]# yum list installed |grep postfix
postfix.x86_64 2:2.10.1-6.el7 @anaconda
[root@c ~]#
設定ファイルの/etc/postfix/main.cfで、下記の箇所のみ変更した
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
|
これでpostfixを再起動すれば、メールの受信は可能となる。試しに外部からメールを送り付けると
/var/log/maillogには
:
Mar 15 18:52:57 c postfix/master[19506]: daemon started -- version 2.10.1, configuration /etc/postfix <== postfix再起動
Mar 15 18:54:15 c postfix/smtpd[19530]: connect from mail-ua0-f172.google.com[209.85.217.172] <== gmailからアクセス
Mar 15 18:54:15 c postfix/smtpd[19530]: D4EEFC08216E: client=mail-ua0-f172.google.com[209.85.217.172]
Mar 15 18:54:16 c postfix/cleanup[19534]: D4EEFC08216E: message-id=<(略)@mail.gmail.com>
Mar 15 18:54:16 c postfix/qmgr[19508]: D4EEFC08216E: from=<(略:送信者)@gmail.com>, size=2549, (略
Mar 15 18:54:16 c postfix/local[19540]: D4EEFC08216E: to=<(略:宛先)@chaperone.jp>, relay=local, (略
Mar 15 18:54:16 c postfix/qmgr[19508]: D4EEFC08216E: removed
Mar 15 18:54:16 c postfix/smtpd[19530]: disconnect from mail-ua0-f172.google.com[209.85.217.172]
:
と記載され、実際に/var/spool/mail/(宛先)にメールが追加されていた。
受信ができたので、今度は送信。
まずはweb.chaperone.jpから直接メールを出してみる。このサイトはプロバイダー配下にあるマシンでOP25Bの影響下にある。なので、このweb.chaperone.jpからメールを直接相手のsmtpサイトに送ることは無理で、一旦プロバイダのメールサーバを経由する必要がある。
プロバイダのメールサーバが「vsmtp.xxxxxx.ne.jp」なら下記を /etc/postfix/main.cf の末尾に加えて postfix を再起動します。
relayhost = vsmtp.xxxxxx.ne.jp:587 <-- dnsのmxに従う場合。[]で括ると直接そのサイトへアクセス
smtp_use_tls = no <-- 通信の暗号化、「SSL/TLS」「STARTTLS」を使うのなら
smtp_sasl_auth_enable = yes <-- 「vsmtp.xxxxxx.ne.jp」へSASL認証を試みる
smtp_sasl_password_maps = hash:/etc/postfix/smtp_auth_conf
*smtp_sasl_password_mapsは、中継役のメールサーバ「vsmtp.xxxxxx.ne.jp」の認証用ファイルである。
作り方は下記の様なファイル(/etc/postfix/smtp_auth_conf)を作成して
vsmtp.xxxxxx.ne.jp <アカウント>:<パスワード>
postfixパッケージに入っているpostmapコマンドでハッシュ化する。ハッシュ化したら原材料は削除します
[root@c ~]# postmap /etc/postfix/smtp_auth_conf
[root@c ~]# ls -l /etc/postfix/smtp_auth_conf*
-rw-r--r-- 1 root root 52 3月 15 20:13 /etc/postfix/smtp_auth_conf
-rw-r--r-- 1 root root 12288 3月 15 20:13 /etc/postfix/smtp_auth_conf.db
[root@c ~]#
[root@c ~]# rm /etc/postfix/smtp_auth_conf
*できたファイルには「.db」なる拡張子が付きますが、指定するのは拡張子なしのファイルです
postfixを再起動したらweb.chaperone.jpから直接メールを出してみます。
[illya@c ~]$ /usr/lib/sendmail -t (相手)@gmail.com
Subject: ok?
This is test mail
.
[illya@c ~]$
すると、/var/log/maillogに
[root@c ~]# less /var/log/maillog
:
Mar 15 21:00:20 c postfix/pickup[22141]: E6104C08216E: uid=1002 from=<illya>
Mar 15 21:00:20 c postfix/cleanup[22188]: E6104C08216E: message-id=<20170315120020.E6104C08216E@web.chaperone.jp>
Mar 15 21:00:21 c postfix/qmgr[22142]: E6104C08216E: from=<(スパム対策)illya<at_>chaperone.jp>, (略
Mar 15 21:00:21 c postfix/smtp[22190]: E6104C08216E: to=<(略)@gmail.com>, relay=vsmtp.xxx.ne.jp[x.x.x.x]:587, (略
Mar 15 21:00:21 c postfix/qmgr[22142]: E6104C08216E: removed
:
と記載され、実際にgmailにもメールが届いた。
前述は web.chaperone.jp からの直接メール送信です。
ここでは、内部ドメイン sybyl.local に所属するマシンからのメール送信を記す。
注意 送信者のメールアドレスは <ユーザ>@chaperone.jpです。
単純に、sybyl.localのマシンらは、web.chaperone.jpを踏み台にしてメール出していいよと定義すればいい。
/etc/postfix/main.cfにて、mynetworks と mynetworks_style は共に未定義である。mynetworksは、許可する踏み台を指定できる。未定義であるとweb.chaperone.jpが所属するIPサブネットが対象となる。その対象はpostconfコマンドで確認できて
[root@c ~]# postconf |grep ^mynetworks
mynetworks = 127.0.0.0/8 192.168.0.0/24 [::1]/128 [fe80::]/64
mynetworks_style = subnet
[root@c ~]#
とある。
なので、内部ドメインのsybyl.localはそのIPは192.168.0.0/24を使っているので、何もせずとも踏み台にできるみたい。
っで他のマシン(2nd.sybyl.local[192.168.0.33])からtelnetを使ってメールを出してみる
[root@2nd ~]# telnet 192.168.0.3 25
Trying 192.168.0.3...
Connected to 192.168.0.3.
Escape character is '^]'.
220 web.chaperone.jp ESMTP Postfix
HELO web.chaperone.jp <--- "HELO web.chaperone.jp"と入力
250 web.chaperone.jp
MAIL FROM:<illya<at_>chaperone.jp> <--- "MAIL FROM:<illya<at_>chaperone.jp>"と入力(スパム対策で表記)
250 2.1.0 Ok
RCPT TO:<(略)@gmail.com> <--- "RCPT TO:<(略)@gmail.com>"と入力(メール非表示)
250 2.1.5 Ok
DATA <--- "DATA"と入力
354 End data with <CR><LF>.<CR><LF>
Subject: okokok <--- "Subject: okokok"と入力
<--- 改行
I Have A Dream <--- "I Have A Dream"と入力
. <--- "."を入力
250 2.0.0 Ok: queued as 9D08EC08216E
quit <--- "quit"と入力
221 2.0.0 Bye
Connection closed by foreign host.
[root@2nd ~]#
この結果、中継のweb.chaperone.jpのmaillogには
:
Mar 15 21:59:05 c postfix/smtpd[23264]: 9D08EC08216E: client=2nd.sybyl.local[192.168.0.33]
Mar 15 21:59:58 c postfix/cleanup[23420]: 9D08EC08216E: message-id=<>
Mar 15 21:59:58 c postfix/qmgr[22142]: 9D08EC08216E: from=<illya<at_>chaperone.jp>, size=230, nrcpt=1 (queue active)
Mar 15 21:59:59 c postfix/smtp[23478]: 9D08EC08216E: to=<(略)@gmail.com>, relay=vsmtp.xxx.ne.jp[x.x.x.x]:587, (略
Mar 15 21:59:59 c postfix/qmgr[22142]: 9D08EC08216E: removed
Mar 15 22:00:01 c postfix/smtpd[23264]: disconnect from 2nd.sybyl.local[192.168.0.33]
:
と記録され、<(略)@gmail.com>にもメールは届いた。
故、同じIPサブネットからメールは出せた。