summaryrefslogtreecommitdiffstats
path: root/mail-server/rmilter.nix
blob: 8c07fce453138be8e863bc6a9577c7c910240c2c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#  nixos-mailserver: a simple mail server
#  Copyright (C) 2016-2017  Robin Raymond
#
#  This program is free software: you can redistribute it and/or modify
#  it under the terms of the GNU General Public License as published by
#  the Free Software Foundation, either version 3 of the License, or
#  (at your option) any later version.
#
#  This program is distributed in the hope that it will be useful,
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#  GNU General Public License for more details.
#
#  You should have received a copy of the GNU General Public License
#  along with this program. If not, see <http://www.gnu.org/licenses/>

{ config, pkgs, lib, ... }:

let
  cfg = config.mailserver;

  clamav = if cfg.virusScanning
           then
           ''
             clamav {
               servers = /var/run/clamav/clamd.ctl;
             };
           ''
           else "";
  dkim = if cfg.dkimSigning
  # Note: domain = "*"; causes Rmilter to try to search key in the key path
  # as keypath/domain.selector.key for any domain.
         then
         ''
            dkim {
              domain {
                key = "${cfg.dkimKeyDirectory}";
                domain = "*";
                selector = "${cfg.dkimSelector}";
              };
              sign_alg = sha256;
              auth_only = yes;
            }
         ''
         else "";
in
{
  config = with cfg; lib.mkIf enable {
    services.rspamd = {
        enable = true;
    };

    services.unbound.enable = true;
    networking.nameservers = [ "127.0.0.1" ];

    services.rmilter = {
      inherit debug;
      enable = true;
      postfix.enable = true;
      rspamd = {
        enable = true;
        extraConfig = "extended_spam_headers = yes;";
      };
      extraConfig =
      ''
      use_redis = true;
      max_size = 20M;

      ${clamav}

      ${dkim}
      '';
    };
  };
}