さくらのVPSに送信メールサーバを設定する方法

さくらのVPSに送信メールサーバを設定する方法

Posted at August 11,2020 11:55 PM
Tag:[Linux, SMTP]

さくらのVPSに送信メールサーバを設定する方法を紹介します。

1.はじめに

VPSにインストールしたMovable Typeからメールを送信する必要が生じました。

が、契約しているVPSにはメールに関する設定を何も行っていません。

色々調べたところ、送信メールサーバにはPostfixが簡単らしいので、これを使うことにしました。

sendmailは色々大変らしいです。

ということで、さくらのVPSに送信メールサーバを設定する方法を紹介します。

2.Postfixのインストール

yumコマンドでPostfixをインストールします。

# yum -y install postfix

3.main.cfの編集

Postfixの設定ファイル、main.cfをvimで編集します。

# vim /etc/postfix/main.cf
# INTERNET HOST AND DOMAIN NAMES
#
# The myhostname parameter specifies the internet hostname of this
# mail system. The default is to use the fully-qualified domain name
# from gethostname(). $myhostname is used as a default value for many
# other configuration parameters.
#
#myhostname = host.domain.tld
#myhostname = virtual.domain.tld
myhostname = mail.hogehoge.com ←追加、ドメイン名は何でも動くみたい
 
# The mydomain parameter specifies the local internet domain name.
# The default is to use $myhostname minus the first component.
# $mydomain is used as a default value for many other configuration
# parameters.
#
#mydomain = domain.tld
mydomain = hogehoge.com ← 自ドメイン名を追加
 
# SENDING MAIL
#
# The myorigin parameter specifies the domain that locally-posted
# mail appears to come from. The default is to append $myhostname,
# which is fine for small sites.  If you run a domain with multiple
# machines, you should (1) change this to $mydomain and (2) set up
# a domain-wide alias database that aliases each user to
# user@that.users.mailhost.
#
# For the sake of consistency between sender and recipient addresses,
# myorigin also specifies the default domain name that is appended
# to recipient addresses that have no @domain part.
#
#myorigin = $myhostname
#myorigin = $mydomain
myorigin = $mydomain ← メール送信時、送信元メールアドレスの@以降にドメイン名を付加する設定
 
# The inet_interfaces parameter specifies the network interface
# addresses that this mail system receives mail on.  By default,
# the software claims all active interfaces on the machine. The
# parameter also controls delivery of mail to user@[ip.address].
#
# See also the proxy_interfaces parameter, for network addresses that
# are forwarded to us via a proxy or network address translator.
#
# Note: you need to stop/start Postfix when this parameter changes.
#
#inet_interfaces = all
#inet_interfaces = $myhostname
#inet_interfaces = $myhostname, localhost
inet_interfaces = all ← localhostをallに変更(外部からのメール受信を許可)
 
# The mydestination parameter specifies the list of domains that this# machine considers itself the final destination for.
#
# These domains are routed to the delivery agent specified with the
# local_transport parameter setting. By default, that is the UNIX
# compatible delivery agent that lookups all recipients in /etc/passwd
# and /etc/aliases or their equivalent.
#
# The default is $myhostname + localhost.$mydomain.  On a mail domain
# gateway, you should also include $mydomain.
#
# Do not specify the names of virtual domains - those domains are
# specified elsewhere (see VIRTUAL_README).
#
# Do not specify the names of domains that this machine is backup MX
# host for. Specify those names via the relay_domains settings for
# the SMTP server, or use permit_mx_backup if you are lazy (see
# STANDARD_CONFIGURATION_README).
#
# The local machine is always the final destination for mail addressed
# to user@[the.net.work.address] of an interface that the mail system
# receives mail on (see the inet_interfaces parameter).
#
# Specify a list of host or domain names, /file/name or type:table
# patterns, separated by commas and/or whitespace. A /file/name
# pattern is replaced by its contents; a type:table is matched when
# a name matches a lookup key (the right-hand side is ignored).
# Continue long lines by starting the next line with whitespace.
#
# See also below, section "REJECTING MAIL FOR UNKNOWN LOCAL USERS".
#
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain ← 自ドメイン宛メールを受信できるよう、行末に$mydomainを追加
#mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
#mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain,
#       mail.$mydomain, www.$mydomain, ftp.$mydomain
 
# DELIVERY TO MAILBOX
#
# The home_mailbox parameter specifies the optional pathname of a
# mailbox file relative to a user's home directory. The default
# mailbox file is /var/spool/mail/user or /var/mail/user.  Specify
# "Maildir/" for qmail-style delivery (the / is required).
#
#home_mailbox = Mailbox
#home_mailbox = Maildir/
home_mailbox = Maildir/ ← メール格納形式をMaildir形式にする
 
