おはよう世界。どうも若林です。
なんだかんだもう12月、あと少しでクリスマスですね。
毎年ディズニーランドでクリスマス仕様のデコレーションがされていて、楽しそうですね。
しかし友達が少なく、居てもクリスマスは全員予定があったりデートしたりで誰とも予定が合わず、一人で行く勇気もありませんので毎年行けてないんですよね。。。そもそもクリスマスって平日ですので私はその日仕事中でした。しょぼん
この孤独感、つまり「チキンが冷めちゃった」ってことですね。(元ネタあまり知りませんが・・・)
さて、今回はメールサーバーを自動で構築してみました。
当初メールの認証をOpenDKIMにしようと思ったのですが、、調べたらOPENDKIMがAlmaLinuxの9系だと対応してないらしい(8系だったら対応してるみたい)で仕方なく別のDKIMにします。
一応使おうと思えば使えるみたいなのですが、やり方が少し特殊で変なエラーになりたくないのとOpenDKIMじゃなくても良いので今回はRspamdの方を使います。
それと今回スクリプトの記述内容は殆どコピペで動くようになっておりますが、一部ご自身の環境に合わせて変更する箇所もございます。
見出し部分に「内容変更アリ」と記載しますので、見逃さないようにしていただければと思います。
目次
前準備
今回メールサーバーを立てるにあたって以下のものが必要になります。
- AWSアカウント
- EC2インスタンス一台
- EC2の25番ポートの制限解除申請(ローカル運用の場合は不要)
- Ansibleサーバー
- あれば所有している独自ドメイン(今回用意できませんでした・・・)
Ansibleサーバーの構築方法は前回私が投稿したブログにありますのでそちらをご覧ください。(ついでにEC2サーバーを作成する方法のリンクもございます。)
EC2でAnsibleサーバー構築~ミドルウェア導入までやってみた
独自ドメインは外部にメール送信する場合は必要になりますのでお持ちでしたら用意します。
Route 53に独自ドメインを登録(AWS以外で取得された場合は移管してください)するとホストゾーンが作成されます。
今回サーバーから外部ドメインにもメール送信するため、EC2の25番ポートの制限を解除する申請もします。不要でしたらこの工程は飛ばして大丈夫です。
25番ポート解除申請フォームはこちら
ここからはEC2のターゲットサーバーとRoute 53にホストゾーンを作成後、ポート25の制限解除完了の前提でお話しします。
本当は独自ドメインを取得して外部ドメインにも送信しようと思ったのですが、独自ドメインが用意できませんでした・・・。
ですので、今回はローカルのみ(+Gmailに送信)でテストをしたいと思います。
一応Ansibleの内容的には外部でも送信できるように組んでありますので、お持ちの方はそちらに記述をお願い致します。(ある想定で進めさせていただきます)
Route 53のホストゾーン・逆引きDNS
まずはRoute 53の中にある既に登録してあるホストゾーンを選択して、レコードの設定を進めていきます。
ドメインをお持ちでない方は、取得予定(もしくは取得してから)のドメインをホストゾーンとして登録していただければと思います。
Route53でドメインを取得されるとホストゾーンが自動生成されますので重複にはご注意を。
今回後述しますが、ユーザー名はmailtestとしますので、それに合わせた設定を行います。

少しわかりづらいと思いますが、ほとんどがドメイン名ですので隠れております。

こちらで以上となります。
DKIMの公開鍵は後程書きますので一旦スルーで大丈夫です。
次はElasticIPに逆引きDNSレコードを追加します。
EC2に割り当てているElasticIPを開いていただくと逆引きDNSレコードというものがあると思います。

こちらを更新していきます。
アクション→逆引きDNSの更新を押してください。
こちらはRoute53のホストゾーンと同じ名称で大丈夫です。
逆引きDNSと正引きDNSを一致させるためです。
ロールディレクトリの作成
次はロールディレクトリを作っていきます。
今回のディレクトリ構成は以下のようになっております。

