chkpnt.mailserver

openSUSE Leap 15.5に基づくオールインワンメールサーバーのAnsibleロール

GitHub Workflow Status
Ansible Role

このAnsibleロールの目的は、私自身のメールサーバーに対する要望を満たすことです:

  • openSUSE Leap 15.5をサポート
  • Postfix(MTA)、Dovecot(MDA)、およびRspamdのオーケストレーション
  • PostfixはDovecotを認証に使用(Dovecot SASLを通じたSMTP AUTH)
  • 設定のためのデータベースは不要、単純なファイルのみ
  • 特定のアドレスへのメールを別のMTAに中継可能
  • 特定のアドレスへのメールを拒否可能
  • 送信メールはDKIM署名付き
  • 中継メールはARC署名付き
  • キャッチオールアカウントを設定可能
  • 複数のドメインをサポート
  • Sieveルールを使用可能
  • スパム
    • 高スコアのスパムは拒否される
    • 特定の送信者(アドレスまたはドメイン)についてスパム検出を無効化可能
    • 潜在的なスパムは自動的にスパムフォルダに配信されない(もちろん、カスタムSieveルールを使用可能)
    • 潜在的なスパムはグレーリストされる
    • スパムは特別なIMAPフォルダに移動することで学習可能
    • スパムは、Thunderbirdで使用されるJunkフラグを適用して学習可能
    • ハムは特別なIMAPフォルダに移動することで学習可能
    • ハムは、Thunderbirdで使用されるNonJunkフラグを適用して学習可能
    • ハムはiOSメールアプリで緑のフラグでマークすることで学習可能
  • ウイルス対策
    • ClamAVの統合
    • Fangfrischの統合
    • VirusTotal.comの統合
    • 感染したメールは拒否される
  • きれいなレポート(rspamd WebUIは私には十分)
  • ほとんどすべての要件はテストされている
  • テストはCIシステムによって実行される

使用法と設定

このロールはAnsible Galaxyでchkpnt.mailserverという名前で利用可能です。インストールは次のコマンドでできます:

$ ansible-galaxy install chkpnt.mailserver

プレイブック内での使用例:

---
- 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' }
      # ハッシュはdoveadmで計算可能です。
      # Blowfishをハッシングスキーマとして使用することをお勧めします。理想的なラウンド数はシステムによります。
      # > doveadm pw -s BLF-CRYPT -r 10
      mail_accounts:
        - { user: '[email protected]', password: '{BLF-CRYPT}$2y$10$6W9VYuRklwLg8y2UoP6YHuK5Q8g7g.LOJdSa7K4CgoVMmARNYMVMK' } # パスワード: changeme
        - { user: '[email protected]', password: '{BLF-CRYPT}$2y$10$wZtIn5uHAsbsMgMmOdBdU.qbRgrQxfeej65G63aUxMaDNEHfb8P2e' } # パスワード: changeme
      mail_mailboxes:
        - { name: '[email protected]', path: '/srv/mail/john' }
        - { name: '[email protected]', path: '/srv/mail/jane' }
      mail_aliases:
        # mail_transportsが使用される場合は自己参照のエイリアスが必要
        - { 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 このアドレスはメールを受信することはできません!'
      mail_transports:
        - for: '[email protected]'
          nexthop: 'smtp:gmail.com'
      mail_spam:
        greylisting_delay: 5
        thresholds: # 要件: greylist < add_header < reject
          greylist: 4
          add_header: 6
          reject: 15
        controller:
          # コントローラー作業者はrspamdの統計を管理し、rspamdを学習し、WebUIを提供します。
          # https://rspamd.com/doc/workers/controller.html
          # localhostからWebUIにアクセスする場合、localhostは「secure_ip」であるため、パスワードを求められません。
          # > rspamadm pw
          password: '$2$c75qgo1b8brudgq7wokg8wxr5qiby84p$ye6ss3ymc4h4u4swk3fhx3ph7jesahqrzw8kkxwhyfb14g4rkfhb' # パスワード: changeme
          bind_socket: 'localhost:11334' 
        # 正規表現もサポートされています
        allowlist_domain:
          - foobar.test
        allowlist_email:
          - /.*@important.test/

変数のデフォルトはdefaults/main.ymlで定義されています。example.comなどに関連するすべての変数は、プレイブック内で明示的に宣言されることが期待されています。

テストで使用されるプレイブックtests/testfixtures/vms/sut.ymlも良い例です。

開発

Python環境をpipenvを使用して設定することをお勧めします。macOSでは、pipenvはHomebrewを使用してインストール可能です:

$ brew install pipenv

pipenvを使用してPython環境に入るには、次のコマンドを実行してください:

$ pipenv install --dev
$ pipenv shell

テストを実行するには、VirtualBoxとVagrantが必要です。macOSでは、これらの依存関係もHomebrewを使用してインストール可能です:

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

Vagrantの仮想マシンを管理するためには、Vagrant-Managerというメニューバー用の小さなユーティリティアプリをおすすめします。

$ brew install --cask vagrant-manager

テストに関する追加情報は、関連するドキュメントで確認できます。

ライセンス

Apache-2.0

プロジェクトについて

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

インストール
ansible-galaxy install chkpnt.mailserver
ライセンス
apache-2.0
ダウンロード
82
所有者