さくらVPSのバーチャルドメインでメール送受信

メールのアイコン

VPSでメールの送受信をしたい。本格的な配信サービス等を運営するわけではなく、レンサバの延長線レベルで運用できればいい。 というライトなメールサーバの構築です。

メールサーバは、ApacheやMySQLとは違い、スパムの踏み台にされる可能性があったり、せっかく設定してもGmail等で迷惑メール扱いされるなど、他のサーバよりも難易度が高くて躊躇しがち。

でも独自ドメインでWEBを公開するならメアドも同じものが使いたい。ここに一つVPSの壁があると思います。さくらVPSなら最初からメールサーバ(MTA)のpostfixが起動してるので、ドメイン設定とメール転送設定のみで最低限の構築ができました。

VPSのメールサーバから直接メールを送受信するとなると、最低でもSSL+dovecot等のPOP3サーバ、SMTP Authの導入が必要になりますが、今回は受信したメールはスグに転送+送信は別のSMTPサーバを使います。

スパムの踏み台にされない、迷惑メールにならない、出来るだけ簡単にというのを試行錯誤してみました。尚、独自ドメインはバーチャルで設定されているものとします。

 

やりたいこと

  • PHPから独自ドメインでメール送信。そのドメイン宛の受信と返信もしたい。
  • できるだけ迷惑メールにならないように。
  • VPSに届いたメールはすぐにレンサバなど他のメアドに転送する。返信はそちらから。
  • postfixはローカルから送信するのみ。SMTP接続はしない。外部からのリレーは却下。
  • VPSからPOP3等で受信はしないのでdovecotは使わない。

実はさくらVPSの標準CentOSは最初からpostfixサーバが動いており、試用期間が過ぎれば特別な設定をしなくてもPHP等からメール送信できます

※CentOSのバージョン次第ではpostfixではなくsendmailかもしれない。

CentOSのバージョンを確認するコマンド

cat /etc/redhat-release

CentOS5だとpostfixの代わりにsendmailのようだ。その場合はデフォルトMTAをpostfixにする。

※試用期間中でも外向きポート587は開いているので、外部のメールサーバを中継して外部にメール送信することもできるようだ。

さくらのVPS 無料期間中でもメール送信する方法 - 黒川仁の文具堂ブログ三昧のスクリーンショットさくらのVPS 無料期間中でもメール送信する方法 - 黒川仁の文具堂ブログ三昧

試用期間が終わり、外向き(送信)のポート25を開いた状態ならば、試しに、

mail hoge@example.com
Subject: test
test
最後は.[ENTER]

なんかで自分のメアド宛に送信してみると、

user@wwwxxxxxx.sakura.ne.jp

から届く事が確認できる。

さくらVPSのデフォルトホスト名はwwwxxxxxx.sakura.ne.jpだが、メールの送信元はヘッダーのFrom次第なので、VPSに設定したバーチャルドメインから送信しているように見せることは可能。べつに他のレンサバのメールサーバやGmailでもできる。
※Gmailで独自ドメインを送信元にするには、そのドメインのメール認証が必要なので、兎にも角にも受信できる環境が先に必要。

つまり、独自ドメインのメール送信はVPSとは関係なく可能。

デフォルトのメールサーバ名はデフォルトホスト名のwwwxxxxxx.sakura.ne.jpとなり、これはメール受信者も確認できる。このホスト名を独自ドメインに設定する場合は、GmailやYahoo等で迷惑メールフォルダに入る可能性が上がるようで、その場合、DNS逆引きレコードやDKIMなどでサーバの信頼度を上げる必要がある。今回はメールサーバがsakuraであると特定されても問題はないのでこのまま。

あとはメール受信。というか転送さえできれば良い。

 

下準備

最初に独自ドメインのDNSにメールサーバとSPFレコードを設定しておく。ドメインを管理してるレジストラの無料DNSや、さくらが提供してくれるDNSで設定する。設定するレコードはA、MX、TXT(SPF)の3つ。

A IPアドレス
MX wwwxxxxxx.sakura.ne.jp.(最後はピリオド) 10(優先度)
TXT v=spf1 mx ~all

DNSで設定できるレコードの種類

