目次
はじめに
こんにちはディーネットのタナミです。
4月になり入社してから1年経ちました。去年のこの時期も曇り空が多かったのを覚えています。
晴れていると気分がほんの少し上がるので、はやく晴れて欲しいですね。
さてメールサーバーをEC2で構築する際、DKIM鍵の管理や、スパム判定への対策が課題となるかと思います。
本ブログでは、これらをAmazon SESに任せつつ、EC2で受信を行うAWSならではのメールサーバーを構築していきます。
事前準備
EC2でSESを介してメールを送信する際に、いくつかの事前準備があるので設定を行います。
また、本ブログでは下記のような条件で構築を進めます。
OS:AlmaLinux 9.7
ドメイン名:example.com
SESサンドボックス申請、25番ポート制限解除申請のどちらも済んでいること
EC2セキュリティグループ作成
最初にメールの送受信を許可するために、セキュリティグループを作成する必要があります
VPCのセキュリティーグループから「セキュリティグループを作成」を押下します。

下図のようなインバウンドルールでセキュリティグループを作成します。

それぞれのポートの役割は以下の通りです。
また、本ブログではSTARTTLSを使用する想定のため110と143を許可しております。
※110・143・587番ポートは自拠点のIPのみ許可する方がよりセキュアです。
| ポート番号 | プロトコル | 役割 |
|---|---|---|
| 25 | SMTP | 外部メールサーバーからEC2へのメール受信 |
| 110 | POP3 | メールクライアントからEC2へメールを取得 |
| 143 | IMAP | メールクライアントからEC2へメールを取得 |
| 587 | Submission | メールクライアントからEC2経由でSESへ送信 |
レコードを登録
次にレコード登録のため、ゾーンファイルを作成します
xxx.xxx.xxx.xxxはEC2のIPに置き換えてください。
example.com 300s A xxx.xxx.xxx.xxx
example.com 300s MX 10 example.com
example.com 300s TXT "v=spf1 include:amazonses.com ~all"
対象のホストゾーンから「ゾーンファイルをインポート」を押下し、先ほどのゾーンファイルを貼り付けます。

SESの作成
セキュリティグループとレコードの登録が完了したら、送信の要であるSESの作成を行います。
SESのIDメニューから「IDの作成」を押下します。

使用するドメイン名でIDを作成します。
また、既にDKIM鍵がある場合は「DKIM 認証トークンの指定 (BYODKIM)」を選択しDKIM鍵をインポートします。

IDの作成が完了したら、「DNSレコードのRoute53への発行」を押下し、Route53へレコードを登録します。

SMTPユーザの作成
次にEC2でSESを使用するためにユーザを作成する必要があります。
SMTP設定の「SMTP認証情報の作成」を押下し、SMTPユーザを作成します。

ユーザ名を入力し、ユーザを作成したら「csvファイルのダウンロード」を必ず行います。
SMTPユーザ名とSMTPパスワードは後ほど使用するので、控えておいてください。

