chkpnt.mailserver

Rol de Ansible para un servidor de correo todo en uno basado en openSUSE Leap 15.5

Estado del flujo de trabajo de GitHub Rol de Ansible

El propósito de este rol de Ansible es satisfacer mis necesidades en mi propio servidor de correo:

  • Soporta openSUSE Leap 15.5
  • Orquestación de Postfix (MTA), Dovecot (MDA) y Rspamd
  • Postfix usa Dovecot para autenticación (SMTP AUTH a través de Dovecot SASL)
  • Sin bases de datos para la configuración, solo archivos simples
  • Los correos a direcciones específicas pueden ser reenviados a otro MTA
  • Los correos a direcciones específicas pueden ser rechazados
  • Los correos salientes están firmados con DKIM
  • Los correos reenviados están firmados con ARC
  • Se pueden configurar cuentas Catch-all
  • Se soportan múltiples dominios
  • Se pueden usar reglas Sieve
  • Spam
    • El spam con un alto puntaje es rechazado
    • La detección de spam se puede desactivar para remitentes específicos (direcciones o dominios)
    • El spam potencial no se entrega automáticamente en una carpeta de spam (por supuesto, se puede usar una regla Sieve personalizada)
    • El spam potencial está en lista gris
    • Se puede aprender spam moviendo el correo a una carpeta IMAP especial
    • Se puede aprender spam aplicando la etiqueta Junk, que se usa en Thunderbird
    • Se puede aprender ham moviendo el correo a una carpeta IMAP especial
    • Se puede aprender ham aplicando la etiqueta NonJunk, que se usa en Thunderbird
    • Se puede aprender ham marcando el correo con una etiqueta verde en la aplicación de correo de iOS
  • Antivirus
    • Integración de ClamAV
    • Integración de Fangfrisch
    • Integración de VirusTotal.com
    • Los correos infectados son rechazados
  • Informes bonitos (la interfaz web de rspamd es suficiente para mí)
  • Casi todos los requisitos están cubiertos por pruebas
  • Las pruebas son ejecutadas por un sistema de CI

Uso y configuración

Este rol está disponible en Ansible Galaxy bajo el nombre chkpnt.mailserver. Se puede instalar con

$ ansible-galaxy install chkpnt.mailserver

y utilizar dentro de un playbook así:

---
- hosts: server1
  remote_user: root
  roles:
  - role: chkpnt.mailserver
    vars:
      mail_domain: example.com
      mail_hostname: server1.example.com
      mail_mailname: server1.example.com
      mail_mailbox_domains:
        - example.com
        - example.net
        - example.org
      mail_ssl:
        certificate: '/etc/ssl/servercerts/example.com.crt.pem'
        private_key: '/etc/ssl/private/example.com.privkey.pem'
        generate_certificate_for_test: yes
        generate_safe_primes_for_dh: yes # https://www.openssl.org/news/secadv/20160128.txt
      mail_dkim_keys:
        - { domain: example.com, selector: 'key1', private_key: '/var/lib/rspamd/dkim/example.com.key1.key' }
        - { domain: example.org, selector: 'key1', private_key: '/var/lib/rspamd/dkim/example.org.key1.key' }
        - { domain: example.net, selector: 'key1', private_key: '/var/lib/rspamd/dkim/example.net.key1.key' }
      mail_accounts:
        - { user: '[email protected]', password: '{BLF-CRYPT}$2y$10$6W9VYuRklwLg8y2UoP6YHuK5Q8g7g.LOJdSa7K4CgoVMmARNYMVMK' } # Contraseña: changeme
        - { user: '[email protected]', password: '{BLF-CRYPT}$2y$10$wZtIn5uHAsbsMgMmOdBdU.qbRgrQxfeej65G63aUxMaDNEHfb8P2e' } # Contraseña: changeme
      mail_mailboxes:
        - { name: '[email protected]', path: '/srv/mail/john' }
        - { name: '[email protected]', path: '/srv/mail/jane' }
      mail_aliases:
        - { for: '[email protected]', destination: '[email protected]' }
        - { for: '[email protected]', destination: '[email protected]' }
        - for: '[email protected]'
          destination:
            - '[email protected]'
            - '[email protected]'
        - { for: '@example.com', destination: '[email protected]' }
        - { for: '@example.org', destination: '[email protected]' }
        - { for: '@example.net', destination: '[email protected]' }
      mail_recipient_restrictions:
        - for: '[email protected]'
          action: 'REJECT Esta dirección no debe recibir correos!'
      mail_transports:
        - for: '[email protected]'
          nexthop: 'smtp:gmail.com'
      mail_spam:
        greylisting_delay: 5min
        thresholds:
          greylist: 4
          add_header: 6
          reject: 15
        controller:
          password: '$2$c75qgo1b8brudgq7wokg8wxr5qiby84p$ye6ss3ymc4h4u4swk3fhx3ph7jesahqrzw8kkxwhyfb14g4rkfhb' # Contraseña: changeme
          bind_socket: 'localhost:11334' 
        allowlist_domain:
          - foobar.test
        allowlist_email:
          - /.*@important.test/

Los valores predeterminados de las variables están definidos en defaults/main.yml. Se espera que todas las variables que se refieren a example.com o similares se declaren explícitamente en tu playbook.

El playbook tests/testfixtures/vms/sut.yml usado por las pruebas es un buen ejemplo también.

Desarrollo

Recomiendo configurar un entorno de Python usando pipenv. En macOS, pipenv se puede instalar usando Homebrew:

$ brew install pipenv

Para usar el entorno de Python con pipenv, simplemente ingresa los siguientes comandos:

$ pipenv install --dev
$ pipenv shell

Para ejecutar las pruebas, se requieren VirtualBox y Vagrant. En macOS, estas dependencias también se pueden instalar usando Homebrew:

$ brew install --cask virtualbox
$ brew install --cask vagrant

Para gestionar tus máquinas virtuales de Vagrant, recomiendo usar Vagrant-Manager, una pequeña aplicación utilitaria para la barra de menú.

$ brew install --cask vagrant-manager

Información adicional sobre las pruebas se puede encontrar en el documento correspondiente document.

Licencia

Apache-2.0

Acerca del proyecto

Ansible role for an all-in-one mail server based on openSUSE Leap 15.5

Instalar
ansible-galaxy install chkpnt.mailserver
Licencia
apache-2.0
Descargas
82
Propietario