話題の記事

Postfix+Dovecotによるメールサーバ構築

2014.10.29

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

渡辺です。

定番ネタなのであちこちに情報はあるかと思いますが、Amazon Linux on EC2にPostfix+Dovecotでメールサーバを構築したので覚え書きです。

構成

Amazon Linux上の構築します。 ドメインはexample.com、メールサーバは mail.example.com、メールアドレスが user@example.com とします。 また、認証はLinuxのユーザ認証と同じユーザ名/パスワードを利用するとします。 今回はSSLの設定は行いません。

EC2インスタンスの準備

Amazon LinuxでEC2インスタンスをLaunchします。

セキュリティグループの設定としては、SSHログインできることと、POP3(110番ポート)及びにSMTP(25番ポート)を開けておきます。 また、グローバルIPが必要となりますので、Elastic IPを割り当て置きましょう。

Route53

Route53のHosted ZoneにメールサーバのAレコードとMXレコードを追加します。 mail.example.com(Aレコード)のValueはメールサーバのIPアドレス、MXレコードにのValueにはmail.example.comを指定してください。

準備ができたならば、SSHでログインしてサーバをセットアップします。

postfixの設定

メールの送受信はpostfixで行います。

インストール

$sudo yum -y install postfix

設定

/etc/postfix/main.cf を設定します。

myhostname

メールサーバのホスト名(mail.example.com)を設定します。

myhostname = mail.example.com
mydomain

メールアドレスで利用するドメイン(example.com)を設定します。

mydomain = example.com
myorigin

ローカルから配信されたメールは、example.comのメールであると認識させるための設定です。

myorigin = $mydomain
mydestination

このメールサーバが自分宛のメールであると認識するためのドメイン名を設定します。 設定としては$mydomainだけでも充分ですが、お作法として$myhostname, localhost.$mydomain, localhostも追加してあります。

mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
inet_interfaces

ローカル以外から配信されたメールも受信する設定です。

inet_interfaces = all
mynetworks

VPC全体を信頼するネットワークとして設定します。

mynetworks = 10.0.0.0/16, 127.0.0.0/8
home_mailbox

メールの保存形式をメールディレクトリ形式に設定します。 この設定を行うことで、メールは宛先ユーザのホームディレクトリ(user@example.cpmならば、/home/user/)のMaildirディレクトリに保存されます。

home_mailbox = Maildir/
SMTPサーバの認証設定

認証にはsaslauthdを利用するため、そのための設定を追加します。

smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = $myhostname
smtpd_recipient_restrictions =
    permit_mynetworks
    permit_sasl_authenticated
    reject_unauth_destination

saslauthdの起動

認証用のデーモンであるsaslauthdを起動します。

$ sudo service saslauthd start
$ sudo chkconfig saslauthd on

postfixの起動

デフォルトのMTAをpostfixに変更し、sendmailの停止とpostfixの起動を行います。

$ sudo alternatives --config mta
$ sudo service sendmail stop
$ sudo chkconfig sendmail off
$ sudo service postfix start
$ sudo chkconfig postfix on

ユーザの作成

メールアドレスとして利用するためのユーザを作成します。

$ sudo useradd user
$ sudo passwd user

作成したユーザにsuし、メールディレクトリを作成します。

$ su - user
$ mkdir Maildir
$ exit

メール受信の確認

GMailなどから、user@example.comにメールを送信し、/home/user/Maildirにファイルが追加されることを確認します。 追加されない場合は、エラーメール(戻ってきている場合)や、ログ(/var/log/maillog)を確認しましょう。

メール送信の確認

OutlookやThunderbirdなどのメールクライアントを利用し、アカウントを設定します。 SMTPサーバとして、mail.example.comを指定し、作成したユーザとそのユーザのパスワードを設定してください。 設定できたならば、GMailなどにテストメールを送信し、送信できることを確認しましょう。 送信エラーとなる場合は、受信と同様にログ(/var/log/maillog)を確認してください。

Dovecotの設定

Postfixを設定すればメールの送受信は完了です。 しかし、実際にはOutlook等のメールクライアントからメールを読む必要があるため、POPサーバを起動し、クライアントでメールを受信できるように設定します。

インストール

yum -y install devecot

設定

Dovecotの設定はほとんど変更する必要はありません。

/etc/dovecot/conf.d/10-mail.conf

メールの保存場所をホームディレクトリのMaildirに設定します。

mail_location = maildir:~/Maildir
/etc/dovecot/conf.d/10-auth.conf

認証方法にloginを追加します。

auth_mechanisms = plain login

Divecotの起動

$ sudo service dovecot start
$ sudo chkconfig dovecot on

メール受信の確認

Outlook等でメールが受信できることを確認してください。 エラーとなる場合は、ログ(/var/log/maillog)を確認してください。

メール送信エラー対策

ここまで出来ればメールサーバとして動作可能です。

が、このまま運用をはじめると、メールが届かなかったり、スパム扱いされたりする可能性があります。 AWSのWebサイトでメール送信制限の解除申請を行ってください。 詳細は、Amazon EC2 Eメール送信ベストプラクティスをご確認ください。