StackFocus.postfix-dovecot
ansible-role-postfix-dovecot
Ansibleのロールで、UbuntuにPostfixとDovecotをMySQL認証で自動インストール・設定します。MySQLのスキーマは、以下のDigital Oceanチュートリアルから取得されています。 使用されているMySQLのスキーマは schema.sqlで見ることができます。
ロール変数
必要な変数
- dovecot_ssl_cert - Dovecotが使用するSSL証明書のパス。証明書チェーンが必要な場合は、同じファイルに証明書の後に連結する必要があります。
- dovecot_ssl_key - Dovecotが使用するSSL鍵のパス。
- postfix_ssl_cert - Postfixが使用するSSL証明書のパス。必要に応じて中間CAも含めるべきです。
- postfix_ssl_key - Postfixが使用するSSL鍵のパス。
- postfix_dovecot_mysql_password - 認証に使用されるSQLデータベースサーバーでデータベースを照会する権限を持つユーザーのパスワード。
オプションの変数
- postfix_dovecot_mysql_host - 認証のためのMySQLサーバーのFQDNまたはIPアドレス。デフォルトは
127.0.0.1
です。 - postfix_dovecot_mysql_db_name - 認証に使用されるMySQLサーバー上のデータベース名。デフォルトは
servermail
です。 - postfix_dovecot_mysql_user - 認証に使用されるMySQLサーバーでデータベースを照会する権限を持つユーザー。デフォルトは
usermail
です。 - postfix_dovecot_mysql_password_scheme - データベース内のパスワードを暗号化するためのパスワードスキーム。デフォルトは
SHA512-CRYPT
です。 - postfix_default_domain - Postfixがデフォルトで使用するドメインの値。これはバウンスメッセージ送信時に送信者のドメインを特定する際に使用されます。
/etc/mailname
の内容を設定します。 - postfix_inet_protocols - Postfixがリッスンすべきプロトコル。IPv4のみを許可するには、この値を
ipv4
に設定します。デフォルトはall
です。 - postfix_submission_smtpd_client_restrictions - メール送信ポート(587)のクライアント制限のリスト。詳細はPostfixのドキュメントを参照してください。
デフォルトは
permit_sasl_authenticated
およびreject
です。 - postfix_smtpd_tls_auth_only - SSL/TLSを介してのみSASL認証を許可するかどうか。デフォルトは
yes
です。 - postfix_smtpd_recipient_restrictions - 受信メールの受信者の制限リスト。詳細はPostfixのドキュメントを参照してください。
デフォルトは
permit_sasl_authenticated
、permit_mynetworks
、reject_unauth_destination
です。 - postfix_smtpd_relay_restrictions - リレー制限のリスト。詳細はPostfixのドキュメントを参照してください。
デフォルトは
permit_mynetworks
、permit_sasl_authenticated
、defer_unauth_destination
です。 - postfix_mynetworks - 信頼されたSMTPクライアントのリスト。詳細はPostfixのドキュメントを参照してください。
デフォルトは
127.0.0.0/8
、[::ffff:127.0.0.0]/104
、[::1]/128
です。 - postfix_mydestination - Postfixの設定値
mydestination
のリスト。詳細はPostfixのドキュメントを参照してください。 デフォルトはlocalhost
です。 - postfix_mysql_alias_query - ソースが提供されるときにエイリアスの宛先を見つけるためのクエリ。デフォルトは
SELECT destination FROM virtual_aliases WHERE source='%s';
です。 - postfix_mysql_domains_query - ドメインが有効かどうかを確認するためのクエリ。デフォルトは
SELECT 1 FROM virtual_domains WHERE name='%s';
です。 - postfix_mysql_users_query - メールアドレスが有効かどうかを確認するためのクエリ。デフォルトは
SELECT 1 FROM virtual_users WHERE email='%s';
です。 - dovecot_mysql_password_query - 認証のためにMySQLサーバーでユーザーを認証するためのクエリ。デフォルトは
SELECT email as user, password FROM virtual_users WHERE email='%u';
です。 - postfix_relayhost - メールを上流リレーホスト経由で送信します。詳細はPostfixのドキュメントを参照してください。
- postfix_smtp_tls_security_level - Postfix SMTPサーバー(送信)のSMTP TLSセキュリティレベル。DebianおよびRed Hat >= 8のデフォルトは
dane
、Red Hat 7のデフォルトはmay
です。詳細はPostfixのドキュメントを参照してください。 - dovecot_protocols - 有効にするプロトコルのリスト。デフォルトは
lmtp
とimap
です。POP3を有効にするには、この変数にpop3
を追加します。(注:POP3を使用するには、対象でapt install dovecot-pop3d
を行う必要があります) - dovecot_mail_privileged_group -
dovecot_mail_location
で定義されたフォルダを所有するグループ。これにより、Dovecotのメールプロセスがそのフォルダに書き込む能力を持ちます。デフォルトはmail
です。 - dovecot_disable_plaintext_auth - SSLなしでの認証を有効にするかどうかを決定します。デフォルトは'yes'です。
- dovecot_auth_mechanisms - Dovecotによって許可される認証メカニズムのリスト。デフォルトは
plain
とlogin
です。詳細はDovecotのAuthentication Mechanismsを読みください。 - dovecot_force_imaps - IMAPを無効にしてIMAPSを強制するかどうかを決定します。デフォルトは
true
です。 - dovecot_force_pop3s - POP3を無効にしてPOP3Sを強制するかどうかを決定します。デフォルトは
true
です。 POP3Sを同時に有効にするには、dovecot_protocols
リストにpop3を追加する必要があります。 - dovecot_ssl - すべてのプロトコルでSSLが強制されるかどうかを決定します。デフォルトは
required
です。詳細はDovecotのSSL Configurationを読みください。 - dovecot_listen - Dovecotが接続をリッスンするIPまたはホストアドレスのリスト。デフォルトは
*
(すべてのIPv4)および'::'(すべてのIPv6)です。 - dovecot_add_example_users -
true
に設定すると、データベースにサンプルユーザーを追加します。
要件
- このロールはsudo/becomeを使用するか、rootとして実行される必要があります。そうしないと、ロールは失敗します。
- MySQLサーバーは事前に設定されており、ユーザーは適切なデータベースへの権限を持っている必要があります(デフォルト値は[defaults/main.yml]を参照)。
- Red Hatサーバーでは、PyMSQL(python{2,3}-PyMySQL、適切な方をインストールする必要があります)を事前にインストールする必要があります。
例のPlaybook
requirements.yml
roles:
- name: stackfocus.postfix-dovecot
site.yml
- hosts: all
become: yes
gather_facts: true
roles:
- stackfocus.postfix-dovecot
vars:
postfix_dovecot_mysql_db_name: mailserver
postfix_dovecot_mysql_user: mailuser
postfix_dovecot_mysql_password: mailpass
postfix_default_domain: example.com
dovecot_protocols:
- imap
- pop3
- lmtp
dovecot_mail_privileged_group: vmail
dovecot_ssl_cert: /etc/ssl/certs/dovecot.pem
dovecot_ssl_key: /etc/ssl/private/dovecot.pem
postfix_ssl_cert: /etc/ssl/certs/postfix.pem
postfix_ssl_key: /etc/ssl/private/postfix.pem
$ ansible-galaxy install -r requirements.yml
$ ansible-playbook -i inventory site.yml --ask-become-pass
新しいサーバーのための拡張例のplaybook
この例では、いくつかのgeerlingguyのロールを使用して、データベースとcertbotの証明書を管理します。
requirements.yml
roles:
- name: stackfocus.postfix-dovecot
- name: geerlingguy.mysql
- name: geerlingguy.certbot
Playbookは次のように準備します:
- データベースとそのユーザー
- Let's Encrypt証明書
- メールトランスポートサービスPostfix
- メールボックスサービスDovecot
---
- name: Setup mail
hosts: mailserver.tld
become: true
vars:
mail_domain: mycooldomain.com
mail_database: maildb
mail_db_pass: 'ultrasafepassword'
roles:
- role: geerlingguy.mysql
mysql_databases:
- name: '{{ mail_database }}'
encoding: utf8mb4
collation: utf8mb4_czech_ci
mysql_users:
- name: '{{ mail_database }}'
host: "localhost"
password: '{{ mail_db_pass }}'
priv: "{{ mail_database }}.*:ALL"
- role: geerlingguy.certbot
certbot_certs:
- domains:
- '{{ mail_domain }}'
- 'mail.{{ mail_domain }}'
- role: stackfocus.postfix-dovecot
postfix_dovecot_mysql_db_name: '{{ mail_database }}'
postfix_dovecot_mysql_user: '{{ mail_database }}'
postfix_dovecot_mysql_password: '{{ mail_db_pass }}'
postfix_default_domain: '{{ mail_domain }}'
dovecot_protocols:
- imap
- pop3
- lmtp
dovecot_mail_privileged_group: vmail
dovecot_ssl_cert: /etc/letsencrypt/live/{{ mail_domain }}/fullchain.pem
dovecot_ssl_key: /etc/letsencrypt/live/{{ mail_domain }}/privkey.pem
postfix_ssl_cert: /etc/letsencrypt/live/{{ mail_domain }}/fullchain.pem
postfix_ssl_key: /etc/letsencrypt/live/{{ mail_domain }}/privkey.pem
postfix_smtp_tls_security_level: 'dane'
postfix_mydestination: '{{mail_domain}}'
postfix_myhostname: 'mail.{{mail_domain}}'