logo

Now Loading...

WEBサイト作りノウハウ WEBノウハウメモ

  • HOME
  • 記事一覧
  • VPSで独自ドメインを使用したメールサーバ構築

VPSで独自ドメインを使用したメールサーバ構築

カテゴリー:サーバ関連メモ

作成日付:2019年9月22日

更新日付:2020年5月7日

VPS(CentOS release 6.10 (Final))をメールサーバにし、来たメールをGmailに転送する設定を行ったメモ。OP25B設定でspamメールやvirusメールの送信を抑制する。

目的

さくらVPSでpostfixとdovecotを使用して、独自ドメインを使用したメールアドレスを作成した時のメモ。
VPSをメールサーバにしてメールの送受信を行う。

  • 独自ドメインでVPSにメールサーバを構築する
  • 独自ドメインに届いたメールをGmailに転送する

結果

作成するメールサーバ構成

OSCentOS release 6.10 (Final)
SMTPサーバPostfix
POP/IMAPサーバDovecot
転送メール元webmemo@webmemo.tokyo
転送メール先webmemo@gmail.com
その他さくらVPS2Gプランを使用している。

使用ソフトウェア:以下


[root@xxx xxx]# rpm -qa | grep "postfix\|dovecot\|cyrus-sasl"
cyrus-sasl-plain-2.1.23-15.el6_6.2.x86_64
cyrus-sasl-2.1.23-15.el6_6.2.x86_64
cyrus-sasl-lib-2.1.23-15.el6_6.2.x86_64
postfix-2.6.6-8.el6.x86_64
dovecot-2.0.9-22.el6.x86_64
cyrus-sasl-devel-2.1.23-15.el6_6.2.x86_64

iptablesの結果


[root@xxxx xxxx]# iptables -nL
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
・・・省略
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:25
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:110
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:143
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:587
・・・省略

DNS MXレコード設定

さくらで取得したドメインに作成したMXレコード

サクラVPS mx recordの設定値

Gmailに送信するために作成したTXTレコード

サクラVPS txt recordの設定値

SMTPのサーバ(Postfix)の設定


[root@xxxx xxxx]# postconf -n alias_database = hash:/etc/aliases alias_maps = hash:/etc/aliases broken_sasl_auth_clients = yes command_directory = /usr/sbin config_directory = /etc/postfix daemon_directory = /usr/libexec/postfix data_directory = /var/lib/postfix debug_peer_level = 2 home_mailbox = Maildir/ html_directory = no inet_interfaces = all inet_protocols = ipv4 mail_owner = postfix mailq_path = /usr/bin/mailq.postfix manpage_directory = /usr/share/man mydestination = $myhostname, localhost.$mydomain, localhost mydomain = webmemo.tokyo myhostname = webmemo.tokyo mynetworks_style = host myorigin = $mydomain newaliases_path = /usr/bin/newaliases.postfix queue_directory = /var/spool/postfix readme_directory = /usr/share/doc/postfix-2.6.6/README_FILES relayhost = [smtp.gmail.com]:587 sample_directory = /usr/share/doc/postfix-2.6.6/samples sendmail_path = /usr/sbin/sendmail.postfix setgid_group = postdrop smtp_sasl_auth_enable = yes smtp_sasl_mechanism_filter = plain smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd smtp_sasl_tls_security_options = noanonymous smtp_tls_CApath = /etc/pki/tls/certs/ca-bundle.crt smtp_use_tls = yes smtpd_recipient_restrictions = permit_sasl_authenticated, reject_unauth_destination smtpd_sasl_auth_enable = yes unknown_local_recipient_reject_code = 550

POP3/IMAPのサーバー(Dovecot)の設定


[root@xxxx xxxx]# dovecot -n # 2.0.9: /etc/dovecot/dovecot.conf # OS: Linux 2.6.32-358.14.1.el6.x86_64 x86_64 CentOS release 6.10 (Final) auth_debug = yes auth_mechanisms = plain login auth_verbose = yes disable_plaintext_auth = no mail_location = maildir:~/Maildir mbox_write_locks = fcntl passdb { driver = pam } protocols = imap pop3 ssl_cert =

方法

フロー

1ポートの開放
2DNSの設定
3SMTPのサーバ(Postfix)の設定
4Submissionの設定
5POP3/IMAPのサーバ(Dovecot)の設定
6メールアカウントの設定
7動作の確認
8転送設定

ポートの開放

メール制御をするために、以下のポートを開ける。 iptablesのファイルを編集した。

ポート番号プロトコル
25SMTP
110POP3
143IMAP
587SMPT(Submission)

firewall設定として以下を追記した。


[root@xxxx xxxx]# vi /etc/sysconfig/iptables
# 以下を追記

-A INPUT -p tcp --dport 25   -j ACCEPT
-A INPUT -p tcp --dport 110   -j ACCEPT
-A INPUT -p tcp --dport 143   -j ACCEPT
-A INPUT -p tcp --dport 587   -j ACCEPT

iptablesに追記した値を反映させるために再起動


