0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

独自ドメインのメールサーバーをEC2上に作る。(postfix,dovecote)

Last updated at Posted at 2025-08-11

もくじ

・EC2起動
・ドメイン取得・DNS設定
・postfix設定(送信)
・Dovecote設定(受信)
・サーバー内で送信受信テスト
・MUAからテスト Thunderbird outlook(classic)

EC2起動

image.png

image.png

自分のパブリックIPからのみSSHを許可

image.png

ElasticIP取得

※このIPはもう使われてません。
image.png

ElasticIPに逆引きでメールサーバーのサーバー名を設定。(あとでインスタンス中からサーバー名設定します。
ElasticIP取得してからすぐには設定できませんでした。10分ぐらいおいてから設定。
image.png

image.png

作成したElasticIPをEC2インスタンスにアタッチしてください

ドメイン取得・DNS設定

お名前ドットコムでドメイン取得しました。

image.png

DNS設定

お名前のDNSをそのまま使ってます

image.png

MX ・・・ @arisaweb.net 宛のメールをどのサーバーに渡すか?
TXT ・・・ @arisaweb.net からのメールはこのipからしか送信することを許可していない。

image.png

A ・・・ EC2インスタンスで作るメールサーバーとIPアドレスを紐づける

ここまで設定できれば↓名前で検索してもIPで検索してもメールサーバー特定できる状態になります。
名前検索はDNSがカバー
IP検索はElasticIPの逆引き検索がカバーしています。

image.png

メール設定の全体像

ここで全体像を説明します。
これからやる設定は薄くなっている色の部分です。これがAWS設定になります。
MAU、MSA、MTA、MDAの説明は省略します。
arisa@arisaweb.net から ubuntu@arisaweb.net にメール送信するイメージ図です。

image.png

postfix設定(送信)

テラタームからElasticIPをアタッチしたEC2に接続します。
手順通りubuntuのami使っているならば、ユーザー名 ubuntu PW 無し、キー選択で起動設定のときにダウンロードしたペアキーを選択してください。

image.png

EC2 パッケージリストを最新の状態に更新

sudo apt update && sudo apt upgrade -y
sudo apt install telnet -y

ホスト名設定

sudo hostnamectl set-hostname mail.arisaweb.net

/etc/hosts に追記

sudo nano /etc/hosts
98.86.24.14 mail.arisaweb.net mail

tips 設定確認コマンド

hostnamectl

ホスト名確認
image.png

メールアカウント作成

ubuntuで作成したユーザーがメールアドレスの名前の部分になる。

sudo adduser arisa

メール受信で使うディレクトリを作成

sudo mkdir -p /home/arisa/Maildir
sudo chown -R arisa:arisa /home/arisa/Maildir
sudo chmod -R 700 /home/arisa/Maildir

tips
作成したユーザーに切り替える

sudo su - arisa

ユーザー一覧を出す

cat /etc/passwd

パスワード変更

sudo passwd arisa

postfix設定(送信)

インストール

sudo apt install postfix mailutils -y

Internet site でOK

image.png

デフォルトで入っているのはEC2の設定したホスト名
「System mail name」で指定する値は、mail.arisaweb.net から送られるメールのドメイン部分(Fromアドレスの @ の右側)をデフォルトでどうするか を決める設定です。
使うメールアドレスは、@arisaweb.net なので次のように設定

image.png

インストール完了

Postfixの設定

sudo nano /etc/postfix/main.cf

付け加える形で変更

# TLS parameters
# サーバー証明書のパス
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
# サーバー秘密鍵のパス
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
# SMTP サーバーでの TLS セキュリティレベル(may: クライアントが要求すれば TLS)
smtpd_tls_security_level=may

# SMTP クライアントとして使うCA証明書ディレクトリ
smtp_tls_CApath=/etc/ssl/certs
# SMTP クライアントでの TLS セキュリティレベル(may: 相手が対応すれば TLS)
smtp_tls_security_level=may
# SMTP クライアント側の TLS セッションキャッシュ
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache


########################################
# 基本メールルーティング設定
########################################
# 中継制限ルール(許可ネットワーク・認証済みクライアントのみ)
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
# サーバーのホスト名(FQDN)
myhostname = mail.arisaweb.net
# エイリアスのマップファイル
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
# メール送信元ドメイン
#myorigin = /etc/mailname
myorigin = arisaweb.net
# ドメイン名
mydomain = arisaweb.net
# ローカル配送対象(これら宛のメールはローカルに配送)
mydestination = $myhostname, arisaweb.net, mail.arisaweb.net, localhost.arisaweb.net, localhost
# リレー先SMTPサーバー(Gmail の SMTP)
#relayhost =
relayhost = [smtp.gmail.com]:587

# 信頼するネットワーク(認証不要で送信可能)
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
# メールボックスの最大サイズ(0は制限なし)
mailbox_size_limit = 0
# 宛先アドレスの区切り文字(user+label@example.com の + 部分)
recipient_delimiter = +
# サーバーがリッスンするネットワークインターフェース
inet_interfaces = all
# 使用するIPプロトコル(IPv4とIPv6)
inet_protocols = all


########################################
# Gmail リレー用 SMTP 認証設定
########################################
# SMTP クライアントとして認証を有効化
smtp_sasl_auth_enable = yes
# SMTP 認証用ユーザー・パスワードのマップファイル
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
# 認証時のセキュリティオプション(匿名禁止)
smtp_sasl_security_options = noanonymous
# SMTPクライアントとしてTLS使用
smtp_use_tls = yes
# SMTPクライアントでのTLSセキュリティレベル(暗号化必須)
smtp_tls_security_level = encrypt

# サーバー側SMTP認証でDovecotを使用
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth


########################################
# ローカルメール保存形式
########################################
# ユーザーのホームディレクトリにMaildir形式で保存
home_mailbox = Maildir/


########################################
# SMTP サーバーの認証設定
########################################
# SMTP認証を有効化
smtpd_sasl_auth_enable = yes
# TLS 接続時のみ認証を許可
smtpd_tls_auth_only = yes
# 匿名認証を禁止
smtpd_sasl_security_options = noanonymous
# ローカルドメインをサーバーホスト名に設定
smtpd_sasl_local_domain = $myhostname
# 一部の古いクライアントとの互換性を許可
broken_sasl_auth_clients = yes

smtpd_relay_restrictions ・・・誰のメールを送信していいかの設定。ここですべてのメールを許可するとオープンリレーの温床となる。

smtp_tls_security_level=encrypt ・・・ 暗号化を強制しています。相手がTLS非対応だとエラーになりますが、送信先(リレー先)はgmailのみなのでこれでOKです。

リレー先の設定

今回SMTPリレーするので、リレー先のgoogleアカウントの設定

AWS postfix(MTA)からのメール送信は別のMTA転送後に、そのMTAからMTAにメールを配送してもらう。
図赤線の部分の設定になります。
gmailを通して迂回させる理由として、AWS EC2は25番ポートはデフォルトで使えません。
サポート 4000円/月ほどを契約すると、25番ポートを開けてもらえるらしいです。
サポート料金払えないので、gmailに25番ポート部分の通信を変わりにやってもらいます。

※※インターネット上の最終的な MTA(メール転送サーバー)にメールを届けるためにはポート25番(SMTP)が必要という認識です。

image.png

gmailアカウント作成
二要素認証登録
アカウントパスワードの作成
https://myaccount.google.com/apppasswords?rapt=AEjHL4M_Z8zxUq8_8D7KFX-fpjPIPNnxuwXgbvSCqXk4S3AOg7l1_V0TQw7FJp64PP_Jq_hDpJboabiLNeAxZwGtHn27RrH4QJaGqqQ7NtmnrxVss3ePgJ4

デバイス名: postfix など任意
生成された 16桁のパスワード をメモ

EC2に生成されたパスワードを書き込みます。
今からEC2からgmailのリレー先を設定します。

sudo nano /etc/postfix/sasl_passwd
[smtp.gmail.com]:587 dummy@gmail.com:dewd fdsf kjsd unds

※ダミーです。 このような形式で書き込んでください。

パーミッションを設定し、Postfix用DBを作成

sudo chmod 600 /etc/postfix/sasl_passwd

sasl_passwd これをDBに変換

sudo postmap /etc/postfix/sasl_passwd

[smtp.gmail.com]:587 dummy@gmail.com:dewd fdsf kjsd undsこれをDB化して高速でアクセスさせます。

SMTP AUTHを有効にするための設定

サーバーが587ポート使えるようにするための設定。ユーザー(MUA)からメールを送信するための専用ポートです。

sudo nano /etc/postfix/master.cf
submission inet n       -       y       -       -       smtpd	
  -o syslog_name=postfix/submission	
  -o smtpd_tls_security_level=encrypt	
  -o smtpd_sasl_auth_enable=yes	
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject	

設定内容
TLS(暗号化)を強制(STARTTLS)
パスワード認証(SASL)を有効に
認証済みユーザーだけ許可、それ以外は拒否

postfix再起動

sudo systemctl restart postfix

Dovecote設定(受信)

Dovecotのインストール

sudo apt update
sudo apt install dovecot-core dovecot-imapd dovecot-pop3d -y

Dovecotがどのプロトコルを提供するか指定する設定

sudo nano /etc/dovecot/dovecot.conf

追加

protocols = imap pop3

ユーザーのメールの保存場所を指定。

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

こちらに変更

mail_location = maildir:~/Maildir

IMAP(993)で通信するためのSSL/TLS関係の設定

sudo nano /etc/dovecot/conf.d/10-ssl.conf

変更

ssl = yes
ssl_cert = </etc/dovecot/ssl/dovecot.pem
ssl_key = </etc/dovecot/ssl/dovecot.key

SSL/TLSを使用する。
使用するSSL証明書ファイルの場所を指定。
対応する秘密鍵を指定。

~~~~~~~~~
TLS通信開始のおおまかな流れ
~~~~~~~~~
クライアント:サーバーへ接続リクエスト
サーバー :証明書+公開鍵をクライアントへ送付
クライアント:証明書が正しいか判断
サーバー : 暗号化 TLS通信開始

SSL証明書作成

sudo mkdir -p /etc/dovecot/ssl
sudo openssl req -new -x509 -days 365 -nodes -out /etc/dovecot/ssl/dovecot.pem -keyout /etc/dovecot/ssl/dovecot.key

CommonNameはホスト名今回は mail.arisaweb.net

MUAでログインできるようにする設定

sudo nano /etc/dovecot/conf.d/10-auth.conf

追加

disable_plaintext_auth = yes
auth_mechanisms = plain login
auth_username_format = %n

TLS通信確立された後にクライアントから送られてくる認証情報についての設定。
クライアントはDovecoteに接続してメールボックスを見たい。
①パスワードは暗号化なしでは受け付けない。(平文の110/143は受け付けません。)
②Dovecotが使う認証方式を指定
③ユーザー名の形式を指定します。%n は「@より前の部分(ローカルパート)」のみを使う、という意味。
arisa@arisaweb.net と入力された場合 → Dovecot は arisa だけを使ってユーザーを探します。

!include auth-system.conf.ext

ちなみに、これがLinuxユーザーを使って認証するという意味になる。

メールサーバーのポート開放

AWSなどクラウド環境ではOS側のファイアウォールとAWSセキュリティグループのポート開放の両方が必要。

sudo nano /etc/dovecot/conf.d/10-master.conf

次のように変更
image.png

image.png

unix_listener /var/spool/postfix/private/auth
Postfix はこのパスのソケットを通じて、Dovecot に「このユーザー名とパスワードで認証して」と依頼します。

構文チェックコマンド

sudo doveconf -n

設定終わったのでDovecote再起動

sudo systemctl restart dovecot

送信受信テスト

dummy@gmail.comは自分のメールアドレスにしてください。

送信

echo "test" | mail -s "testt" dummy@gmail.com	

gmail側で受信できていればOK

受信

gmail からサーバーのメアド宛にメール送信。今回なら 宛先:arisa@arisaweb.net
AWS側で受信を確認方法

未読フォルダ

sudo ls -l /home/arisa/Maildir/new

既読フォルダ

sudo ls /home/arisa/Maildir/cur/

中身見る。 17548~部分は置き換えて。

sudo cat /home/arisa/Maildir/cur/1754882999.Vca01I47a56M802393.mail.arisaweb.net:2

MUAからテスト

Thunderbird設定

新しいアカウント
メールアカウント
image.png

image.png

受信サーバーがIMAP担っていない場合は設定を編集をクリック
image.png

image.png

image.png

パスワードはubuntuで設定したユーザーのパスワード

outlook設定

アカウントの追加

image.png

image.png

IMAP選択

image.png

image.png

完了

image.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?