opensmtpd

ansible-role-opensmtpd

Настройка smtpd(8), также известного как OpenSMTPD.

Требования

Когда opensmtpd_include_x509_certificate равно yes, необходимо иметь доступный trombik.x509-certificate, обычно через requirements.yml.

Если установлен opensmtpd-extras, версия API opensmtpd должна совпадать с версией 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 Один из поддерживаемых типов бэкенда, по умолчанию установка принимает только file или db. Установите OpenSMTPD-extra для других типов. да
owner Владельцем файла нет
group Группа файла нет
dbtype Один из поддерживаемых форматов базы данных, по умолчанию - hash. Игнорируется, если type равен db нет
format Формат результирующего файла карты, смотрите -t type в makemap(8) для возможных значений. Игнорируется, если 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 в пакете Ubuntu вызывает ошибку, когда UID или GID поле пустое
    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: Виртуальный почтовый пользователь
      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 <[email protected]>

Разрешение на использование, копирование, изменение и распространение этого программного обеспечения для любой цели с или без оплаты настоящим предоставляется, при условии, что вышеуказанное уведомление об авторских правах и это разрешение появляются во всех копиях.

ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ "КАК ЕСТЬ" И АВТОР ОТКАЗЫВАЕТСЯ ОТ ВСЕХ ГАРАНТИЙ
С ОТНОШЕНИЕМ ЭТОГО ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ, ВКЛЮЧАЯ ВСЕ IMPLIED WARRANTIES О
ТОРГОВОЙ ПРИГОДНОСТИ И УДОВЛЕТВОРИТЕЛЬНОСТИ. НИКАКИМ ОБРАЗОМ АВТОР НЕ НЕСЕТ ОТВЕТСТВЕННОСТИ ЗА
ЛЮБЫЕ ОСОБЫЕ, ПРЯМЫЕ, КОСВЕННЫЕ ИЛИ ПОСЛЕДУЮЩИЕ УБЫТКИ ИЛИ ЛЮБЫЕ УБЫТКИ
В РЕЗУЛЬТАТЕ ПОТЕРИ ИСПОЛЬЗОВАНИЯ, ДАННЫХ ИЛИ ПРИБЫЛИ, НЕЗАВИСИМО ОТ ТОГО, ЯВЛЯЮТСЯ ЛИ ОНИ
РЕЗУЛЬТАТОМ ДЕЙСТВИЙ ПО КОНТРАКТУ, НЕОСТОРОЖНОСТИ ИЛИ ИНОГО НАНОСИМОГО УЩЕРБА, ВЫТЕКАЮЩИМИ ИЗ
ИЛИ В СВЯЗИ С ИСПОЛЬЗОВАНИЕМ ИЛИ РАБОТОЙ ЭТОГО ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ.

Информация об авторе

Tomoyuki Sakurai y@trombik.org

Этот README был создан с помощью qansible

О проекте

Configures OpenSMTPD

Установить
ansible-galaxy install trombik/ansible-role-opensmtpd
Лицензия
isc
Загрузки
225
Владелец
PGP finger print: 03EB 3D97 5E04 9B0C AB21 93A2 D693 42A9 EFBC 3577 Makerspace and Coliving in Siem Reap, Cambodia: http://info.mkrsgh.org/