サーバー内事前準備
事前準備とSESの作成が完了したら、いよいよEC2の構築に移ります。
まずはPostfix・Dovecot・cyrus-saslのインストール確認を下記コマンドで行います。
rpm -q postfix dovecot cyrus-sasl
インストールされている場合は下記のように表示されます。
postfix-3.5.25-1.el9.x86_64
dovecot-2.3.16-15.el9.x86_64
cyrus-sasl-2.1.27-22.el9.x86_64
インストールされていない場合は下記のように表示されるので、次項にてインストールを行います。
パッケージ postfix はインストールされていません。
パッケージ dovecot はインストールされていません。
パッケージ cyrus-sasl はインストールされていません。
ミドルウェアがインストールされていない場合
前項でミドルウェアがインストールされていなかった場合は、下記コマンドでインストールを行います。
dnf install postfix dovecot cyrus-sasl
--結果のみ--
インストール済み:
clucene-core-2.3.3.4-42.20130812.e8e3d20git.el9.x86_64 cyrus-sasl-2.1.27-22.el9.x86_64 dovecot-1:2.3.16-15.el9.x86_64 libexttextcat-3.4.5-11.el9.x86_64 postfix-2:3.5.25-1.el9.x86_64
完了しました!
インストール後、念のためインストール確認を再度行います。
rpm -q postfix dovecot cyrus-sasl
このような結果が表示されていれば、インストール完了です。
postfix-3.5.25-1.el9.x86_64
dovecot-2.3.16-15.el9.x86_64
cyrus-sasl-2.1.27-22.el9.x86_64
自己証明書の設置
EC2とメールクライアント間の通信をセキュアにするため、自己証明書を使用します。
本ブログでは自己証明書を使用していますが、正式な証明書がある場合はそちらを使用して下さい。
下記コマンドで自己証明書を発行します。
example.comとなっている部分は、それぞれ設定したいドメインに読み替えて設定して下さい。
openssl req -newkey rsa:2048 -nodes \
-keyout /etc/pki/tls/private/mailserver.key \
-x509 -days 3650 \
-out /etc/pki/tls/certs/mailserver.pem \
-subj "/C=JP/ST=Tokyo/L=Tokyo/O=MyOrg/CN=example.com"
発行後、自己証明書が正常に作成されているか確認します。
ll /etc/pki/tls/private/mailserver.key
-rw------- 1 root root 1704 4月 3 10:23 /etc/pki/tls/private/mailserver.key
ll /etc/pki/tls/certs/mailserver.pem
-rw-r--r-- 1 root root 1322 4月 3 10:23 /etc/pki/tls/certs/mailserver.pem
SMTP認証情報ファイル作成
次に、Postfixの設定を行います。
まずは、SMTPユーザ用の認証情報ファイルを作成します。
vi /etc/postfix/sasl_passwd
--以下の内容を記載--
[email-smtp.ap-northeast-1.amazonaws.com]:587 SMTPユーザ名:SMTPパスワード
Postfixが読み込めるDB形式に変換します。
postmap /etc/postfix/sasl_passwd
--以下で権限を設定--
chmod 600 /etc/postfix/sasl_passwd /etc/postfix/sasl_passwd.db
Postfix設定
さて、ミドルウェアのインストール等が完了したら、ミドルウェアの設定に移ります。
まずはPostfixの設定から進めます。
設定ファイルのバックアップを作成します。
cp -p /etc/postfix/main.cf /etc/postfix/main.cf.$(date +%Y%m%d)
以下のようにファイルが作成されていることを確認します。
ll /etc/postfix/main.cf.$(date +%Y%m%d)
--結果のみ--
-rw-r--r-- 1 root root 29369 10月 3 2024 /etc/postfix/main.cf.20260403
Postfixの設定ファイルに追記・変更します。
example.comとなっている部分は、それぞれ設定したいドメインに読み替えて設定して下さい。
vi /etc/postfix/main.cf
--以下の内容を記載--
# Postfix基本設定
myhostname = example.com
mydomain = example.com
myorigin = example.com
inet_interfaces = all
inet_protocols = ipv4
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
mynetworks = 127.0.0.0/8
home_mailbox = Maildir/
# SESリレー設定
relayhost = [email-smtp.ap-northeast-1.amazonaws.com]:587
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_tls_security_level = encrypt
smtp_tls_CAfile = /etc/pki/tls/certs/ca-bundle.crt
smtp_tls_CApath = /etc/pki/tls/certs
# Dovecot連携設定
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
# 証明書設定
smtpd_tls_cert_file = /etc/pki/tls/certs/mailserver.pem
smtpd_tls_key_file = /etc/pki/tls/private/mailserver.key
smtpd_tls_security_level = may
また、メールクライアントからEC2(SES)と通信するためにsubmissionの設定も行います。
vi /etc/postfix/master.cf
--以下の内容を記載--
submission inet n - n - - smtpd
-o syslog_name=postfix/submission
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
-o smtpd_relay_restrictions=permit_sasl_authenticated,reject
Dovecot設定
さて、Postfixの設定が完了したらDovecotの設定に移ります。
以下で設定ファイルのバックアップを行います。
cp -p /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf.$(date +%Y%m%d)
cp -rp /etc/dovecot/conf.d/ /etc/dovecot/conf.d.$(date +%Y%m%d)/
それぞれの設定ファイルに以下の通り、追記・変更を行います。
▼/etc/dovecot/dovecot.confの記載内容
protocols = imap pop3
listen = *
▼/etc/dovecot/conf.d/10-ssl.confの記載内容
ssl = required
ssl_cert = </etc/pki/tls/certs/mailserver.pem
ssl_key = </etc/pki/tls/private/mailserver.key
ssl_cipher_list = PROFILE=SYSTEM
▼/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 {
unix_listener /var/spool/postfix/private/auth {
mode = 0660
user = postfix
group = postfix
}
}
▼/etc/dovecot/conf.d/10-mail.confの記載内容
mail_location = maildir:~/Maildir
▼/etc/dovecot/conf.d/10-auth.confの記載内容
disable_plaintext_auth = yes
auth_mechanisms = plain login
サービス起動
さてミドルウェアの設定が完了したら、以下のコマンドでミドルウェアの構文チェックを行います。
Postfix構文チェック
エラーが無ければ何も出力されません。
postfix check
Dovecot構文チェック
デフォルト値から変更されている設定のみ表示されます。エラーがある場合はその旨が出力されます。
doveconf -n
上記のコマンドで問題が無ければ、ミドルウェアの起動を行います。
systemctl restart postfix dovecot saslauthd
--自動起動も併せて設定--
systemctl enable postfix dovecot saslauthd
起動後、それぞれのミドルウェアの起動状態の確認を行います。
systemctl status postfix dovecot saslauthd
--結果のみ--
● postfix.service - Postfix Mail Transport Agent
Loaded: loaded (/usr/lib/systemd/system/postfix.service; enabled; preset: disabled)
Active: active (running) since Mon 2026-04-06 16:25:52 JST; 3min 48s ago
● dovecot.service - Dovecot IMAP/POP3 email server
Loaded: loaded (/usr/lib/systemd/system/dovecot.service; enabled; preset: disabled)
Active: active (running) since Mon 2026-04-06 16:27:52 JST; 1min 48s ago
● saslauthd.service - SASL authentication daemon.
Loaded: loaded (/usr/lib/systemd/system/saslauthd.service; enabled; preset: disabled)
Active: active (running) since Mon 2026-04-06 16:28:38 JST; 1min 2s ago
ユーザを作成
さて、ミドルウェアの起動が完了したら、ユーザの作成を行います。
今回はtestというユーザ名で作成を行います。
useradd -m test
以下でパスワードを設定します。
※設定したパスワードはメールクライアントでのログイン時に使用するので、控えておいてください。
passwd test
最後に、メールディレクトリを作成します。
これでEC2+SESのメールサーバーは構築完了です。
mkdir -p /home/test/Maildir/{new,cur,tmp}
--以下で権限を設定--
chown -R test:test /home/test/Maildir
chmod -R 700 /home/test/Maildir
まとめ
今回はEC2とSESを組み合わせて、送受信対応のメールサーバーを構築しました。
設定完了後は、sendmailでの送信確認やメールクライアントへの接続確認を忘れずに行いましょう。
よろしくお願いします。