chkpnt.mailserver

Rôle Ansible pour un serveur de messagerie tout-en-un basé sur openSUSE Leap 15.5

Statut du Workflow GitHub Rôle Ansible

L'objectif de ce rôle Ansible est de répondre à mes besoins pour mon propre serveur de messagerie :

  • Supporte openSUSE Leap 15.5
  • Orchestration de Postfix (MTA), Dovecot (MDA) et Rspamd
  • Postfix utilise Dovecot pour l'authentification (SMTP AUTH par Dovecot SASL)
  • Pas de bases de données pour la configuration, juste des fichiers simples
  • Les mails à des adresses spécifiques peuvent être relayés vers un autre MTA
  • Les mails à des adresses spécifiques peuvent être rejetés
  • Les mails sortants sont signés DKIM
  • Les mails relayés sont signés ARC
  • Des comptes Catch-all peuvent être configurés
  • Plusieurs domaines sont supportés
  • Des règles Sieve peuvent être utilisées
  • Spam
    • Les spams avec un score élevé sont rejetés
    • La détection du spam peut être désactivée pour des expéditeurs spécifiques (adresses ou domaines)
    • Les spams potentiels ne sont pas livrés automatiquement dans un dossier Spam (bien sûr, une règle Sieve personnalisée peut être utilisée)
    • Les spams potentiels sont en liste grise
    • Les spams peuvent être appris en déplaçant le mail dans un dossier IMAP spécial
    • Les spams peuvent être appris en appliquant le drapeau Junk, utilisé par Thunderbird
    • Les mails valides peuvent être appris en déplaçant le mail dans un dossier IMAP spécial
    • Les mails valides peuvent être appris en appliquant le drapeau NonJunk, utilisé par Thunderbird
    • Les mails valides peuvent être appris en marquant le mail avec un drapeau vert dans l'application Mail iOS
  • Antivirus
    • Intégration de ClamAV
    • Intégration de Fangfrisch
    • Intégration de VirusTotal.com
    • Les mails infectés sont rejetés
  • Jolis rapports (l'interface Web de rspamd me suffit)
  • Presque toutes les exigences sont couverts par des tests
  • Les tests sont exécutés par un système CI

Utilisation et configuration

Ce rôle est disponible via Ansible Galaxy sous le nom chkpnt.mailserver. Il peut être installé avec

$ ansible-galaxy install chkpnt.mailserver

et utilisé dans un playbook comme

---
- hosts: server1
  remote_user: root
  roles:
  - role: chkpnt.mailserver
    vars:
      mail_domain: exemple.com
      mail_hostname: serveur1.exemple.com
      mail_mailname: serveur1.exemple.com
      mail_mailbox_domains:
        - exemple.com
        - exemple.net
        - exemple.org
      mail_ssl:
        certificate: '/etc/ssl/servercerts/exemple.com.crt.pem'
        private_key: '/etc/ssl/private/exemple.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: exemple.com, selector: 'key1', private_key: '/var/lib/rspamd/dkim/exemple.com.key1.key' }
        - { domain: exemple.org, selector: 'key1', private_key: '/var/lib/rspamd/dkim/exemple.org.key1.key' }
        - { domain: exemple.net, selector: 'key1', private_key: '/var/lib/rspamd/dkim/exemple.net.key1.key' }
      mail_accounts:
        - { user: '[email protected]', password: '{BLF-CRYPT}$2y$10$6W9VYuRklwLg8y2UoP6YHuK5Q8g7g.LOJdSa7K4CgoVMmARNYMVMK' } # Mot de passe : changeme
        - { user: '[email protected]', password: '{BLF-CRYPT}$2y$10$wZtIn5uHAsbsMgMmOdBdU.qbRgrQxfeej65G63aUxMaDNEHfb8P2e' } # Mot de passe : 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: '@exemple.com', destination: '[email protected]' }
        - { for: '@exemple.org', destination: '[email protected]' }
        - { for: '@exemple.net', destination: '[email protected]' }
      mail_recipient_restrictions:
        - for: '[email protected]'
          action: 'REJECT Cette adresse ne doit pas recevoir de mails !'
      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' # Mot de passe : changeme
          bind_socket: 'localhost:11334' 
        allowlist_domain:
          - foobar.test
        allowlist_email:
          - /.*@important.test/

Les valeurs par défaut des variables sont définies dans defaults/main.yml. Toutes les variables faisant référence à exemple.com ou similaire doivent être déclarées explicitement dans votre playbook.

Le playbook tests/testfixtures/vms/sut.yml utilisé par les tests est aussi un bon exemple.

Développement

Je recommande de configurer un environnement Python en utilisant pipenv. Sur macOS, pipenv peut être installé avec Homebrew :

$ brew install pipenv

Pour utiliser l'environnement Python avec pipenv, entrez simplement les commandes suivantes :

$ pipenv install --dev
$ pipenv shell

Pour exécuter les tests, VirtualBox et Vagrant sont requis. Sur macOS, ces dépendances peuvent également être installées avec Homebrew :

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

Pour gérer vos machines virtuelles Vagrant, je recommande d'utiliser Vagrant-Manager, une petite application utilitaire pour la barre de menu.

$ brew install --cask vagrant-manager

Des informations supplémentaires concernant les tests peuvent être trouvées dans le document correspondant.

Licence

Apache-2.0

À propos du projet

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

Installer
ansible-galaxy install chkpnt.mailserver
Licence
apache-2.0
Téléchargements
82
Propriétaire