[root@xxxx xxxx]# service iptables restart

編集結果の確認


[root@xxxx xxxx]# iptables -nL
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
・・・省略
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:25
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:110
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:143
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:587
・・・省略

DNSの設定

DNSにMXレコードを設定する。
画像はさくらで取得したドメインに設定したMXレコード

サクラVPS mx recordの設定値

SMTPのサーバ(Postfix)の設定

※迷惑メールの不正中継に利用されずに外部から外部宛に送信できるようにするため、SMTP認証機能を有効にする。
(実際知らないIPからのアクセスがたくさんある...)

postfixを使うように設定変更


[root@xxxx xxxx]# sudo alternatives --config mta
1 プログラムがあり 'mta' を提供します。

  選択       コマンド
-----------------------------------------------
*+ 1           /usr/sbin/sendmail.postfix

Postfix設定ファイルを以下のように変更する。


[root@xxxx xxxx]# vi /etc/postfix/main.cf
 
# ドメイン設定
# domain 追加をする
myhostname = webmemo.tokyo
mydomain = webmemo.tokyo

# 以下コメントアウトをはずす
myorigin = $mydomain

# 受信設定
# コメントアウトをはずす
inet_interfaces = all

# メールボックスの設定
# コメントアウトをはずす
home_mailbox = Maildir

# inet_interfacesの設定

inet_interfaces = all
#inet_interfaces = localhost

# SMTP認証の設定
# 最終行に以下追加

smtpd_sasl_auth_enable = yes
broken_sasl_auth_clients = yes
smtpd_recipient_restrictions = permit_sasl_authenticated, reject_unauth_destination

設定を反映させるために、postfixとSMTP認証(saslauthd)を起動。


# デーモンあげる
[root@xxxx xxxx]# service postfix restart
postfix を停止中:                                          [  OK  ]
postfix を起動中:                                          [  OK  ]
[root@xxxx xxxx]# service saslauthd start
saslauthd を起動中:
                                        [  OK  ]
# サーバ起動時に自動起動できるようにchkconfigもonにしておく。
[root@xxxx xxxx]# chkconfig postfix on
[root@xxxx xxxx]# chkconfig saslauthd on

Submissionの設定

OP25B(Outbound Port 25 Blocking)を行っていると、VPSのメールサーバーに接続することができず、メールを送信することができない。
そこで、メールソフトからの通信をSubmissionポート(587番)で受けるように設定することで、メールを送信することができるようにする。


[root@xxxx xxxx]# vi /etc/postfix/master.cf

# コメントアウトを外す
#submission inet n       -       n       -       -       smtpd
#  -o smtpd_sasl_auth_enable=yes
#  -o smtpd_client_restrictions=permit_sasl_authenticated,reject

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

[root@xxxx xxxx]# sudo service postfix reload
postfix を停止中:                                          [  OK  ]
postfix を起動中:                                          [  OK  ]

POP3/IMAPのサーバ(Dovecot)の設定

メールを受信するための設定をする。

メールを保存する場所は、/home/各ユーザ名/Maildirの下とする。


[root@xxxx xxxx]# vi /etc/dovecot/conf.d/10-mail.conf

# 以下の行を追加する。
# If you're using mbox, giving a path to the INBOX file (eg. /var/mail/%u)
# isn't enough. You'll also need to tell Dovecot where the other mailboxes are
# kept. This is called the "root mail directory", and it must be the first
# path given in the mail_location setting.
#
mail_location = maildir:~/Maildir

[root@xxxx xxxx]# vi /etc/dovecot/conf.d/10-auth.conf
disable_plaintext_auth = no
auth_mechanisms = plain login

[root@xxxx xxxx]# vi /etc/dovecot/conf.d/10-ssl.conf
ssl = yes

[root@xxxx xxxx]#  vi /etc//dovecot.conf
 protocols = imap pop3

Dovecotの起動と自動起動


[root@xxxx ~]# service dovecot restart
Dovecot Imap を停止中:                                     [失敗]
Dovecot Imap を起動中:                                     [  OK  ]
[root@xxxx ~]# sudo chkconfig dovecot on

メールアカウントの設定

メールを各ユーザ毎に管理するためにユーザアカウントを作成する。
また、Dovecotの設定で記載したメールボックスも作成する。

アドレスは「ユーザー名@ドメイン名」


# ユーザアカウントの作成
[root@xxxx ~]# useradd webmemo
[root@xxxx ~]# passwd webmemo
ユーザー webmemo のパスワードを変更。
新しいパスワード:
新しいパスワードを再入力してください:
passwd: 全ての認証トークンが正しく更新できました。


# メールボックスの作成
[root@xxxx ~]# mkdir /home/webmemo/Maildir
[root@xxxx ~]# mkdir /home/webmemo/Maildir/cur
[root@xxxx ~]# mkdir /home/webmemo/Maildir/new
[root@xxxx ~]# mkdir /home/webmemo/Maildir/tmp
[root@xxxx ~]# chown -R webmemo:webmemo /home/webmemo/Maildir/*

