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は開いているので、外部のメールサーバを中継して外部にメール送信することもできるようだ。
試用期間が終わり、外向き(送信)のポート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)を公開する時にやっておきたいこと | レンタルサーバー・自宅サーバー設定・構築のヒント
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/sysconfig/iptables
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 25 -j ACCEPT
- DKIM(Domainkeys Identified Mail)
- OpenDKIMなどを使い送信側で署名・受信側で署名を照合する。
- logwatchインストール。
yum install logwatch cp /etc/logwatch/conf/logwatch.conf /etc/logwatch/conf/logwatch.conf.org vim /etc/logwatch/conf/logwatch.conf
- logwatch.conf内。
MailTo = hoge@example.com
転送するメールアドレスを登録
/etc/postfix/virtualファイルを変更したら postmap コマンドでDB化する必要がある。 ※変更する度に必要
postmap /etc/postfix/virtual
設定できたらサーバー再起動
service postfix restart
この時点でエラーがないかmaillogを確認
tail /var/log/maillog
ポート25をオープン
いよいよスパマーが外でうへへと待ち構えてるポート25をオープン。ちなみにポート開けてからしばらくしてmaillogを見ると、メール送信をトライするスパムが確認できるハズ。
iptables再起動
service iptables restart
iptables -L
メールサーバの第三者中継の可能性をチェック
全てのテストにパスする事を確認する。
もし問題があったら、踏み台になる前にpostfixをストップして設定を確認。
service postfix stop
さらに信頼性を上げる
DKIMを設定しなくても確認した範囲では迷惑メール扱いされませんでしたが、より信頼性を上げたければDKIMも設定するべき。
毎日ログをチェックする
毎日logwatchで不正使用されていないかチェックすること。logwatchはWEBサイトのエラーも教えてくれるのでmust。
以上となります。メールサーバの本格的な運用とは言い難い設定ですが、メールがネックでVPSに躊躇していた人に参考になれば。
プログラミングで悩んだ時は
93%の回答率が売りのエンジニアのための無料Q&Aサイト「teratail」。長く悩んでも答えが出ない時の為に、登録しておけば助かるかもしれません。