【postfix】独自ドメインでメール送受信する手順メモ〜バーチャルドメインで複数ドメイン扱う

はじめに

今回やりたかったことは以下
独自ドメインからメール送信したい
独自ドメイン宛のメールを受信して別のメールに転送したい
・1つのサーバーで複数ドメインを扱いたい
・できるだけ迷惑メールやスパム扱いされないようにしたい

今回は自サービスからメール送受信したいだけなので、
メーラーなどで送受信するするためにSMTP-AUTHやPOPサーバーなどは作りません

今回やった環境は以下
ドメインはお名前.comで取得
・サーバーはさくらvpsでcentos6.7

扱うドメインは以下のような形で
・xxx.xxx.sakura.ne.jp
さくらvpsを借りたときにサーバに設定されているドメイン

hoge.jp、fuga.jp
取得した独自ドメイン

IPアドレスはxxx.xxx.xxx.xxxとします

実装 - メールを受信して転送するようにする

dns設定

お名前.com設定

ホスト名 TYPE VALUE 優先
hoge.jp Aレコード xxx.xxx.xxx.xxx
hoge.jp MXレコード xxx.xxx.sakura.ne.jp 10

MXレコードは〜@hoge.jpへのメールはxxx.xxx.sakura.ne.jpへ送ってくれという意味で設定します

さくらのコンパネからゾーンファイル設定
内容はお名前.comでの設定と同じです

エントリ名 種別
@ IPアドレス(A) xxx.xxx.xxx.xxx
@ メール交換ホスト(MX) 10 xxx.xxx.sakura.ne.jp.

設定を確認

> dig hoge.jp

・・・

;; ANSWER SECTION:
hoge.jp.		3600	IN	A	xxx.xxx.xxx.xxx

> dig hoge.jp mx

・・・

;; ANSWER SECTION:
hoge.jp.		3600	IN	MX	10 xxx.xxx.sakura.ne.jp.

digコマンドで名前解決できればokです(設定が浸透するまでに時間かかる場合もあります)
ここまでの設定で〜@hoge.jpへメールを送信するとxxx.xxx.xxx.xxxへメールが送られるようになりました。
ので、次はサーバ側で送られてきたメールを受信して転送するように設定します

postfix設定

centos6.7では初めからpostfixがインストールされているので設定ファイルを修正する

/etc/postfix/main.cf

・・・

# 全てのメールを受信
inet_interfaces = all

# ipv4のみに
inet_protocols = ipv4

# バーチャルドメイン設定を追記
virtual_alias_domains = hoge.jp
virtual_alias_maps = hash:/etc/postfix/virtual

/etc/postfix/virtual

・・・
# info@hoge.jpへのメールはxxx@gmail.comへ転送
hoge.jp anything
info@hoge.jp xxx@gmail.com

設定を反映

> postmap /etc/postfix/virtual
> service postfix restart

実装 - メール送信できるようにする

と言っても、このままでもメール送信はできます。
なのでここでやるのは、送信元を〜@hoge.jpと独自ドメインとして送信してもなるべく迷惑メールやスパム扱いされないようにするというのがやりたいことです。

調べてみるとこの対応としては以下のようなものが出てきました
1. ドメインが逆引きできるようにする
2. dnsのtxtレコードにspfレコードを設定する
3. dkimを設定する

今回、gmaildocomosoftbankのメアドへ送信テストしてみた感じだと
とりあえず1と2を対応しておけば問題ないのかなと思いました

で、今回メールサーバとして使うのはxxx.xxx.sakura.ne.jpと最初から用意されているままなので逆引き設定も特にする必要はありませんでした、

spfレコード設定

お名前.com設定

ホスト名 TYPE VALUE 優先
hoge.jp TXTレコード v=spf1 ip4:xxx.xxx.xxx.xxx ~all

さくらのコンパネからゾーンファイル設定

エントリ名 種別
@ テキスト(TXT) v=spf1 ip4:xxx.xxx.xxx.xxx ~all

設定を確認

> dig hoge.jp txt

・・・
;; ANSWER SECTION:
hoge.jp.		3600	IN	TXT	"v=spf1 ip4:xxx.xxx.xxx.xxx ~all"

確認してokなら実際にメール送信して動作確認

> mail -r xxx@hoge.jp xxx@gmail.com
Subject: テストタイトル
テスト本文
. #ピリオドのみの行を入力で送信

ここまででメールも送信できることが確認できます


ついでに送信するメールを暗号化する技術で「start tls」というのがあるようで
相手のメールサーバがこれに対応していれば暗号化して送って非対応であればそのまま送ってくれるようなのでこれも設定しておきます

start tls

オレオレ証明書

> cd /etc/pki/tls/certs
> openssl req -new -x509 -nodes -days 365 -out mail.crt -keyout mail.key
> openssl x509 -in mail.crt -outform der -out mail.der
> chmod 600 mail.key
> ls
mail.crt mail.key mail.der

/etc/postfix/main.cf

・・・
# start tls設定
smtp_use_tls = yes
smtp_tls_cert_file = /etc/pki/tls/certs/mail.crt
smtp_tls_key_file = /etc/pki/tls/certs/mail.key
smtp_tls_session_cache_database = btree:/var/lib/postfix/smtpd_scache

設定反映

service postfix restart

※参考にさせて頂きました
CentOS 6.5 に メールサーバ構築 - 飛光よ、飛光よ