はじめに
こんにちは。システムエンジニア歴2年目の者です。
最近、メールサーバを1から構築する機会がありました。私自身、インフラ分野には全く触れたことがなく、試行錯誤を繰り返しながらなんとか構築することができました。
この記事では、その際に得た知見や経験を共有したいと思います。これからメールサーバーを構築する方や、同じようにインフラ初心者の方のお役に立てれば幸いです。
サーバー概要
利用したサービス
- AWS:EC2 AWSが提供しているクラウドサービスを利用
- Postfix:有名なメール転送エンジン
- OpenDkim:DKIM認証を実装するためのツール
わからなかったこと
SPFとDKIMとは
-
SPF:「このドメインのメールはこのサーバー(IPアドレス)から送ります」とDNSで宣言する仕組みです
こちらを利用することで受信側は、送信元のIPアドレスを確認し、不正な送信元からのメールをブロックできます。 -
DKIM:メールに電子署名を付けて、メール送信元が変わっていないかを確認する仕組みです
秘密鍵を利用して、電子署名を付与し、受け取ったメールサーバーは公開鍵を使って署名を確認し、送信元の正当性を検証します。
テストで確認していた箇所
Gmailではメールを開いて、右上の3点リーダーから「メッセージのソースを表示」からSPF,DKIM,DMARCが通っているか確認できます
テストで送信したメールが意図したドメインから送られているか、認証は通っているかを確認しましょう(PASSならOKです)
今回は既存のIPを利用していたためそこまで重要視していなかったですが、送信したメールが迷惑メールに入っている場合、そのまま放置するとIPレピュテーションが落ちてしまうので、可能な限り開封や迷惑メールではない選択をする必要があります
実際に起きたエラー
1. テスト送信したメールが届かない
作成したメールサーバーからテスト的にメール送信をしようと思ったのですが、なぜか手元にメールが届きませんでした
ログを見てみると以下のログがありました
mail-server postfix/pickup[89246]: 9A0E810000BB: uid=0 from=<root>
mail-server postfix/trivial-rewrite[92607]: error: open database /etc/postfix/transport.db: No such file or directory
どうやら「transport.db」とファイルがないためエラーになっていそうでした
調べたところ、こちらのコマンドを実行することで、transport.dbのファイルが作成されました
--transport.dbを生成
postmap /etc/postfix/transport
--postfixの再起動
sudo systemctl reload postfix
なお、postfixで送信先の制限をしない場合は、main.cfのファイルから以下の記載を削除すればtransportの制限を参考にしないで送信できるみたいです
(実践していないので参考程度にしていただければ)
transport_maps = hash:/etc/postfix/transport
最後に
実はこのメールサーバー構築後、別の環境で再度メールサーバーを構築する機会がありました。現在構築中ですが、そちらも機会があったら記事にする予定です!