もくじ
・EC2起動
・ドメイン取得・DNS設定
・postfix設定(送信)
・Dovecote設定(受信)
・サーバー内で送信受信テスト
・MUAからテスト Thunderbird outlook(classic)
EC2起動
自分のパブリックIPからのみSSHを許可
ElasticIP取得
ElasticIPに逆引きでメールサーバーのサーバー名を設定。(あとでインスタンス中からサーバー名設定します。
ElasticIP取得してからすぐには設定できませんでした。10分ぐらいおいてから設定。
作成したElasticIPをEC2インスタンスにアタッチしてください
ドメイン取得・DNS設定
お名前ドットコムでドメイン取得しました。
DNS設定
お名前のDNSをそのまま使ってます
MX ・・・ @arisaweb.net 宛のメールをどのサーバーに渡すか?
TXT ・・・ @arisaweb.net からのメールはこのipからしか送信することを許可していない。
A ・・・ EC2インスタンスで作るメールサーバーとIPアドレスを紐づける
ここまで設定できれば↓名前で検索してもIPで検索してもメールサーバー特定できる状態になります。
名前検索はDNSがカバー
IP検索はElasticIPの逆引き検索がカバーしています。
メール設定の全体像
ここで全体像を説明します。
これからやる設定は薄くなっている色の部分です。これがAWS設定になります。
MAU、MSA、MTA、MDAの説明は省略します。
arisa@arisaweb.net から ubuntu@arisaweb.net にメール送信するイメージ図です。
postfix設定(送信)
テラタームからElasticIPをアタッチしたEC2に接続します。
手順通りubuntuのami使っているならば、ユーザー名 ubuntu PW 無し、キー選択で起動設定のときにダウンロードしたペアキーを選択してください。
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
メールアカウント作成
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
デフォルトで入っているのはEC2の設定したホスト名
「System mail name」で指定する値は、mail.arisaweb.net から送られるメールのドメイン部分(Fromアドレスの @ の右側)をデフォルトでどうするか を決める設定です。
使うメールアドレスは、@arisaweb.net なので次のように設定
インストール完了
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)が必要という認識です。
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
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設定
受信サーバーがIMAP担っていない場合は設定を編集をクリック
パスワードはubuntuで設定したユーザーのパスワード
outlook設定
アカウントの追加
IMAP選択
完了