動作の確認

この時点までのメール設定で、送受信できるか確認する。


# 送信テスト
[root@xxxx ~]# echo "本文" | mail -s "タイトル" -r webmemo@webmemo.tokyo webmemo@webmemo.tokyo


# newにメールが入ってくる
[root@xxxx Maildir]# ls -lR
.:
合計 12
drwxr-xr-x 2 webmemo webmemo 4096  9月 18 22:07 2019 cur
drwxr-xr-x 2 webmemo webmemo 4096  9月 18 22:17 2019 new
drwxr-xr-x 2 webmemo webmemo 4096  9月 18 22:17 2019 tmp

./cur:
合計 0

./new:
合計 4
-rw------- 1 webmemo webmemo 532  9月 18 22:17 2019 1568812627.Vfc03Ic24bc7M887243.xxxx.sakura.ne.jp

./tmp:
合計 0

転送設定

Posixの設定としてaliasesを編集する。


[root@xxxx Maildir]# vi /etc/aliases
# ユーザー名と転送先を記載
webmemo: webmemo@gmail.com

エイリアスの反映


[root@xxxx Maildir]# newaliases
[root@xxxx Maildir]#

参考

その他詳細

メールソフトの設定

設定項目設定する値
SMTPサーバーメールサーバのIPアドレスまたはホスト名
SMTPサーバーのポート番号587(OP25B対策)
POP3/IMAPサーバーメールサーバのIPアドレスまたはホスト名
POP3サーバーのポート番号110
IMAPサーバーのポート番号143
ユーザー名メール用に作成したアカウント
パスワードメール用に作成したパスワード
メールアドレスユーザー名@ドメイン名

gmail転送設定

Gmailに転送設定をする際に以下エラーがでた
原因はIPv6を使おうとしていたためということで、IPv4を使うように設定する。


 connect to smtp.gmail.com[2404:6800:4008:c06::6d]:587: Network is unreachable

[root@xxxx xxxx]# vi /etc/postfix/main.cf
inet_protocols = ipv4 

また、gmail認証を行う。
以下から取得した文字列をDNS設定にてTXTレコードとして登録する。

https://postmaster.google.com/managedomains

google-site-verification=DwaMj8RbgX-inv-B9N0tElZNk82u23bCFqZQkXXXXXX

サクラVPS txt recordの設定値

[root@xxxx xxxx]# vi /etc/postfix/main.cf

# using gmail smtp server to relay mails
relayhost = [smtp.gmail.com]:587
smtp_use_tls = yes
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_tls_security_options = noanonymous
smtp_sasl_mechanism_filter = plain
smtp_tls_CApath = /etc/pki/tls/certs/ca-bundle.crt

ログインユーザー情報ファイルを作成する。


[root@xxxx xxxx]# vi /etc/postfix/sasl_passwd
[smtp.gmail.com]:587 xxxx@gmail.com:パスワード

/etc/postfix/sasl_passwd.db が生成。


# postmap /etc/postfix/sasl_passwd

# chown root:root /etc/postfix/sasl_passwd
# chmod 600 /etc/postfix/sasl_passwd
# chown root:root /etc/postfix/sasl_passwd.db
# chmod 600 /etc/postfix/sasl_passwd.db
# service postfix restart

gmailで信頼性のひくいアプリを許可する

ログの場所

メール設定を解析するためのログの場所


[root@xxxx ~]# ls -l /var/log/maillog
-rw------- 1 root root 1489182  9月 22 00:02 2019 /var/log/maillog

Devcotのデバッグ設定

Dovecotのエラーを詳細表示する。


[root@xxxx ~]# vi /etc/dovecot/dovecot.conf
auth_verbose = yes
auth_debug = yes

各設定値の確認方法

その他、メール設定確認用メモ


# Firewall設定で開けたポートからログインできるか確認する。
[root@xxxx ~]# telnet localhost 25
Trying ::1...
Connected to localhost.
Escape character is '^]'.
220 webmemo.tokyo ESMTP Postfix

[root@xxxx ~]#  telnet localhost 110
Trying ::1...
Connected to localhost.
Escape character is '^]'.
+OK Dovecot ready.

[root@xxxx ~]#  telnet localhost 143
Trying ::1...
Connected to localhost.
Escape character is '^]'.
* OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE STARTTLS AUTH=PLAIN] Dovecot ready.

# Postfix の設定のデフォルトと異なる設定を確認する
[root@xxxx ~]#  postconf -n
 
# Dovecotの設定ファイルの場所確認
[root@xxxx ~]# dovecot -n | head -1

# Dovecotのデフォルトと異なる設定を確認する
[root@xxxx ~]# dovecot -n

# MXレコードの確認
[root@xxxx ~]#  host -t mx webmemo.tokyo
webmemo.tokyo mail is handled by 10 webmemo.tokyo.

# 失敗したメール送信の確認
[root@xxxx ~]#  postqueue -p
# キューをすべて削除
[root@xxxx ~]#  postsuper -d ALL deferred