# SHOW SOFTWARE VERSION OR NOT
#
# The smtpd_banner parameter specifies the text that follows the 220
# code in the SMTP server's greeting banner. Some people like to see
# the mail version advertised. By default, Postfix shows no version.
#
# You MUST specify $myhostname at the start of the text. That is an
# RFC requirement. Postfix itself does not care.
#
#smtpd_banner = $myhostname ESMTP $mail_name
#smtpd_banner = $myhostname ESMTP $mail_name ($mail_version)
smtpd_banner = $myhostname ESMTP unknown ← メールサーバーソフト名の隠蔽化

また、SMTP認証設定と受信メールサイズ制限のため、以下を最終行へ追加します。

smtpd_sasl_auth_enable = yes
smtpd_recipient_restrictions =
    permit_mynetworks
    permit_sasl_authenticated
    reject_unauth_destination
message_size_limit = 10485760

4.master.cfの編集

Postfixの設定ファイル、master.cfをvimで編集します。

# vim /etc/postfix/master.cf
# ==========================================================================
# service type  private unpriv  chroot  wakeup  maxproc command + args
#               (yes)   (yes)   (yes)   (never) (100)
# ==========================================================================
smtp      inet  n       -       n       -       -       smtpd
#submission inet n       -       n       -       -       smtpd
submission inet n       -       n       -       -       smtpd ← SUBMISSIONポート有効化
#  -o smtpd_tls_security_level=encrypt
#  -o smtpd_sasl_auth_enable=yes
  -o smtpd_sasl_auth_enable=yes ← SUBMISSIONポートでSMTP認証有効化

5.SMTP認証設定

SMTP認証にシステムのユーザー名、パスワードを使用する場合の方法を示します。

# yum -y install cyrus-sasl

CentOS 6.xの場合

# /etc/rc.d/init.d/saslauthd start
# chkconfig saslauthd on ← 自動起動設定の場合はこちら

CentOS 7.xの場合

# systemctl start saslauthd
# systemctl enable saslauthd ← 自動起動設定の場合はこちら

6.存在しないユーザー宛メールの破棄設定

# vim /etc/postfix/main.cf

ファイルの最後に下記を追加(存在しないユーザー宛メールをunknown_userへ配送)

local_recipient_maps =
luser_relay = unknown_user@localhost

unknown_user宛メールを破棄します。

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

/etc/aliasesの変更を反映します。

# newaliases

これで/etc/aliasesに下記の1行が追加されます。

unknown_user: /dev/null

7.サービス開始

serviceコマンドでpostfixサービスを起動します。

# service postfix start
Starting postfix:                                          [  OK  ]

8.テストメール送信

さくらVPSのサーバーから外部の任意のメールアドレスにメールを送信します。

# smtp-source -v -f "" -t "hoge@xxx.so-net.ne.jp" 127.0.0.1:25

これで下記のように表示されて、メールが届いていればOKです。

smtp-source: name_mask: all
smtp-source: vstream_tweak_tcp: TCP_MAXSEG 16384
smtp-source: <<< 220 mail.hoge.com ESMTP unknown
smtp-source: HELO wwwXXXXXXX.sakura.ne.jp
smtp-source: <<< 250 mail.hoge.com
smtp-source: MAIL FROM:<>
smtp-source: <<< 250 2.1.0 Ok
smtp-source: RCPT TO:<hoge@xxx.so-net.ne.jp>
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 661F541A90
smtp-source: QUIT
smtp-source: <<< 221 2.0.0 Bye

届いたメールの本文は次のようになっていました。差出人や件名は空でした。

La de da de da 1.
La de da de da 2.
La de da de da 3.
La de da de da 4.

9.Movable Typeの設定

これで完璧かどうかわかりませんが、外部にメールを送信できました。

なお、Movable Typeにはインストール時に「SMTPサーバー」を設定します。

あとから設定するには、mt-config.cgiに下記の3行を設定します。

MailTransfer smtp
SMTPServer localhost
SMTPPort 25

10.参考サイト

参考サイトは下記です。ありがとうございました。

関連記事
トラックバックURL


コメントする
greeting

*必須

*必須(非表示)


ご質問のコメントの回答については、内容あるいは多忙の場合、1週間以上かかる場合があります。また、すべてのご質問にはお答えできない可能性があります。予めご了承ください。

太字イタリックアンダーラインハイパーリンク引用
[サインインしない場合はここにCAPTCHAを表示します]

コメント投稿後にScript Errorや500エラーが表示された場合は、すぐに再送信せず、ブラウザの「戻る」ボタンで一旦エントリーのページに戻り(プレビュー画面で投稿した場合は、投稿内容をマウスコピーしてからエントリーのページに戻り)、ブラウザをリロードして投稿コメントが反映されていることを確認してください。

コメント欄に(X)HTMLタグやMTタグを記述される場合、「<」は「&lt;」、「>」は「&gt;」と入力してください。例えば「<$MTBlogURL$>」は「&lt;$MTBlogURL$&gt;」となります(全て半角文字)