黒いファイルがディレクトリになっております。
本当はmailディレクトリ配下(templates・vars・tasks)の中にもいろいろ入っているのですが、ごちゃごちゃになってしまったため、一旦ここまで書きました。
構成図を確認したところで、ここからは実際にAnsibleサーバー内にログインして作業していきます。
今回Ansible公式が出しているロールの雛型作成コマンドを叩きます。
ansible-galaxy init mail
今回ロール名は「mail」とさせていただきました。
こんなコマンドがあったんですね。感動しました。
使わないディレクトリも生成されますが、特に影響はないので削除でも放置でも問題ございません
次は/root/ansible内のディレクトリを作成していきます。
以下のコマンドを叩きます。
mkdir -p ~/ansible/{inventory,playbooks}
以前のブログでLAMP環境まで作成された方は既にあると思います。まだ作成されてない方は今回新たに作ってください。
Ansible動作環境構築
では作成したファイルの中にいろいろ書いていきます。
殆どコピペでOKですが、一部ご自身の環境に合わせて修正する箇所もございますのでお気をつけて進めてください。
inventoryを作成(※内容変更アリ)
まずはinventoryを作成していきます。
~/ansible/inventory/hosts.ini
こちらをvimコマンドなどで開きます。
開いたら以下を記述してください。
[mailservers]
mail1 ansible_host=***.***.***.*** ansible_user=[ログインするユーザー名] ansible_ssh_private_key_file=/root/.ssh/[キーペア名] ansible_become=true
こちらの「...」の部分は、ご自身のターゲットサーバーのIPアドレスを入力してください。
AnsibleサーバーのIPアドレスではございませんので注意してください。
ansible_user=[ログインするユーザー名]の部分もご自身のユーザー名を入力します。私は今回AlmaLinuxですので「ec2-user」でログインします。
最後にSSH接続するための鍵ですが、AWSで作成した場合、ターゲットサーバーでログインするキーペア名を入力してください。
もしまだAnsibleサーバー内に公開鍵を記述してなければ、AnsibleがSSH接続するユーザーにターゲットサーバーの公開鍵を記入してください。
今回私の場合はec2-userでSSH接続しますので、そのユーザーディレクトリ内に公開鍵を置いています。
Playbookを作成
次はPlaybookを作成していきます。
これは今回メールサーバーを構築するために必要不可欠な部分です。
/root/ansible/playbooks/mail-server.yml
- hosts: mailservers
become: true
roles:
- mail
短いですね。
これは膨大な量のYAMLファイルをロールとしてまとめているからです。
ロールに分割することで、次回別の事をAnsibleで実行するとき、Playbookの中にあるrolesの部分を書き換えるだけで済みます。
varsディレクトリを作成(※内容変更アリ)
次はロール内にあるそれぞれのディレクトリ配下のファイルを書いていきます。
全て解説するととてつもない量になりますので、軽く何をするために必要なのかだけお伝えしていきます。
まずはvarsディレクトリから作成していきます。
/root/ansible/roles/mail/vars/main.yml
---
hostname: "mail.example.com"
domain: "example.com"
dkim_selector: "mail"
mail_users:
- name: mailtest
maildir_sub:
- cur
- new
- tmp
- .Drafts
- .Sent
- .Trash
- .Archive
ここではメールサーバーで必要な情報を入力していきます。
hostname: "mail.example.com"
こちらは今回作成するメールサーバーのホストネームを入力していきます。
domain: "example.com"
こちらはお持ちの独自ドメインを入力していきます。
mail_users:
こちらはメールユーザー名を指定します。何でもいいですが、今回はmailtestとします。
maildir_sub:
こちらはMaildir内のファイルを作成します。要はメールの受信ボックスです。
tasksディレクトリ
次はtasksディレクトリ内の設定ファイルを作成していきます。
Ansibleを動かす際、ここは必須ですので、間違えないように気を付けてください。
/root/ansible/roles/mail/tasks/main.yml
---
- include_tasks: install.yml
- include_tasks: user.yml
- include_tasks: dkim.yml
- include_tasks: postfix.yml
- include_tasks: dovecot.yml
- include_tasks: certbot.yml
- import_tasks: firewalld.yml
こちらは実行するタスクを書いております。
一つ注意ですが、実行する際の順番がおかしいとエラーが起こることがございます。
この順番にしておけば問題ないとは思います。
/root/ansible/roles/mail/task/certbot_dovecot.yml
---
- name: Install Certbot
package:
name: certbot
state: present
become: true
- name: Obtain Let's Encrypt certificate for mail server
command: >
certbot certonly --non-interactive --agree-tos --email admin@{{ mydomain }}
--standalone -d {{ hostname }}
args:
creates: "/etc/letsencrypt/live/{{ hostname }}/fullchain.pem"
become: true
- name: Ensure Dovecot SSL directory exists
file:
path: "/etc/dovecot/conf.d"
state: directory
mode: '0755'
become: true
- name: Deploy Dovecot SSL config
template:
src: 10-ssl.conf.j2
dest: /etc/dovecot/conf.d/10-ssl.conf
mode: '0644'
notify:
- restart dovecot
become: true
- name: Ensure Dovecot is enabled and started
service:
name: dovecot
state: started
enabled: true
become: true
このタスクファイルは、DovecotのTLS設定を自動化するためのものです。
Certbotを使用してLet's Encryptの証明書を取得し、その証明書を利用するようにDovecotの設定をテンプレートから生成して配置します。
/root/ansible/roles/mail/tasks/dkim.yml
---
- name: Ensure DKIM directory exists
file:
path: /var/lib/rspamd/dkim
state: directory
owner: _rspamd
group: _rspamd
mode: '0750'
become: true
- name: Generate DKIM private key if not exists
command: >
rspamadm dkim_keygen
-d {{ domain }}
-s {{ dkim_selector }}
-b 2048
-k /var/lib/rspamd/dkim/{{ dkim_selector }}.key
args:
creates: "/var/lib/rspamd/dkim/{{ dkim_selector }}.key"
become: true
become_user: _rspamd
- name: Set DKIM private key permissions
file:
path: "/var/lib/rspamd/dkim/{{ dkim_selector }}.key"
owner: _rspamd
group: _rspamd
mode: '0600'
become: true
- name: Generate DKIM public key for DNS (Rspamd 3.x)
command: >
rspamadm dkim_keygen
-d {{ domain }}
-s {{ dkim_selector }}
-k /var/lib/rspamd/dkim/{{ dkim_selector }}.key
-f
register: dkim_pub_raw
become: true
become_user: _rspamd
- name: Save DKIM public key to file
copy:
content: "{{ dkim_pub_raw.stdout }}"
dest: "/var/lib/rspamd/dkim/{{ dkim_selector }}.pub"
owner: _rspamd
group: _rspamd
mode: '0644'
become: true
- name: Deploy dkim_signing.conf
template:
src: dkim_signing.conf.j2
dest: /etc/rspamd/local.d/dkim_signing.conf
mode: '0644'
notify: restart rspamd
become: true
- name: Deploy milter_headers.conf
template:
src: milter_headers.conf.j2
dest: /etc/rspamd/local.d/milter_headers.conf
mode: '0644'
notify: restart rspamd
become: true
- name: Show DKIM public key for DNS
debug:
msg: "{{ dkim_pub_raw.stdout | default('DKIM public key not found yet') }}"
このタスクでは、Rspamdを使ってDKIM の秘密鍵と公開鍵を自動生成し、DKIM署名を行うための設定ファイルをAnsibleで自動配置しています。
本来ここをOpenDKIMとして設定する予定でしたが、AlmaLinuxだとちょっと大変だったのでRspamdを採用しております。
/root/ansible/roles/mail/tasks/install.yml
---
- name: Enable EPEL repository
dnf:
name: epel-release
state: present
- name: Install base packages
dnf:
name:
- postfix
- dovecot
- redis
- certbot
- s-nail
state: present
- name: Add Rspamd official repository
yum_repository:
name: rspamd
description: Rspamd Stable
baseurl: https://rspamd.com/rpm-stable/centos-9/x86_64/
gpgcheck: no
enabled: yes
- name: Install Rspamd
dnf:
name: rspamd
state: present
- name: Enable and start Redis
systemd:
name: redis
state: started
enabled: yes
- name: Enable and start Rspamd
systemd:
name: rspamd
state: started
enabled: yes
ここでメールサーバーに必要なミドルウェアやパッケージをインストールします。
EPELとかがありますので、これはmain.ymlの順番的には一番上がよいと思います。
/root/ansible/roles/mail/tasks/user.yml
---
- name: Create mail users
loop: "{{ mail_users }}"
user:
name: "{{ item.name }}"
shell: "{{ item.shell | default('/sbin/nologin') }}"
create_home: yes
- name: Ensure Maildir base exists
loop: "{{ mail_users }}"
file:
path: "/home/{{ item.name }}/Maildir"
state: directory
owner: "{{ item.name }}"
group: "{{ item.name }}"
mode: "0700"
- name: Create Maildir subfolders
loop: "{{ mail_users | product(maildir_sub) | list }}"
loop_control:
loop_var: pair
file:
path: "/home/{{ pair.0.name }}/Maildir/{{ pair.1 }}"
state: directory
owner: "{{ pair.0.name }}"
group: "{{ pair.0.name }}"
mode: "0700"
- name: Fix Maildir permissions recursively
loop: "{{ mail_users }}"
file:
path: "/home/{{ item.name }}/Maildir"
owner: "{{ item.name }}"
group: "{{ item.name }}"
mode: "0700"
recurse: yes
このuser.ymlは、メールサーバーのユーザー環境をAnsibleで自動構築するためのタスクです。
PostfixとDovecotを組み合わせてメールサーバーを運用する場合、OSユーザーの作成やMaildirの準備、フォルダ権限の調整は非常に重要ですが、手作業で行うとミスが起きやすく、後から「メールが届かない」「ログインできない」といった問題の原因になりがちです。
そこで、このタスクでMaildirの初期構築から権限周りの設定まで自動化して構築します。
/root/ansible/roles/mail/tasks/postfix.yml
---
- name: Deploy Postfix main.cf
template:
src: main.cf.j2
dest: /etc/postfix/main.cf
owner: root
group: root
mode: '0644'
notify: restart postfix
become: true
- name: Configure Dovecot auth socket for Postfix
blockinfile:
path: /etc/dovecot/conf.d/10-master.conf
marker: "# {mark} ANSIBLE MANAGED: Postfix SASL"
block: |
service auth {
unix_listener /var/spool/postfix/private/auth {
mode = 0660
user = postfix
group = postfix
}
}
notify:
- restart dovecot
- restart postfix
become: true
postfix.ymlでは、Postfixのメイン設定をテンプレートとして配置し、SMTP AUTHの認証処理をDovecotに委譲するための連携設定を行っています。
/root/ansible/roles/mail/tasks/certbot.yml
---
- name: Install Certbot
package:
name: certbot
state: present
become: true
- name: Obtain Let's Encrypt certificate for mail server
command: >
certbot certonly --non-interactive --agree-tos
--email admin@{{ domain }}
--standalone -d {{ hostname }}
args:
creates: "/etc/letsencrypt/live/{{ hostname }}/fullchain.pem"
become: true
- name: Ensure Dovecot SSL directory exists
file:
path: "/etc/dovecot/conf.d"
state: directory
mode: '0755'
become: true
- name: Deploy Dovecot SSL config
template:
src: 10-ssl.conf.j2
dest: /etc/dovecot/conf.d/10-ssl.conf
mode: '0644'
notify:
- restart dovecot
become: true
- name: Ensure Dovecot is enabled and started
service:
name: dovecot
state: started
enabled: true
become: true
こちらはLet’s Encryptに対して証明書の発行を自動的に要求しています。
TLS証明書を自動で取得して、Dovecotに適用してくれます。
/root/ansible/roles/mail/tasks/firewalld.yml
---
- name: Ensure firewalld is installed
dnf:
name: firewalld
state: present
- name: Ensure firewalld is started and enabled
systemd:
name: firewalld
state: started
enabled: yes
- name: Open SMTP ports in firewalld
firewalld:
port: "{{ item }}/tcp"
permanent: true
state: enabled
immediate: yes
loop:
- 25
- 465
- 587
- 143
- 993
- 110
- 995
- name: Reload firewalld to apply changes
command: firewall-cmd --reload
- name: Enable Submission (587) and SMTPS (465) in Postfix master.cf
blockinfile:
path: /etc/postfix/master.cf
marker: "# {mark} ANSIBLE MANAGED MAIL PORTS"
block: |
submission inet n - n - - smtpd
-o syslog_name=postfix/submission
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
smtps inet n - n - - smtpd
-o syslog_name=postfix/smtps
-o smtpd_tls_wrappermode=yes
-o smtpd_sasl_auth_enable=yes
notify:
- restart postfix
- name: Ensure Postfix is enabled and started
systemd:
name: postfix
state: started
enabled: yes
メール送信に必要なポート開放とSMTPサービスの待ち受け設定を同時に自動化しています。
Submission(587)およびSMTPS(465)ではTLSとSMTP AUTHを必須とし、セキュアなメール送信環境を実現しています。
IMAP(143)、IMAPS(993)、POP3(110)、POP3S(995)はGmailやThanderbirdでメール受信する場合開放する必要があります。ローカルのみの運用の場合は外しても大丈夫です。
以上でtasksディレクトリは終了です。
templatesディレクトリの作成
次はtemplatesディレクトリの中身を作成していきます。
/root/ansible/roles/mail/templates/main.cf.j2
myhostname = {{ hostname }}
mydomain = {{ domain }}
myorigin = $mydomain
inet_interfaces = all
inet_protocols = ipv4
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
home_mailbox = Maildir/
milter_protocol = 6
milter_default_action = accept
smtpd_milters = inet:localhost:11332
non_smtpd_milters = inet:localhost:11332
smtp_tls_security_level = may
smtpd_tls_security_level = may
smtpd_tls_cert_file = /etc/letsencrypt/live/{{ hostname }}/fullchain.pem
smtpd_tls_key_file = /etc/letsencrypt/live/{{ hostname }}/privkey.pem
smtpd_tls_auth_only = yes
smtpd_sasl_auth_enable = yes
smtpd_relay_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
smtpd_recipient_restrictions = reject_unauth_destination
templatesディレクトリには、PostfixやDovecotなどの設定ファイルをJinja2テンプレートとして配置しています。
Ansibleの変数を利用することで、環境ごとに異なるホスト名やドメインを柔軟に反映でき、再現性の高いメールサーバー構築を実現しています。
/root/ansible/roles/mail/templates/10-ssl.conf.j2
ssl = required
ssl_cert = </etc/letsencrypt/live/{{ hostname }}/fullchain.pem
ssl_key = </etc/letsencrypt/live/{{ hostname }}/privkey.pem
ssl_min_protocol = TLSv1.2
ssl_prefer_server_ciphers = yes
こちらはセキュリティ的に非常に重要なテンプレートです。
DovecotのTLS設定では、暗号化通信を必須とし、Let’s Encryptの証明書を用いて安全なIMAP/POP3接続を提供しています。
/root/ansible/roles/mail/templates/dkim_signing.conf.j2
path = "/var/lib/rspamd/dkim/{{ dkim_selector }}.key";
selector = "{{ dkim_selector }}";
domain = "{{ domain }}";
allow_envfrom = true;
allow_username_mismatch = true;
sign_local = true;
こちらはDKIM設定用のテンプレートです。
自サーバーから送信されるメールに対してのみ電子署名を付与し、受信側が送信ドメインの正当性と改ざんの有無を検証できるようにしています。
/root/ansible/roles/mail/templates/dovecot.conf.j2
listen = *
protocols = imap pop3 lmtp
mail_location = maildir:~/Maildir
disable_plaintext_auth = yes
auth_mechanisms = plain login
!include conf.d/*.conf
!include_try conf.d/10-ssl.conf
こちらでは、IMAP/POP3/LMTPを有効化し、Maildir形式でユーザーごとにメールを管理しています。また、暗号化されていない認証を禁止することで、セキュアなメールアクセスを実現しています。
/root/ansible/roles/mail/templates/master.cf.j2
smtp inet n - n - - smtpd
-o smtpd_milters=inet:localhost:11332
submission inet n - n - - smtpd
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
-o smtpd_milters=inet:localhost:11332
こちらはPostfixのサービス定義ファイルのテンプレートです。
Postfixのmaster.cf.j2では、25番ポートはメールサーバー間通信用、587番ポートはクライアント送信用としてTLSとSASLを必須化しています。
/root/ansible/roles/mail/templates/milter_headers.conf.j2
se = ["authentication-results"];
これはやらなくてもいい任意のものです。
こちらはRspamdがメールに付与するヘッダを制御し、DKIM、SPF、DMARCの結果をメールヘッダーで確認できるようにするための設定です。
オプション:handlersディレクトリの作成
こちらもやらなくても問題ないものになっております。
/root/ansible/roles/mail/handlers/main.yml
---
- name: restart rspamd
systemd:
name: rspamd
state: restarted
- name: restart postfix
systemd:
name: postfix
state: restarted
enabled: yes
- name: restart dovecot
systemd:
name: dovecot
state: restarted
こちらを作成することで、設定変更後に必要なサービスの再起動処理をまとめてくれます。
Ansibleを実行する度にターゲットサーバー内で一つ一つにrestartをかけたくない為、私は作成しております。
必須ではございませんが、あると便利ぐらいに思ってください。
以上でAnsibleの設定ファイル内容は終了です。長かったですね・・・。
Ansible実行
さて、いよいよAnsibleを実行してみましょう。
今回playbookの名称がmail-server.ymlですので、以下を叩きます。
ansible-playbook playbooks/mail-server.yml
こちらでAnsibleが実行されます。
結果が出力されますので、少し待ちます。
PLAY [mailservers] ********************************************************************************************************************
・
・
・
中略
・
・
・
PLAY RECAP ****************************************************************************************************************************
mail1 : ok=44 changed=16 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
特にエラーが無ければfailed=0と表示されるはずです。
途中でエラーが起きてAnsibleが止まったらどこか間違えています。
DKIMの公開鍵の確認
ターゲットサーバー内にログインしていただいたら、まずRspamdで生成したDKIMの公開鍵を確認しに行きます。
cat var/lib/rspamd/dkim/[dkim_selector].pub
今回varsディレクトリ内でdkim_selectorをmailにしましたので、今回の場合はmail.pubですね。
その中にDKIMの公開鍵が入っていますので、残りのRoute53内のDKIMレコードに登録しましょう。
これで全ての作業が終わりました。
メール送信してみた
さていよいよメールの送信をしてみましょう。
同じサーバーのローカル内でメール送信してみました。
echo "本文です" | mail -s "件名です" mailtest
こちらを叩いてみましょう。
本文と件名は何でも良いので適当に入力してます。
送信したら、Ansibleで作成したMaildir内にメールが届いているはずですので確認します。
#メールを確認
ls -l /home/mailtest/Maildir/new/
#メールファイルが入っているはずですので、そちらを開く(ユーザー名を変えたらコピペでOK)
s-nail -f /home/[作成したユーザー名]/Maildir
N 1 root 2025-12-16 09:45 26/1210 "件名です "
#開きたいメールの数字を選択 今回は1
p 1
メールを確認して開いてみると先程送信した件名と本文があるはずです。
AnsibleでS-nailをインストールしてますのでコマンドを叩いていただくと送信されたメールを見ることが出来ます。
ローカルの送受信は完了です。ローカルで送信できていればDNSの設定と相手サーバーの受信許可設定を変更すれば別のEC2サーバーにもメール送信できますので是非お試しください。
条件付きではありますが、アカウントやリージョンが違っても送受信できるみたいです。
最後に25番ポートの制限を解除してたらGmailに送信は出来ますので、それだけ試したいと思います。
Gmailへ送信するために、以下のコマンドを叩いてください。
su -s /bin/bash mailtest -c 'echo "本文です" | mail -s "件名" example@gmail.com
本文と件名は適当に入れてください。
後ろにあるexample@gmail.comは送信先のメールアドレスを入力してください。
ではGmailの受信ボックス(初回送信ですと多分迷惑メール)に入っていると思いますので、確認してみましょう。

お、届いてますね。これで送信は完了しました。
ちなみに余談ですが、ドメインが無い状態でgmailでサーバーにメール送信を行うとこうなります。

「ドメインが無いからメール送信できなかったよ、このドメインで本当に合ってるの?」って言われました。
用意できなかったんだからしょうがないじゃん・・・。
これでメールサーバーのテストは終了となります。お疲れ様でした。
最後に
いかがだったでしょうか。
当初の予定とは大きくずれましたが、最後まで見ていただきありがとうございます。
今回検証できませんでしたが、独自ドメインをお持ちでしたら外部からメールサーバーへ送信したり、Thanderbird等のメールソフトにもログインして使えるようになります。
本当は外部から送信されたメールを受け取ったりAnsibleサーバーからRoute 53のホストゾーンにレコードを登録できるようにして完全にAnsibleのみ(25番解除申請を除く)で外部にもメール送信できるサーバーを作りたかったのですが、時間が無かった&複雑そうだったため、断念しました・・・。
あまり触れませんでしたが、Ansibleでインストールしたパッケージやミドルウェアの設定ファイルも一緒に入っていますのでご自身の環境に合わせて配置を最適化したり内容変更していただければと思います。(ポートの再確認やAnsibleで導入した設定の確認もお忘れなく)
それではまたどこかでお会いしましょう。
文系エンジニア見習いです。