OCIには、メール配信というサービスがあります。
簡単に言うと、SMTPサーバーを貸してくれます。
昨今、Gmailのポリシーが厳しくなり、しっかりメール配信手段を管理しないと、Gmailさんは、迷惑メールと判定してしまうようになります。
これをクリアするには、SPFとDKIMを、しっかり設置した方法でメール配信をする必要があります。
とりあえず、決まったところにだけメール配信するだけなら、OCIのメール配信機能を使えば良いと思います。
しかしながら、自身のドメインアドレスから配信するとなると、上記、SPFとDKIM、さらにDMARCを設置しておきたいですね。
ということで、キチンとSPFとDKIMを処置したメール配信をOCIで構築してみます。
まず、ドメインですが、TXTフィルードとCNAMEフィールドを設定する必要があるので、そういったことが管理出来る状態にしておきましょう。
namecheapなんかでドメインを取得して、サーバーをOCIにしてしまうと管理が楽になりますよ。
1.配信ドメイン
OCIの電子メール配信のメニューに、電子メール・ドメインってのが あります。
これは、配信元ドメインにあたります。
つまり、
電子メール・ドメインとして hoge.co.jp を作るこで、SPFやDKIMを設置することが可能となるのですよ。
但し、hoge.co.jp の DNSサーバーに、SPFとDKIM を設置する必要があるので、そういったことが可能な状況を用意する必要があります。
namecheapで、ドメインを作って、DNSサーバーをOCIに向ければ良いです。
2.SPF
さー、基本中の基本、SPFの設置です。
SPFのことは、chatgptにでも聞いていただければ、わかると思います。
簡単に言うと、hoge.co.jpドメインからのメール配信は、このサーバーから発信されますよって、宣言することです。
ここに宣言されていない場所からの配信は、いんちきだぜって ことになります。
で宣言する方法は、超簡単で、hoge.co.jpのDNSサーバーに txtフィールドで以下を記載するだけでOkとなります。
"v=spf1 include:ap.rp.oracleemaildelivery.com ~all"
3.DKIM
ちょっと、こ難しいDKIMです。
暗号鍵方式を使ったメールの正当性を判定する方法です。
これもchatgptにでも聞いていただければ、わかると思います。
雑に話すと、OCIのSMTPサーバーが メールに秘密の暗号文字を入れて送信します。受信したサーバーがhoge.co.jpドメインから取ってきた呪文解除文字を用い照合することで、配信元の正しさを判定します。
暗号文字を作る鍵(非公開)と呪文解除文字(公開)が、ペアになっていることがポイントとなります。
とにかく、良い感じで、判断出来るのですよ。
で、呪文解除文字で照合失敗すると、いんちきだぜってことになります。
で、これも簡単に設置することが出来まして、hoge.co.jpのDNSサーバーに CNAMEフィールドを設置することでOkとなります。
SPFと違うのは、DKIM用のセレクタを作成する必要があります。
OCIに電子メール・ドメインとして hoge.co.jp を作ったと思います。
ここで、DKIMの追加を行います。
すると、DKIMセレクタを入力する必要が発生します。
まー、適当で良いんですが、ここの文字列を 後でCNAMEに登録する必要があるので、公開されても恥ずかしくない文字列にしましょう。
hogehoge-v001-202403 とか、入力しておけば良いんじゃないでしょうか。
で、DKIMレコードの生成を押下すると、内部で鍵が作成されます。
作成されると、CNAMEレコードと値が表示出来るので、これを DNSのCNAMEとして登録すればOkです。
4.承認済送信者
これは、OCIのSMTPサーバー が、配信を許可する配信者を判断する為のリストです。
ここに登録の無い人が 配信を OCIのSMTPサーバー に要求しても、捨てられちゃいます。
なので、
ちなみに、SMTPへの接続情報は、構成を表示すれば記載があります。
それと、ユーザーのSMTP資格証明(プロファイルから作成出来ます)が必要です。
管理する場合、ポリシー が、必要となりますよ。
とりあえず、こんだけやっておけば、Gmailさんも納得していただけれるようで、受信してくれました。
Gmailさんで受信した メッセージのソースを表示すると、SPFとDKIMが PASSと表示されますね。
さらに向上心のある方は、DMARCも設置してみましょう。
じゃー、具体的にどうやって構築するんだって話ですよね。
ということで、OCIでメール配信システムを構築してみましょう。
今回は、Ubuntuで行きますよ
Docker化も可能ですので、頑張って構築してみましょう。
TCP 25 だけ、外に晒せば良いです。
TCP 587 993は、内部で接続出来れば良いです。
1.必要なパッケージ
王道のPostfix + Dovecot認証で構築します。
apt install postfix
apt install dovecot-core dovecot-imapd
2.postfix設定
OCIメール配信にリレー設定を行います。
SMTP-AUTH認証を使う為に、dovecotクライアント認証を構築します。
メールサイズを3MBに限定します。
/etc/postfix/main.cf
myhostname = mx.hoge.co.jp
mydomain = hoge.co.jp
myorigin = $mydomain
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
mynetworks = 127.0.0.0/8
home_mailbox = Maildir/
inet_interfaces = all
#OCI Relay
relayhost = smtp.email.ap-osaka-1.oci.oraclecloud.com:587
smtp_sasl_auth_enable = yes
broken_sasl_auth_clients = yes
smtpd_relay_restrictions = permit_sasl_authenticated, defer_unauth_destination
smtp_sasl_password_maps = hash:/etc/postfix/relay_password
smtp_tls_security_level = may
smtp_sasl_security_options = noanonymous
#Client SMTP-AUTH
smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
# High security
smtpd_reject_unlisted_recipient = yes
smtpd_helo_required = yes
smtpd_helo_restrictions = reject_unknown_hostname, reject_non_fqdn_hostname, reject_invalid_hostname
smtpd_sender_restrictions = reject_unknown_sender_domain, reject_non_fqdn_sender
disable_vrfy_command = yes
smtpd_banner = ESMTP MTA
virtual_alias_domains = hoge.co.jp
virtual_alias_maps = hash:/etc/postfix/virtual
#OCI SMTP no support
smtputf8_enable = no
syslog_facility = mail
compatibility_level = 3.6
message_size_limit = 31457280
3.送受信者設定
ここで、送受信することが出来るアカウントをマップしておきます。
OSユーザーと実メールアドレスのマッピングですね。
/etc/postfix/virtual
root@hoge.co.jp root
user1@hoge.co.jp user1
ハッシュDB化
postmap /etc/postfix/virtual
submissionポートを設定して、送信する時は、こっちを使ってもらいましょう。
/etc/postfix/master.cf
submission inet n - y - - smtpd
-o smtpd_tls_security_level=may
-o smtpd_sasl_auth_enable=yes
-o smtpd_recipient_restrictions=permit_sasl_authenticated,reject
メーラー設定
STARTTLS:587 パスワード:planetext
アカウント:ユーザー名のみ
パスワード:OSと一致
3.OCIリレー設定
OCIのアカウントプロファイルにSMTP資格証明ってのがあるので、ここで証明を作って設定します。
/etc/postfix/relay_password
smtp.email.ap-osaka-1.oci.oraclecloud.com:587
chmod og-rw relay_password
ハッシュDB化
postmap /etc/postfix/relay_password
4.dovecot設定
imap4環境を作って、受信したメールを見れるようにします。
/etc/dovecot/conf.d/10-auth.conf
disable_plaintext_auth = yes
auth_mechanisms = plain
/etc/dovecot/conf.d/10-mail.conf
mail_location = maildir:~/Maildir
/etc/dovecot/conf.d/10-master.conf
service auth {
# Postfix smtp-auth
unix_listener /var/spool/postfix/private/auth {
mode = 0666
}
}
メーラー設定
SSL/TLS:993 パスワード:planetext
アカウント:ユーザー名のみ
パスワード:OSと一致
5.受信メール定義
DNSレコードにmxを作成して、mx.hoge.co.jp を構築しておきましょうね。
mx.hoge.co.jpは、postfixが動作しているサーバーとして下さいね。
hoge.co.jp MX 3600 1 mx.hoge.co.jp.
mx.hoge.co.jp A 3600 120.72.232.71
6.メール送信 ドメイン認証
実際にDNSレコードに設定する内容です。
SPF定義
hoge.co.jp TXT 3600 "v=spf1 include:ap.rp.oracleemaildelivery.com ~all"
DKIM定義
OCIで作ったDKIM定義を設定します。
これで、GMAILさんも許してくれるでしょう。
oreore-fire-202403._domainkey.hoge.co.jp CNAME 3600 oreore-fire-202403.hoge.co.jp.dkim.kix1.oracleemaildelivery.com.
DMARK定義
よそで不正にメールが扱われた場合、
_dmarc.hoge.co.jp TXT 3600 “v=DMARC1; p=none; rua=mailto:
7.送信テスト
ローカルより送信する場合、コマンドでさくっと送れます。
apt install bsd-mailx
echo “TEST” | mailx -s “TEST” -r
8.外部より送信テスト
別のUbuntuとかから送信する場合、TLS接続しないとダメなので、s-nail を使いましょう。
user1で送信して、パスワードも埋め込んでいますよ。
postfixに内部から接続するので、内部用のFQDN(mx.hoge.internal)を指定しています。
送信元がIPだと送信出来ないので、仮の名前をセットしています。
apt install s-nail
echo "漢字もいけるよ" | s-nail -:/ -S smtp-use-starttls -S ssl-verify=ignore -S hostname=pc1.hoge.internal -S ttycharset=UTF-8 -S v15-compat -S mta=smtp://`echo 'urlcodec enc user1' | s-nail -#`:`echo 'urlcodec enc password1' | s-nail -#`@mx.hoge.internal:587 -s "タイトル UTF8" -r
とりあえず、シンプルメール配信サーバーは、これで十分でしょう。
しかし、業務用途となると、添付の自動暗号化や、マルウェア防止等の対策が必要となるので、Milter Api を使って、SaMMAなんかを使わないといけないですね。
とりあえず、小さいシステム向けの一斉配信等向けなんかだと、これで十分かなぁ