A(Address)レコードホスト名とIPアドレスの関連づけを定義するレコード。
CNAMEレコード正規ホスト名に対する別名を定義。特定のホスト名を別のドメイン名に転送する時などに利用。
MXレコード対象ドメイン宛のメールの配送先(メールサーバ)のホスト名を定義。
NSレコードゾーン情報を管理するネームサーバーのサーバー名を定義。
TXTレコードホスト名に関連付けるテキスト情報を定義。SPFを記述した場合はSPFレコードとも呼ぶ。

SPF(Sender Policy Framework)の設定とは?

SPFは差出人のメールアドレスが他のドメインになりすましていないかどうかを検出するために設定する。ドメインのTXTレコードに指定。

例:txt @ v=spf1 mx ~all (このドメインはmxレコードに設定したホストからメール送信しますよ宣言)

参考

評判のさくらのVPSでSMTP(Sendmail)を公開する時にやっておきたいこと | レンタルサーバー・自宅サーバー設定・構築のヒントのスクリーンショット評判のさくらのVPSでSMTP(Sendmail)を公開する時にやっておきたいこと | レンタルサーバー・自宅サーバー設定・構築のヒント

postfixの設定

/etc/postfix/main.cfを編集。基本はそのままデフォルトで触らず、必要な項目を変更していく。

cp /etc/postfix/main.cf /etc/postfix/main.cf.org
/etc/postfix/main.cf
#変更箇所#
# 外部からのメール受信を許可するように変更
inet_interfaces = all

# プロトコルをipv4に限定するように変更
inet_protocols = ipv4

#確認箇所#
# 中継するip localのみ
mynetworks_style = host

#追加箇所#
# telnetなどで接続された時にサーバソフト名を隠す
smtp_banner = $myhostname ESMTP unknown

# 転送するバーチャルドメイン名
virtual_alias_domains = example.com,example.net

# 転送設定
virtual_alias_maps = hash:/etc/postfix/virtual

転送するメールアドレスを登録

/etc/postfix/virtual
# 先頭のメアド宛をそれ移行のメアド(複数可)に転送。
/etc/postfix/virtual
example.com anything
hoge@example.com aaa@example.co.jp
 
example.net anything
hoge@example.net aaa@example.co.jp bbb@example.co.jp

/etc/postfix/virtualファイルを変更したら postmap コマンドでDB化する必要がある。 ※変更する度に必要

postmap /etc/postfix/virtual

設定できたらサーバー再起動

service postfix restart

この時点でエラーがないかmaillogを確認

tail /var/log/maillog

 

ポート25をオープン

いよいよスパマーが外でうへへと待ち構えてるポート25をオープン。ちなみにポート開けてからしばらくしてmaillogを見ると、メール送信をトライするスパムが確認できるハズ。

/etc/sysconfig/iptables
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 25 -j ACCEPT

iptables再起動

service iptables restart
iptables -L

メールサーバの第三者中継の可能性をチェック

全てのテストにパスする事を確認する。

メールシステムの第三者中継チェックのスクリーンショットメールシステムの第三者中継チェック

もし問題があったら、踏み台になる前にpostfixをストップして設定を確認。

service postfix stop

さらに信頼性を上げる

DKIMを設定しなくても確認した範囲では迷惑メール扱いされませんでしたが、より信頼性を上げたければDKIMも設定するべき。

DKIM(Domainkeys Identified Mail)
OpenDKIMなどを使い送信側で署名・受信側で署名を照合する。

毎日ログをチェックする

毎日logwatchで不正使用されていないかチェックすること。logwatchはWEBサイトのエラーも教えてくれるのでmust。

  1. logwatchインストール。
    yum install logwatch
    cp /etc/logwatch/conf/logwatch.conf /etc/logwatch/conf/logwatch.conf.org
    vim /etc/logwatch/conf/logwatch.conf
  2. logwatch.conf内。
    MailTo = hoge@example.com

 

以上となります。メールサーバの本格的な運用とは言い難い設定ですが、メールがネックでVPSに躊躇していた人に参考になれば。

 

プログラミングで悩んだ時は

93%の回答率が売りのエンジニアのための無料Q&Aサイト「teratail」。長く悩んでも答えが出ない時の為に、登録しておけば助かるかもしれません。