読者です 読者をやめる 読者になる 読者になる

ボールを蹴りたいシステムエンジニア

ボール蹴りが大好きなシステムエンジニア、ボールを蹴る時間確保の為に時間がある時には勉強する。

自宅サーバーのCentOSでメールサーバーの環境構築(Postfix+Dovecot)

自宅サーバーのVMware上のCentOSPostfix+Dovecotを使用したメールサーバーを構築する。
PostfixSMTP認証にはCyrus SASLを使用。

※この記事は自分用作業ログとなり、参考にならないと思いますのでご注意下さい

環境

ファイアウォールルーター
ゲストOS:CentOS6.6(VMWare
IP:192.168.10.30
IP:10.10.0.30
ドメインvmware.local
※同サーバーのDNSサーバーで設定

・メールサーバー
ゲストOS:CentOS6.6(VMWare
IP:192.168.10.40
IP:10.10.0.40
ドメイン:mail.vmware.local

・自宅プロパイダ
OCN

上記ドメインはLAN内でのみ有効なドメイン
自宅サーバーにグローバルなドメインは設定されてない。

やりたかった事、注意点

test@mail.vmware.local
というアドレスを作成して

@gmail.com

にメールを送信、逆も出来るように。

・・・と思っていましたが、
自宅サーバーにグローバルなドメインが設定されていない場合、上記は実現出来ない。
理由として、mail.vmware.localのドメインがLAN内のみ有効で世界のインターネット上では名前解決出来ない為。

更に言うと、自宅サーバーのプロパイダによってはOP25B対策がされており、25番ポートへのアクセスを閉じられている為、その対応が必要になるみたい。
※参考
http://www.walbrix.com/jp/blog/2014-02-gentoo-postfix-relay-gmail.html

結論から言うと、
SMTPサーバー(メール送信処理)を自宅のメールサーバーに設定しメール送信を出来るようにする。
但し、メールリレーによりメール送信処理をプロパイダに委譲する。
メール送信元アドレス、メール送信先アドレスはgmail等の実際に存在するアドレスを指定する。

何か縛りが凄い・・

手順

Postfix+cyrus-sasl

postfixインストール

yum -y install postfix

Postfix設定ファイル編集

vi /etc/postfix/main.cf

追加

# メールサーバーのドメイン(FQDN)
myhostname = mail.vmware.local

# 自サーバーのドメイン
mydomain = vmware.local

# ローカルからのメール送信時の送信元メールアドレス@以降にドメイン名を付加する
myorigin = $mydomain

# メールボックス形式をMaildir形式にする
home_mailbox = Maildir/

# メールサーバーソフト名の隠蔽化
smtpd_banner = $myhostname ESMTP unknown

# 受信メールサイズ制限
message_size_limit = 10485760

バーチャルメールボックス用の設定追記

virtual_mailbox_domains = vmware.local
virtual_mailbox_base = /home/mailuser
virtual_mailbox_maps = hash:/etc/postfix/vmailbox
virtual_minimum_uid = 10000
virtual_uid_maps = static:10000
virtual_gid_maps = static:10000
virtual_alias_maps = hash:/etc/postfix/virtual

virtual_mailbox_domainsには受信するドメインを指定。
virtual_mailbox_baseにはバーチャルメールボックスユーザーを指定。
virtual_uid_mapsとvirtual_gid_mapsはバーチャルメールボックスユーザーのグループIDを指定。

SMTP認証をdovecotで行うための設定追記

smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination


変更

#外部からのメール受信を許可               
inet_interfaces = all

# 自ドメイン宛メールを受信できるようにする
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain

#ipv6で送信しないように
inet_protocols = ipv4 

追加
存在しないユーザー宛メールをunknown_userへ配送

local_recipient_maps =
luser_relay = unknown_user@localhost

unknown_user宛メールを破棄

echo unknown_user: /dev/null >> /etc/aliases

サブミッションポート(587)を有効にする。
サブミッションポートとは、TCP 25番ポート以外でメールの送信を行うためのポート。
SMTP認証(SMTP AUTH)」と併せて利用するのが一般的。
OBP25B(迷惑メール対策)の為に使用する。

master.cf を編集。

vi /etc/postfix/master.cf 

コメントアウトを外し以下のように設定
smtpd_tls_security_levelの行はコメントアウトのまま

submission inet n       -       n       -       -       smtpd                                                      
#  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes                                                                                    
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject                                                    
  -o milter_macro_daemon_name=ORIGINATING 

SMTP認証ファイルパスディレクトリ作成

mkdir -p /var/spool/postfix/private/auth

権限付与

chown postfix:postfix -R /var/spool/postfix/private/
chmod 700 -R /var/spool/postfix/private/

バーチャルメールボックスのエイリアスのデータベース更新

postmap /etc/postfix/virtual

cyrus-saslインストール

yum -y install cyrus-sasl
yum -y install cyrus-sasl-plain cyrus-sasl-md5

saslauthd起動

/etc/rc.d/init.d/saslauthd start

自動起動設定

chkconfig saslauthd on

SMTPAuthを利用する為、smtpd.confを修正。

vi /etc/sasl2/smtpd.conf

以下のように設定する

pwcheck_method: auxprop

Maildir形式メールボックスを作成する。
Postfixのメール格納形式は共有ディレクトリ形式(「/var/spool/mail/ユーザー名」というファイルに全てのメールが蓄積されていく形式)だが、アクセス性能改善及びセキュリティ強化の観点からMaildir形式へ移行する。

新規ユーザー追加時に自動でホームディレクトリにMaildir形式のメールボックスが作成されるようにする。

mkdir -p /etc/skel/Maildir/new/

パーミッション設定

chmod -R 700 /etc/skel/Maildir/

Postfix起動

/etc/rc.d/init.d/postfix restart

自動起動設定

chkconfig postfix on

iptablessmtpポート開放

iptables -A INPUT -p tcp --dport 25 -j ACCEPT

Dovecot

Dovecotインストール

yum -y install dovecot

10-mail.conf編集

vi /etc/dovecot/conf.d/10-mail.conf 

追加

# メールボックス形式をMaildir形式とする              
mail_location = maildir:~/Maildir

# ※OpenSSH+Chrootを導入している場合のみ 
valid_chroot_dirs = /home

10-auth.conf編集

vi /etc/dovecot/conf.d/10-auth.conf

コメントアウトを外す

!include auth-passwdfile.conf.ext

コメントアウトする

#!include auth-system.conf.ext

変更

# プレインテキスト認証を許可
# ※メールサーバー間通信内容暗号 ((OpenSSL+Postfix+Doveco))
disable_plaintext_auth = no

auth_mechanisms = plain login

10-ssl.conf編集

/etc/dovecot/conf.d/10-ssl.conf
# SSL接続無効
# ※メールサーバー間通信内容暗号化(OpenSSL+Postfix+Dovecot)導入必須
ssl = no

auth-passwdfile.conf.extファイルを編集

vi /etc/dovecot/conf.d/auth-passwdfile.conf.ext

変更前

passdb {
  driver = passwd-file
  args = scheme=CRYPT username_format=%u /etc/dovecot/users
}

userdb {
  driver = passwd-file
  args = username_format=%u /etc/dovecot/users
}

変更後

passdb {
  driver = passwd-file
  args = /etc/dovecot/passwd                                                                                       
}

userdb {
  driver = passwd-file
  args = /etc/dovecot/passwd                                                                                       
}


dovecot.conf編集

vi /etc/dovecot/dovecot.conf

エラー時の調査用にデバッグモードに設定

auth_verbose = yes
auth_debug = yes


Dovecot起動

/etc/rc.d/init.d/dovecot start

自動起動設定

chkconfig dovecot on

iptablesでポート開放

iptables -A INPUT -p tcp --dport 110 -j ACCEPT
iptables -A INPUT -p tcp --dport 143 -j ACCEPT

メールユーザー作成

メールボックス用のグループとバーチャルメールボックスユーザーを作成
※ここではmailuserというグループ名とユーザー名としているが任意の名前でOK
グループIDを10000で指定しているが任意のIDでOK

groupadd -g 10000 mailuser
useradd -g 10000 -g mailuser -d /home/mailuser -s /sbin/nologin mailuser  

以後、メールアカウント追加時は下記作業から。

メールボックス定義ファイル作成

vi /etc/postfix/vmailbox

メールボックス メールボックスディレクトリパス
を追記。
メールアドレス:test@mail.vmware.local
メールアドレスディレクトリ:test
とする場合は

test@mail.vmware.local test

データベースを更新

postmap /etc/postfix/vmailbox

メール転送したい場合は下記ファイルに追記してデータベースを更新しますが、今回はメール転送は行わない為特に編集しません。
/etc/postfix/virtual

パスワードを作成します。
dovecot2からdoveadmというコマンドに変わったようです。
(dovecot1ではdovecotpw)
下記では「testpassword」というパスワードにハッシュアルゴリズム「HMAC-MD5」を使用してパスワードを生成しています。

doveadm pw -s HMAC-MD5 -p testpassword
{HMAC-MD5}3c4936f08f79f2bd70c0b42de4449f2286cfe22749d81c932bf2bc9e95bff4a2

パスワードファイルpasswd-fileを作成し、上記コマンドで生成したパスワードを登録します。

vi /etc/dovecot/passwd

追記

test@mail.vmware.local:{HMAC-MD5}3c4936f08f79f2bd70c0b42de4449f2286cfe22749d81c932bf2bc9e95bff4a2:502:10000:::::Maildir:/home/mailuser/Maildir/test/

※ユーザーIDとグループIDはpasswdファイルから確認する

cat /etc/passwd | grep mailuser
mailuser:x:502:10000::/home/mailuser:/sbin/nologin

メールボックスディレクトリ作成

mkdir -p /home/mailuser/Maildir/test/

権限付与

chown mailuser:mailuser -R /home/mailuser/Maildir/test/
chmod 700 -R /home/mailuser/Maildir/test/

telnetを使用してPOP3でログイン出来るか確認

telnet無い場合はインストール

yum -y install telnet

POP3ポート確認

telnet localhost 110

Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
+OK Dovecot ready.
USER test@mail.vmware.local ←入力
+OK
PASS testpassword ←入力
+OK Logged in.

確認出来たらquitでログアウト。

telnetを使用してIMAPでログイン出来るか確認

telnet localhost 143

1 LOGIN test@mail.vmware.local testpassword ←入力(左端の1も忘れずに)
1 OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE SORT SORT=DISPLAY THREAD=REFERENCES THREAD=REFS MULTIAPPEND UNSELECT CHILDREN NAMESPACE UIDPLUS LIST-EXTENDED I18NLEVEL=1 CONDSTORE QRESYNC ESEARCH ESORT SEARCHRES WITHIN CONTEXT=SEARCH LIST-STATUS] Logged in

2 list "" ←入力(左端の2も忘れずに)

3 LOGOUT ←入力(左端の3も忘れずに)

ログインできない場合は/var/log/maillogログを確認する。

メールでのSMTP認証用ユーザー名、パスワードとシステムのユーザー名、パスワードを別々にする。
※OS上のパスワードと同じで良いならこのコマンドは不要

echo testpassword | saslpasswd2 -p -u mail.vmware.local -c test 
  • p ... 上記のようにecho等使用してパイプでパスワードを設定(パイプモード)
  • u ... realm(ドメイン名)を指定、main.cfの「myhostname」の値と同じ
  • c 設定するユーザーを指定

SMTP認証用ユーザー名、パスワード確認

sasldblistusers2

test@mail.vmware.local: userPassword

削除する場合は

saslpasswd2 -u mail.vmware.local -d test

sasldb2所有グループをpostfixに変更※最初の1回のみ
※このコマンドは最初の1回のみ、次回からのユーザー作成時は不要。

chgrp postfix /etc/sasldb2

iptables設定

ファイアウォールルーター

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 110 -j DNAT --to 10.0.10.40
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 25 -j DNAT --to 10.0.10.40
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 465 -j DNAT --to 10.0.10.40
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 587 -j DNAT --to 10.0.10.40

iptables -A FORWARD -m tcp -p tcp --dst 10.0.10.40 --dport 110 -j ACCEPT
iptables -A FORWARD -m tcp -p tcp --dst 10.0.10.40 --dport 25 -j ACCEPT
iptables -A FORWARD -m tcp -p tcp --dst 10.0.10.40 --dport 465 -j ACCEPT
iptables -A FORWARD -m tcp -p tcp --dst 10.0.10.40 --dport 587 -j ACCEPT

・メールサーバー

iptables -A INPUT -p tcp -s 192.168.10.0/24 --dport 110 -j ACCEPT
iptables -A INPUT -p tcp -s 192.168.10.0/24 --dport 25 -j ACCEPT
iptables -A INPUT -p tcp -s 192.168.10.0/24 --dport 465 -j ACCEPT
iptables -A INPUT -p tcp -s 192.168.10.0/24 --dport 587 -j ACCEPT
iptables -A INPUT -p tcp -s 10.0.10.0/24 --dport 110 -j ACCEPT
iptables -A INPUT -p tcp -s 10.0.10.0/24 --dport 25 -j ACCEPT
iptables -A INPUT -p tcp -s 10.0.10.0/24 --dport 465 -j ACCEPT
iptables -A INPUT -p tcp -s 10.0.10.0/24 --dport 587 -j ACCEPT

iptables -A OUTPUT -p tcp -d 192.168.10.0/24 --sport 110 -j ACCEPT
iptables -A OUTPUT -p tcp -d 192.168.10.0/24 --sport 25 -j ACCEPT
iptables -A OUTPUT -p tcp -d 192.168.10.0/24 --sport 465 -j ACCEPT
iptables -A OUTPUT -p tcp -d 192.168.10.0/24 --sport 587 -j ACCEPT
iptables -A OUTPUT -p tcp -d 10.0.10.0/24 --sport 110 -j ACCEPT
iptables -A OUTPUT -p tcp -d 10.0.10.0/24 --sport 25 -j ACCEPT
iptables -A OUTPUT -p tcp -d 10.0.10.0/24 --sport 465 -j ACCEPT
iptables -A OUTPUT -p tcp -d 10.0.10.0/24 --sport 587 -j ACCEPT
メール送信時エラー出たらmaillogを確認

メッセージが出た場合はログ確認

less /var/log/maillog
maillogエラー1

下記エラー出たけどmain.cf編集で解決した。

Feb  9 05:47:32 web dovecot: pop3-login: Aborted login (no auth attempts): rip=192.168.10.106, lip=10.0.10.40
Feb  9 05:47:32 web postfix/smtpd[59191]: connect from unknown[192.168.10.106]
Feb  9 05:47:32 web postfix/smtpd[59191]: warning: SASL: Connect to private/auth failed: Connection refused
Feb  9 05:47:32 web postfix/smtpd[59191]: fatal: no SASL authentication mechanisms
Feb  9 05:47:33 web postfix/master[58757]: warning: process /usr/libexec/postfix/smtpd pid 59191 exit status 1
Feb  9 05:47:33 web postfix/master[58757]: warning: /usr/libexec/postfix/smtpd: bad command startup -- throttling

/etc/postfix/main.cf
を以下のように変更

変更前

smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth

変更後

smtpd_sasl_type = cyrus
smtpd_sasl_path = smtpd
maillogエラー2

下記エラーの場合はpasswdに設定したパスワードとsaslpasswd2に設定したパスワードに差異がある可能性あり。

Feb  9 22:14:06 web postfix/smtpd[59778]: connect from unknown[192.168.10.106]                                     
Feb  9 22:14:06 web postfix/smtpd[59778]: warning: SASL authentication failure: Password verification failed       
Feb  9 22:14:06 web postfix/smtpd[59778]: warning: unknown[192.168.10.106]: SASL PLAIN authentication failed: authentication failure                                                                                                  
Feb  9 22:14:06 web postfix/smtpd[59778]: warning: unknown[192.168.10.106]: SASL LOGIN authentication failed: authentication failure                                                                                              
maillogエラー3

thunderbirdでメール送信されたけどメール受信されない。

/var/log/maillogではメール送受信ログある

Feb  9 22:50:18 web postfix/local[60127]: 8CF973158: to=<test@mail.vmware.local>, relay=local, delay=0.12, delays=0.07/0.03/0/0.01, dsn=2.0.0, status=sent (delivered to maildir)

Feb  9 22:50:20 web dovecot: auth: Debug: master out: USER#011679870465#011test@mail.vmware.local#011uid=502#011gid=10000#011mail=Maildir:/home/mailuser/Maildir/test/

メールボックスディレクトリは空

ls -lht /home/mailuser/Maildir/test/new/                                                             
合計 0

ls -lht /home/mailuser/Maildir/test/cur/                                                             
合計 0

spool側にも届いてない

ls -lht /var/spool/mail/mailuser 
-rw-rw----. 1 mailuser mail 0  2月  8 20:15 2017 /var/spool/mail/mailuser

問題切り分けの為、postfixの設定でsmtpを一旦無効にして
/etc/postfix/main.cf

smtpd_sasl_auth_enable = no

再度メール送信

iptablesで25番ポート落とされてるぽい?

Feb  9 23:20:13 web kernel: Dropped by OUTPUT: IN= OUT=eth0 SRC=10.0.10.40 DST=108.177.97.26 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=45754 DF PROTO=TCP SPT=51835 DPT=25 WINDOW=14600 RES=0x00 SYN URGP=0 
Feb  9 23:20:14 web kernel: Dropped by OUTPUT: IN= OUT=eth0 SRC=10.0.10.40 DST=108.177.97.26 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=45755 DF PROTO=TCP SPT=51835 DPT=25 WINDOW=14600 RES=0x00 SYN URGP=0 
Feb  9 23:20:16 web kernel: Dropped by OUTPUT: IN= OUT=eth0 SRC=10.0.10.40 DST=108.177.97.26 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=45756 DF PROTO=TCP SPT=51835 DPT=25 WINDOW=14600 RES=0x00 SYN URGP=0

認証パスワード作

[root@web ~]# printf "%s\0%s\0%s" test@mail.vmware.local test@mail.vmware.local testpassword | openssl base64 -e | 
tr -d '\n'; echo                                                                                                   
dGVzdEBtYWlsLnZtd2FyZS5sb2NhbAB0ZXN0QG1haWwudm13YXJlLmxvY2FsAHRlc3RwYXNzd29yZA==


成功例??

[root@web ~]# telnet localhost 587
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 mail.vmware.local ESMTP unknown
EHLO mail.vmware.local
250-mail.vmware.local
250-PIPELINING
250-SIZE 10485760
250-VRFY
250-ETRN
250-AUTH LOGIN PLAIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
AUTH PLAIN dGVzdEBtYWlsLnZtd2FyZS5sb2NhbAB0ZXN0QG1haWwudm13YXJlLmxvY2FsAHRlc3RwYXNzd29yZA==
235 2.7.0 Authentication successful
quit
221 2.0.0 Bye
Connection closed by foreign host.

認証はOK
続いて送信

[root@web ~]# telnet localhost 587                                                                               
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 mail.vmware.local ESMTP unknown
EHLO mail.vmware.local
250-mail.vmware.local
250-PIPELINING
250-SIZE 10485760
250-VRFY
250-ETRN
250-AUTH LOGIN PLAIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
AUTH PLAIN dGVzdEBtYWlsLnZtd2FyZS5sb2NhbAB0ZXN0QG1haWwudm13YXJlLmxvY2FsAHRlc3RwYXNzd29yZA==
235 2.7.0 Authentication successful
mail from:test@mail.vmware.local
250 2.1.0 Ok
rcpt to:test@mail.vmware.local
250 2.1.5 Ok
data
354 End data with <CR><LF>.<CR><LF>
subject testtitle
honbun
.
250 2.0.0 Ok: queued as 345B3315C
quit
221 2.0.0 Bye
Connection closed by foreign host.

ドメインアドレスにメール送信

[root@web ~]# telnet localhost 587
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 mail.vmware.local ESMTP unknown
EHLO mail.vmware.local
250-mail.vmware.local
250-PIPELINING
250-SIZE 10485760
250-VRFY
250-ETRN
250-AUTH LOGIN PLAIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
AUTH PLAIN dGVzdEBtYWlsLnZtd2FyZS5sb2NhbAB0ZXN0QG1haWwudm13YXJlLmxvY2FsAHRlc3RwYXNzd29yZA==
235 2.7.0 Authentication successful
mail from:test@mail.vmware.local
250 2.1.0 Ok
rcpt to:***@gmail.com
250 2.1.5 Ok
data
354 End data with <CR><LF>.<CR><LF>
subject testtitle
honbun
.
250 2.0.0 Ok: queued as 0B8E5315C
quit
221 2.0.0 Bye
Connection closed by foreign host.
maillogエラー4

どうやらOP25Bという問題のおかげで直接25番portでSMTPできていないみたい。

Feb 11 08:51:14 web postfix/smtp[61998]: connect to gmail-smtp-in.l.google.com[64.233.188.27]:25: Connection timed out
Feb 11 08:51:14 web postfix/smtp[61998]: connect to alt1.gmail-smtp-in.l.google.com[2607:f8b0:4003:c17::1b]:25: Network is unreachable
Feb 11 08:51:44 web postfix/smtp[61998]: connect to alt1.gmail-smtp-in.l.google.com[173.194.67.27]:25: Connection timed out
Feb 11 08:51:44 web postfix/smtp[61998]: connect to alt2.gmail-smtp-in.l.google.com[2607:f8b0:4001:c0b::1b]:25: Network is unreachable

送信失敗したメールはキューに溜まってるみたい。
Connection timed outが発生してる。

postqueue -p
-Queue ID- --Size-- ----Arrival Time---- -Sender/Recipient-------
32BD73163       369 Sat Feb 11 09:14:30  test@mail.vmware.local
(connect to alt4.gmail-smtp-in.l.google.com[74.125.192.26]:25: Connection timed out)
                                         ***@gmail.com

一旦キュー削除

postsuper -d ALL deferred

外部へのメールを送るメールサーバーを指定。
これを指定しないとデフォルトだと外部のメールサーバーを直接指定するらしい。
なので、これを指定しなかったので送信時にgoogleのメールサーバー見に行ってたみたい。
以下のように自サーバーのメールサーバーを指定する。

relayhost = [mail.vmware.local]

設定後はpostfixを再起動

同じようにtenletから再度メール送信したけどまたエラー。
だけど今度はメッセージ変わった
一応ちゃんと自サーバーを見てるみたい

Feb 11 10:08:24 web postfix/smtp[63630]: connect to mail.vmware.local[192.168.10.40]:25: No route to host
Feb 11 10:08:24 web postfix/smtp[63628]: 80BCA3167: to=<***@gmail.com>, relay=none, delay=1246, delays=1243/0.07/3/0, dsn=4.4.1, status=deferred (connect to mail.vmware.local[192.168.10.40]:25: No route to host)

※参考までに、DNSを変更後もpostfixのログで変更前のdns逆引きされてる場合はpostfixの再起動が必要。

No route to hostって出てるので試しにtelnetで接続

telnet 192.168.10.40 25

Trying 192.168.10.40...
telnet: connect to address 192.168.10.40: No route to host

繋がらない・・

pingも繋がらない

ping 192.168.10.40

PING 192.168.10.40 (192.168.10.40) 56(84) bytes of data.
From 192.168.10.30 icmp_seq=2 Destination Host Unreachable
From 192.168.10.30 icmp_seq=3 Destination Host Unreachable

どうやら自サーバーのDNS設定で繋がってないネットワークに対して正引き設定していたようなので、bindのゾーン情報ファイルを以下のように修正。

変更前

mail    IN A     192.168.10.40   

変更後

mail    IN A     10.0.10.40   

設定後はnamed再起動

再度telnetで587でメール送信。
まだメール送信できなかったけどエラーメッセージ変わった

Feb 11 10:19:32 web postfix/smtp[63701]: 8119A3163: to=<***@gmail.com>, relay=none, delay=15, delays=15/0/0/0, dsn=4.3.5, status=deferred (mail for mail.vmware.local loops back to myself)

調査した所、relayhostにローカルのメールサーバーを指定するとメールリレーがループしてエラーなるらしい。
なので、relayhostにはローカルのメールサーバーを指定するべきではないみたい。
relayhostには自身のメールサーバーの処理すべきドメインのみ指定するべきみたい。
ここでいうmail.vmware.local

で、自宅サーバーなどの場合、メールサーバーを構築してメール送信しようとしてもプロパイダ(ISP)側のOP25B対策によりメールが送れない事があるらしいので
relayhostにはプロパイダのSMTPを指定する必要があるみたい

relayhost = [smtp.***.ne.jp]

同じようにmyhostnameとmydomainにもプロパイダのドメインを設定。

myhostname = ***.ne.jp
mydomain = ***.ne.jp


そうするとエラーメッセージ変わった

Feb 11 18:07:17 web postfix/smtp[68579]: 1042D31A7: to=<***@gmail.com>, relay=smtp.***.ne.jp[203.160.31.73]:25, delay=0.52, delays=0.47/0/0.04/0.01, dsn=4.1.8, status=deferred (host smtp.***.ne.jp[***.***.***.***] said: 450 4.1.8 <test@mail.vmware.local>: Sender address rejected: Domain not found (in reply to RCPT TO command))

どうやらプロパイダ側のDNSのでこちらのLAN内のドメインが名前解決出来ないからみたい。

なので送信元アドレスを実際に存在してるドメインを指定してみる。

telnetモードにして

telnet localhost 587

HELO ホスト名入力

HELO mail.vmware.local

SMTP-AUTHのパスワード入力
※自サーバーアカウント(ここで言うtest@mail.vmware.local)のパスワード

AUTH PLAIN dGVzdEBtYWlsLnZtd2FyZS5sb2NhbAB0ZXN0QG1haWwudm13YXJlLmxvY2FsAHRlc3RwYXNzd29yZA==

送信元アドレス

mail from:***@ocn.ne.jp

宛先アドレス

rcpt to:***@gmail.com


dataを入力して

data

タイトル

Subject:hoge

メール文

bunsyou

.を入力してtelnetを終了

.

メーラーを確認するとメールが届いていた。

最後に

久しぶりにかなりハマりました。
はじめに書いたように、OP25B対策がされているプロパイダかつ、ドメインが無い自宅サーバーでは一般的なメール送受信可能がメールサーバー構築は難しいです。
出来る方法があればご教授頂きたく・・・
次回はVPNサーバーを借りてメールサーバーを構築してみます。