trombik.opensmtpd

ansible-role-opensmtpd

smtpd(8)、いわゆるOpenSMTPDを設定します。

要件

opensmtpd_include_x509_certificateyesの場合、trombik.x509-certificateが使用可能である必要があります。通常、requirements.ymlを介して入手します。

opensmtpd-extrasがインストールされている場合、opensmtpdのAPIバージョンはopensmtpd-extrasのものと一致する必要があります。

ロール変数

変数 説明 デフォルト
opensmtpd_user smtpd(8)のユーザー名 {{ __opensmtpd_user }}
opensmtpd_group smtpd(8)のグループ名 {{ __opensmtpd_group }}
opensmtpd_service smtpd(8)のサービス名 {{ __opensmtpd_service }}
opensmtpd_conf_dir 設定ディレクトリのパス {{ __opensmtpd_conf_dir }}
opensmtpd_conf_file smtpd.conf(5)のパス {{ opensmtpd_conf_dir }}/smtpd.conf
opensmtpd_flags smtpd(8)のオプションフラグ ""
opensmtpd_package_name OpenSMTPDのパッケージ名 {{ __opensmtpd_package_name }}
opensmtpd_extra_packages インストールする追加パッケージのリスト []
opensmtpd_config smtpd.conf(5)の内容 ""
opensmtpd_makemap_bin makemap(8)のパス {{ __opensmtpd_makemap_bin }}
opensmtpd_virtual_user 仮想ユーザーにメールを配信します。詳細は下記に。 {}
opensmtpd_extra_groups smtpd(8)ユーザーに追加するグループのリスト []
opensmtpd_tables テーブルのリスト。詳細は下記に。 []
opensmtpd_include_x509_certificate プレイ中にtrombik.x509-certificateロールを含めます no

opensmtpd_virtual_user

この辞書変数は作成する仮想ユーザーを定義します。そのキーは以下に説明されています。空でない辞書の場合、ユーザーとそのホームディレクトリが作成されます。

キー 説明 必須?
comment passwd(5)のコメントフィールド いいえ
group ユーザーのプライマリグループ名 はい
groups ユーザーの追加グループ いいえ
home ユーザーのホームディレクトリ はい
name ユーザーの名前 はい
uid ユーザーのUID いいえ
mode ホームディレクトリのモード。省略すると、システムのデフォルトで設定されます いいえ

opensmtpd_tables

このリスト変数はtable(5)の辞書のリストを定義します。

キー 説明 必須?
name smtpd.conf(5)で使用するテーブルの名前 はい
path ファイルへのパス はい
type サポートされているバックエンドタイプの1つ、デフォルトのインストールではfileまたはdbのみ受け付けます。他のタイプにはOpenSMTPD-extraをインストールしてください はい
owner ファイルの所有者 いいえ
group ファイルのグループ いいえ
dbtype データベースのサポートされているフォーマットの1つ、デフォルトはhashです。typedbでない限り無視されます いいえ
format 結果のマップファイルのフォーマット。可能な値についてはmakemap(8)-t typeを参照してください。typedbでない限り無視されます いいえ
mode ファイルのモードの文字列。ほとんどの場合、引用符で囲む必要があります。 いいえ
values ファイルの内容のリスト。table(5)を参照してください。 はい
no_log yesの場合、テンプレートタスクでno_logを有効にします。これをnoに設定すると、変数内のすべての情報が記録され、資格情報を含みます。デフォルトはyesです いいえ

opensmtpd_include_x509_certificate

プレイ中にinclude_roleを使用してtrombik.x509-certificateロールを含めます。例はtests/serverspec/x509.ymlを参照してください。

Debian

変数 デフォルト
__opensmtpd_user opensmtpd
__opensmtpd_group opensmtpd
__opensmtpd_service opensmtpd
__opensmtpd_conf_dir /etc
__opensmtpd_package_name opensmtpd
__opensmtpd_makemap_bin /usr/sbin/makemap

FreeBSD

