chkpnt.mailserver

Rola Ansible dla serwera pocztowego typu "wszystko w jednym" opartego na openSUSE Leap 15.5

Status workflow GitHub Rola Ansible

Celem tej roli Ansible jest spełnienie moich wymagań dotyczących własnego serwera pocztowego:

  • Obsługuje openSUSE Leap 15.5
  • Orkiestracja Postfix (MTA), Dovecot (MDA) i Rspamd
  • Postfix używa Dovecot do autoryzacji (SMTP AUTH przez Dovecot SASL)
  • Brak baz danych dla konfiguracji, tylko zwykłe pliki
  • Wiadomości do określonych adresów mogą być przekazywane do innego MTA
  • Wiadomości do określonych adresów mogą być odrzucane
  • Wiadomości wychodzące są podpisywane DKIM
  • Przekazywane wiadomości są podpisywane ARC
  • Można konfigurować konta catch-all
  • Obsługiwane są wiele domen
  • Można stosować reguły Sieve
  • Spam
    • Spam o wysokim wyniku jest odrzucany
    • Wykrywanie spamu można wyłączyć dla określonych nadawców (adresów lub domen)
    • Potencjalny spam nie jest automatycznie dostarczany do folderu Spam (oczywiście można użyć niestandardowej reguły Sieve)
    • Potencjalny spam jest poddawany szarej liście
    • Spam można nauczyć, przenosząc wiadomość do specjalnego folderu IMAP
    • Spam można nauczyć, stosując flagę Junk, która jest używana przez Thunderbirda
    • "Ham" można nauczyć, przenosząc wiadomość do specjalnego folderu IMAP
    • "Ham" można nauczyć, stosując flagę NonJunk, która jest używana przez Thunderbirda
    • "Ham" można nauczyć, oznaczając wiadomość zieloną flagą w aplikacji Mail na iOS
  • Antivirus
    • Integracja ClamAV
    • Integracja Fangfrisch
    • Integracja VirusTotal.com
    • Zainfekowane wiadomości są odrzucane
  • Ładne raporty (dla mnie wystarczy WebUI rspamd)
  • Pra prawie wszystkie wymagania są pokryte testami
  • Testy są wykonywane przez system CI

Użycie i konfiguracja

Ta rola jest dostępna w Ansible Galaxy pod nazwą chkpnt.mailserver. Można ją zainstalować za pomocą

$ ansible-galaxy install chkpnt.mailserver

i użyć w playbooku jak

---
- 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' }
      # Hash można obliczyć za pomocą doveadm.
      # Zalecam użycie Blowfish jako schematu haszowania, idealna liczba rund zależy od systemu.
      # > doveadm pw -s BLF-CRYPT -r 10
      mail_accounts:
        - { user: '[email protected]', password: '{BLF-CRYPT}$2y$10$6W9VYuRklwLg8y2UoP6YHuK5Q8g7g.LOJdSa7K4CgoVMmARNYMVMK' } # Hasło: changeme
        - { user: '[email protected]', password: '{BLF-CRYPT}$2y$10$wZtIn5uHAsbsMgMmOdBdU.qbRgrQxfeej65G63aUxMaDNEHfb8P2e' } # Hasło: changeme
      mail_mailboxes:
        - { name: '[email protected]', path: '/srv/mail/john' }
        - { name: '[email protected]', path: '/srv/mail/jane' }
      mail_aliases:
        # samoreferencyjny alias jest potrzebny, jeśli używany jest mail_transports
        - { for: '[email protected]', destination: '[email protected]' }
        # normalne aliasy
        - { for: '[email protected]', destination: '[email protected]' }
        - for: '[email protected]'
          destination:
            - '[email protected]'
            - '[email protected]'
        # Catch-Alls:
        - { 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 Ten adres nie powinien otrzymywać wiadomości!'
      mail_transports:
        - for: '[email protected]'
          nexthop: 'smtp:gmail.com'
      mail_spam:
        greylisting_delay: 5min
        thresholds: # Wymaganie: szara lista < dodaj_nagłówek < odrzuc
          greylist: 4
          add_header: 6
          reject: 15
        controller:
          # Pracownik kontrolera jest używany do zarządzania statystykami rspamd, aby nauczyć rspamd i służyć WebUI.
          # https://rspamd.com/doc/workers/controller.html
          # Jeśli uzyskujesz dostęp do WebUI z localhosta, nie zostaniesz poproszony o hasło, ponieważ localhost jest "secure_ip"
          # > rspamadm pw
          password: '$2$c75qgo1b8brudgq7wokg8wxr5qiby84p$ye6ss3ymc4h4u4swk3fhx3ph7jesahqrzw8kkxwhyfb14g4rkfhb' # Hasło: changeme
          bind_socket: 'localhost:11334' 
        # Obsługiwane są wyrażenia regularne
        allowlist_domain:
          - foobar.test
        allowlist_email:
          - /.*@important.test/

Domyślne wartości zmiennych są zdefiniowane w defaults/main.yml. Wszystkie zmienne odnoszące się do example.com lub podobnych powinny być jawnie zadeklarowane w Twoim playbooku.

Playbook tests/testfixtures/vms/sut.yml, używany przez testy, jest również dobrym przykładem.

Rozwój

Zalecam skonfigurowanie środowiska Python za pomocą pipenv. Na macOS pipenv można zainstalować za pomocą Homebrew:

$ brew install pipenv

Aby używać środowiska Python z pipenv, wystarczy wprowadzić następujące komendy:

$ pipenv install --dev
$ pipenv shell

Aby uruchomić testy, wymagana jest VirtualBox i Vagrant. Na macOS te zależności można zainstalować za pomocą Homebrew:

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

W celu zarządzania maszynami wirtualnymi Vagrant polecam użycie Vagrant-Manager, małej aplikacji pomocniczej na pasek menu.

$ brew install --cask vagrant-manager

Dodatkowe informacje o testach można znaleźć w odpowiednim dokumencie.

Licencja

Apache-2.0

O projekcie

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

Zainstaluj
ansible-galaxy install chkpnt.mailserver
Licencja
apache-2.0
Pobrania
82
Właściciel