Amazon Linux on EC2にPostfix+Dovecotでメールサーバー構築


前提

ドメインはexample.com、メールサーバーはmail.example.com、メールアドレスは[email protected] とする。
また、認証はLinuxのユーザ認証と同じユーザ名/パスワードを利用する。

インスタンスの準備

22(SSH)、25(SMTP)、465(SMTPS)、993(IMAPS)ポートを開けておく。

$ sudo yum update

postfix

▪️postfixのインストールのインストール

$ sudo yum -y install postfix

▪️postfixの設定

$ sudo vim /etc/postfix/main.cf

以下設定内容

# メールサーバのホスト名(mail.example.com)を設定
myhostname = mail.example.com
# メールアドレスで利用するドメイン(example.com)を設定
mydomain = example.com
# ローカルから配信されたメールは、example.comのメールであると認識させるための設定
myorigin = $mydomain
# 自ドメイン宛メールを受信できるようにする
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
# 外部からのメール受信を許可するように変更
inet_interfaces = all
# VPC全体を信頼するネットワークとして設定
mynetworks = 192.168.0.0/24, 127.0.0.0/8
# メールの保存形式をメールディレクトリ形式に設定。 メールは宛先ユーザのホームディレクトリ([email protected]ならば、/home/user/)のMaildirディレクトリに保存される。
home_mailbox = Maildir/
# メールサーバを隠蔽する設定を追加
smtpd_banner = $myhostname ESMTP unknown
# 受信メールサイズの制限の設定を追加
message_size_limit = 10485760
# saslauthdを利用するための設定
smtpd_sasl_auth_enable = yes
broken_sasl_auth_clients = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain = $myhostname
smtpd_sender_restrictions = reject_unknown_sender_domain
smtpd_client_restrictions = permit_mynetworks,reject_unknown_client,permit
smtpd_recipient_restrictions = permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination

▪️submissionポートとsmptsポートを使うための設定

$ sudo vim /etc/postfix/master.cf

以下をコメントイン

submission inet n       -       n       -       -       smtpd
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
  -o milter_macro_daemon_name=ORIGINATING
smtps     inet  n       -       n       -       -       smtpd
  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
  -o milter_macro_daemon_name=ORIGINATING

▪️認証用のSMTP-Authのためのsaslauthdを起動。また、自動起動の設定も行う。

$ sudo service saslauthd start
$ sudo chkconfig saslauthd on

▪️デフォルトMTAの変更

$ sudo alternatives --config mta

※ 2を選択

▪️sendmailの停止

$ sudo /etc/rc.d/init.d/sendmail stop
$ sudo chkconfig sendmail off

▪️postfixの起動

$ sudo service postfix start
$ sudo chkconfig postfix on

dovecot

▪️dovecotのインストール

$ sudo yum -y install dovecot

▪️dovecotの設定

$ sudo vim /etc/dovecot/conf.d/10-mail.conf

以下追加

mail_location = maildir:~/Maildir

▪️受信の際の認証方法にloginを追加

$ sudo vim /etc/dovecot/conf.d/10-auth.conf

以下追加

auth_mechanisms = plain login

▪️ポートの設定

$ sudo vim /etc/dovecot/conf.d/10-master.conf

以下コメントイン、追記

service imap-login {
  inet_listener imap {
    port = 143
  }
  inet_listener imaps {
    port = 993
    ssl = yes
  }
}

service pop3-login {
  inet_listener pop3 {
    port = 110
  }
  inet_listener pop3s {
    port = 995
    ssl = yes
  }
}

service auth {
  # Postfix smtp-auth
  unix_listener /var/spool/postfix/private/auth {
    mode = 0666
    user = postfix
    group = postfix
  }
}

その他の設定

▪️新規ユーザ追加時に、ホームディレクトリにMaildir形式のメールボックスを作成するようにする。

$ sudo mkdir -p /etc/skel/Maildir/{new,cur,tmp}
$ sudo chmod -R 700 /etc/skel/Maildir/

▪️ユーザーの作成

$ sudo useradd user
$ sudo passwd user

▪️証明書を指定

$ sudo vim /etc/postfix/main.cf

TLS を利用するための設定、証明書を指定する

smtpd_tls_cert_file = /etc/pki/tls/certs/server.crt
smtpd_tls_key_file = /etc/pki/tls/certs/server.key
smtpd_use_tls = yes

▪️SSLを使えるようにする

$ sudo vim /etc/dovecot/conf.d/10-ssl.conf
# (変更)
# SSL証明書
ssl_cert = </etc/pki/tls/certs/server.crt
ssl_key = </etc/pki/tls/certs/server.key
# (追記)
ssl = yes
ssl_key_password = "前述の証明書作成時のパスフレーズ"

▪️dovecotの起動

$ sudo service dovecot start
$ sudo chkconfig dovecot on

▪️postfixの再起動

$ sudo service postfix restart

おわりです。
うまくいかない場合は/var/log/maillogを確認してみてください。

Thunderbirdなどと連携できます。