変数 デフォルト
__opensmtpd_user _smtpd
__opensmtpd_group _smtpd
__opensmtpd_service smtpd
__opensmtpd_conf_dir /usr/local/etc/mail
__opensmtpd_package_name mail/opensmtpd
__opensmtpd_makemap_bin /usr/local/libexec/opensmtpd/makemap

OpenBSD

変数 デフォルト
__opensmtpd_user _smtpd
__opensmtpd_group _smtpd
__opensmtpd_service smtpd
__opensmtpd_conf_dir /etc/mail
__opensmtpd_package_name ""
__opensmtpd_makemap_bin /usr/sbin/makemap

RedHat

変数 デフォルト
__opensmtpd_user smtpd
__opensmtpd_group smtpd
__opensmtpd_service opensmtpd
__opensmtpd_conf_dir /etc/opensmtpd
__opensmtpd_package_name opensmtpd
__opensmtpd_makemap_bin /sbin/makemap

依存関係

なし

サンプルプレイブック

---

- hosts: localhost
  roles:
    - name: trombik.redhat_repo
      when: ansible_os_family == 'RedHat'
    - role: trombik.freebsd_pkg_repo
      when:
        - ansible_os_family == 'FreeBSD'
    - role: ansible-role-opensmtpd
  vars:
    os_default_group:
      FreeBSD: wheel
      OpenBSD: wheel
      Debian: root
      RedHat: root
    freebsd_pkg_repo:
      FreeBSD:
        enabled: "false"
        state: present
      FreeBSD_latest:
        enabled: "true"
        state: present
        url: pkg+https://pkg.FreeBSD.org/${ABI}/latest
        mirror_type: srv
        signature_type: fingerprints
        fingerprints: /usr/share/keys/pkg
        priority: 100
    redhat_repo:
      epel:
        mirrorlist: "http://mirrors.fedoraproject.org/mirrorlist?repo=epel-{{ ansible_distribution_major_version }}&arch={{ ansible_architecture }}"
        gpgcheck: yes
        enabled: yes

    test_user: [email protected]
    # smtpctl encrypt PassWord
    test_password: "$2b$08$LT/AdE2YSHb19d3hB27.4uXd1/Cj0qQIWc4FdfLlcuqnCUGbRu2Mq"
    # XXX table_passwd in Ubuntu package throws error when UID or GID field is
    # empty
    os_passwd_postfix:
      FreeBSD: ":::::"
      OpenBSD: ":::::"
      Debian: ":12345:12345:::"
      RedHat: ":12345:12345:::"
    passwd_postfix: "{{ os_passwd_postfix[ansible_os_family] }}"

    os_opensmtpd_extra_packages:
      FreeBSD:
        - opensmtpd-extras-table-passwd
      OpenBSD:
        - opensmtpd-extras
      Debian: []
      RedHat: []
    opensmtpd_extra_packages: "{{ os_opensmtpd_extra_packages[ansible_os_family] }}"

    os_opensmtpd_extra_groups:
      FreeBSD:
        - nobody
      OpenBSD:
        - nobody
      Debian:
        - games
      RedHat:
        - games
    opensmtpd_extra_groups: "{{ os_opensmtpd_extra_groups[ansible_os_family] }}"
    opensmtpd_virtual_user:
      name: vmail
      group: vmail
      home: /var/vmail
      comment: Virtual Mail User
      mode: "0755"
    opensmtpd_tables:
      - name: aliases
        path: "{{ opensmtpd_conf_dir }}/aliases"
        type: file
        format: aliases
        mode: "644"
        no_log: no
        values:
          - "MAILER-DAEMON: postmaster"
          - "postmaster: root"
          - "daemon: root"
          - "ftp-bugs: root"
          - "operator: root"
          - "www:    root"
          - "foo: error:500 no such user"
          - "bar: | cat - >/dev/null"
      - name: secrets
        path: "{{ opensmtpd_conf_dir }}/secrets"
        type: file
        owner: root
        group: "{{ opensmtpd_group }}"
        mode: "0640"
        no_log: no
        values:
          - "{{ test_user }} {{ test_password }}"
      - name: passwd
        path: "{{ opensmtpd_conf_dir }}/smtpd_passwd"
        type: passwd
        owner: root
        group: "{{ opensmtpd_group }}"
        mode: "0640"
        no_log: no
        values:
          - "{{ test_user }}:{{ test_password }}{{ passwd_postfix }}"
      - name: domains
        path: "{{ opensmtpd_conf_dir }}/domains"
        type: file
        owner: root
        group: "{{ os_default_group[ansible_os_family] }}"
        mode: "0644"
        no_log: no
        values:
          - example.org
          - example.net
      - name: virtuals
        path: "{{ opensmtpd_conf_dir }}/virtuals"
        type: db
        dbtype: hash
        format: aliases
        owner: root
        group: vmail
        mode: "0444"
        no_log: no
        values:
          - [email protected] [email protected]
          - [email protected] [email protected]
          - [email protected] {{ opensmtpd_virtual_user.name }}
          - [email protected] [email protected]
          - [email protected] [email protected]
          - [email protected] {{ opensmtpd_virtual_user.name }}
      - name: mynetworks
        path: "{{ opensmtpd_conf_dir }}/mynetworks"
        type: db
        format: set
        no_log: no
        values:
          - 192.168.21.0/24

    opensmtpd_flags: -v
    os_listen_on_interface:
      FreeBSD: lo0
      OpenBSD: lo0
      Debian: lo
      RedHat: lo
    opensmtpd_config: |
      {% for list in opensmtpd_tables %}
      {% if list.type == 'passwd' and (ansible_os_family == 'Debian' or ansible_os_family == 'RedHat') %}
      # XXX 現在(2018/05/20)、opensmtpd-extrasのバージョンが
      # opensmtpdより遅れているため、「table-api: bad API version」というエラーが発生します。
      # https://packages.ubuntu.com/bionic/opensmtpd-extras
      #
      # リリースされるまではpasswdテーブルをスキップします
      #
      # また、opensmtpd-extrasはubuntu 14.04から削除されました
      {% else %}
      table {{ list.name }} {{ list.type }}:{{ list.path }}{% if list['type'] == 'db' %}.db{% endif %}
      {% endif %}

      {% endfor %}
      listen on {{ os_listen_on_interface[ansible_os_family] }} port 25

      {% if ansible_os_family == 'OpenBSD' or ansible_os_family == 'FreeBSD' %}
      # 新しいフォーマット
      action "local_mail" maildir "{{ opensmtpd_virtual_user['home'] }}/%{dest.domain}/%{dest.user}/Maildir"
      action "outbound" relay
      match from any for domain <domains> action "local_mail"
      match from src <mynetworks> action "outbound"
      {% else %}
      # 古いフォーマット
      accept from any for domain <domains> virtual <virtuals> \
        deliver to maildir "{{ opensmtpd_virtual_user['home'] }}/%{dest.domain}/%{dest.user}/Maildir"
      accept from any for domain <domains> \
        deliver to mbox
      {% endif %}

ライセンス

Copyright (c) 2017 Tomoyuki Sakurai <y@trombik.org>

このソフトウェアは、手数料の有無にかかわらず、あらゆる目的で使用、複製、変更、配布する権利がここに付与されます。ただし、上記の著作権表示とこの許可表示はすべてのコピーに表示されなければなりません。

このソフトウェアは「現状のまま」提供されており、著者はこのソフトウェアに関してすべての保証を放棄します。商業性や適合性に関する暗黙の保証を含むすべての保証を放棄します。著者は、契約、不法行為またはその他の法的行動に起因または関連して、本ソフトウェアの使用または実行から生じたいかなる特別、直接、間接、または偶発的な損害についても責任を負いません。

著者情報

Tomoyuki Sakurai y@trombik.org

このREADMEはqansibleによって作成されました。

プロジェクトについて

Configures OpenSMTPD

インストール
ansible-galaxy install trombik.opensmtpd
ライセンス
isc
ダウンロード
237
所有者
PGP finger print: 03EB 3D97 5E04 9B0C AB21 93A2 D693 42A9 EFBC 3577 Makerspace and Coliving in Siem Reap, Cambodia: http://info.mkrsgh.org/