summary refs log tree commit diff
path: root/nixos
diff options
context:
space:
mode:
authorPeter Simons <simons@cryp.to>2016-02-12 12:43:27 +0100
committerPeter Simons <simons@cryp.to>2016-02-12 12:43:27 +0100
commit7bd6fc90cbdc561afc17550290aea6b819a71189 (patch)
tree1d1b32cd92aeb7ef0a787c2bd9526c4ef4b463dc /nixos
parentbfa4ff779c7ab7c65094bd04304bad18143bdb5e (diff)
parent40c7d554d42d544005afb5c35dc3552b9e4d29df (diff)
downloadnixlib-7bd6fc90cbdc561afc17550290aea6b819a71189.tar
nixlib-7bd6fc90cbdc561afc17550290aea6b819a71189.tar.gz
nixlib-7bd6fc90cbdc561afc17550290aea6b819a71189.tar.bz2
nixlib-7bd6fc90cbdc561afc17550290aea6b819a71189.tar.lz
nixlib-7bd6fc90cbdc561afc17550290aea6b819a71189.tar.xz
nixlib-7bd6fc90cbdc561afc17550290aea6b819a71189.tar.zst
nixlib-7bd6fc90cbdc561afc17550290aea6b819a71189.zip
Merge pull request #12725 from jerith666/postfix-dns-bl
postfix service: implement DNS blacklist support
Diffstat (limited to 'nixos')
-rw-r--r--nixos/modules/services/mail/postfix.nix30
1 files changed, 30 insertions, 0 deletions
diff --git a/nixos/modules/services/mail/postfix.nix b/nixos/modules/services/mail/postfix.nix
index 56c89aca8b23..404cdf0f564b 100644
--- a/nixos/modules/services/mail/postfix.nix
+++ b/nixos/modules/services/mail/postfix.nix
@@ -13,6 +13,18 @@ let
   haveTransport = cfg.transport != "";
   haveVirtual = cfg.virtual != "";
 
+  clientAccess =
+    if (cfg.dnsBlacklistOverrides != "")
+    then [ "check_client_access hash:/etc/postfix/client_access" ]
+    else [];
+
+  dnsBl =
+    if (cfg.dnsBlacklists != [])
+    then [ (concatStringsSep ", " (map (s: "reject_rbl_client " + s) cfg.dnsBlacklists)) ]
+    else [];
+
+  clientRestrictions = concatStringsSep ", " (clientAccess ++ dnsBl);
+
   mainCf =
     ''
       compatibility_level = 2
@@ -104,6 +116,9 @@ let
     + optionalString haveVirtual ''
       virtual_alias_maps = hash:/etc/postfix/virtual
     ''
+    + optionalString (cfg.dnsBlacklists != []) ''
+      smtpd_client_restrictions = ${clientRestrictions}
+    ''
     + cfg.extraConfig;
 
   masterCf = ''
@@ -161,6 +176,7 @@ let
 
   aliasesFile = pkgs.writeText "postfix-aliases" aliases;
   virtualFile = pkgs.writeText "postfix-virtual" cfg.virtual;
+  checkClientAccessFile = pkgs.writeText "postfix-check-client-access" cfg.dnsBlacklistOverrides;
   mainCfFile = pkgs.writeText "postfix-main.cf" mainCf;
   masterCfFile = pkgs.writeText "postfix-master.cf" masterCf;
   transportFile = pkgs.writeText "postfix-transport" cfg.transport;
@@ -366,6 +382,17 @@ in
         ";
       };
 
+      dnsBlacklists = mkOption {
+        default = [];
+        type = with types; listOf string;
+        description = "dns blacklist servers to use with smtpd_client_restrictions";
+      };
+
+      dnsBlacklistOverrides = mkOption {
+        default = "";
+        description = "contents of check_client_access for overriding dnsBlacklists";
+      };
+
       extraMasterConf = mkOption {
         type = types.lines;
         default = "";
@@ -494,6 +521,9 @@ in
     (mkIf haveVirtual {
       services.postfix.mapFiles."virtual" = virtualFile;
     })
+    (mkIf (cfg.dnsBlacklists != []) {
+      services.postfix.mapFiles."client_access" = checkClientAccessFile;
+    })
   ]);
 
 }