trombik.opensmtpd
ansible-role-opensmtpd
smtpd(8)
、いわゆるOpenSMTPDを設定します。
要件
opensmtpd_include_x509_certificate
がyes
の場合、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 です。type がdb でない限り無視されます |
いいえ |
format |
結果のマップファイルのフォーマット。可能な値についてはmakemap(8) の-t type を参照してください。type がdb でない限り無視されます |
いいえ |
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によって作成されました。
インストール
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/