diff options
Diffstat (limited to 'hosts/surtr/email/default.nix')
-rw-r--r-- | hosts/surtr/email/default.nix | 52 |
1 files changed, 40 insertions, 12 deletions
diff --git a/hosts/surtr/email/default.nix b/hosts/surtr/email/default.nix index 80611c3c..22790fbb 100644 --- a/hosts/surtr/email/default.nix +++ b/hosts/surtr/email/default.nix | |||
@@ -112,6 +112,11 @@ in { | |||
112 | mailin.bouncy.email /run/credentials/postfix.service/mailin.bouncy.email.full.pem | 112 | mailin.bouncy.email /run/credentials/postfix.service/mailin.bouncy.email.full.pem |
113 | mailsub.bouncy.email /run/credentials/postfix.service/mailsub.bouncy.email.full.pem | 113 | mailsub.bouncy.email /run/credentials/postfix.service/mailsub.bouncy.email.full.pem |
114 | .bouncy.email /run/credentials/postfix.service/bouncy.email.full.pem | 114 | .bouncy.email /run/credentials/postfix.service/bouncy.email.full.pem |
115 | |||
116 | kleen.consulting /run/credentials/postfix.service/kleen.consulting.full.pem | ||
117 | mailin.kleen.consulting /run/credentials/postfix.service/mailin.kleen.consulting.full.pem | ||
118 | mailsub.kleen.consulting /run/credentials/postfix.service/mailsub.kleen.consulting.full.pem | ||
119 | .kleen.consulting /run/credentials/postfix.service/kleen.consulting.full.pem | ||
115 | ''}''; | 120 | ''}''; |
116 | 121 | ||
117 | smtp_tls_policy_maps = "socketmap:unix:${config.services.postfix-mta-sts-resolver.settings.path}:postfix"; | 122 | smtp_tls_policy_maps = "socketmap:unix:${config.services.postfix-mta-sts-resolver.settings.path}:postfix"; |
@@ -278,6 +283,7 @@ in { | |||
278 | separator = "+"; | 283 | separator = "+"; |
279 | excludeDomains = [ "surtr.yggdrasil.li" | 284 | excludeDomains = [ "surtr.yggdrasil.li" |
280 | ".bouncy.email" "bouncy.email" | 285 | ".bouncy.email" "bouncy.email" |
286 | ".kleen.consulting" "kleen.consulting" | ||
281 | ]; | 287 | ]; |
282 | }; | 288 | }; |
283 | 289 | ||
@@ -285,7 +291,7 @@ in { | |||
285 | enable = true; | 291 | enable = true; |
286 | user = "postfix"; group = "postfix"; | 292 | user = "postfix"; group = "postfix"; |
287 | socket = "local:/run/opendkim/opendkim.sock"; | 293 | socket = "local:/run/opendkim/opendkim.sock"; |
288 | domains = ''csl:${concatStringsSep "," ["surtr.yggdrasil.li" "bouncy.email"]}''; | 294 | domains = ''csl:${concatStringsSep "," ["surtr.yggdrasil.li" "bouncy.email" "kleen.consulting"]}''; |
289 | selector = "surtr"; | 295 | selector = "surtr"; |
290 | configFile = builtins.toFile "opendkim.conf" '' | 296 | configFile = builtins.toFile "opendkim.conf" '' |
291 | Syslog true | 297 | Syslog true |
@@ -432,6 +438,15 @@ in { | |||
432 | ssl_key = </run/credentials/dovecot2.service/bouncy.email.key.pem | 438 | ssl_key = </run/credentials/dovecot2.service/bouncy.email.key.pem |
433 | } | 439 | } |
434 | 440 | ||
441 | local_name imap.kleen.consulting { | ||
442 | ssl_cert = </run/credentials/dovecot2.service/imap.kleen.consulting.pem | ||
443 | ssl_key = </run/credentials/dovecot2.service/imap.kleen.consulting.key.pem | ||
444 | } | ||
445 | local_name kleen.consulting { | ||
446 | ssl_cert = </run/credentials/dovecot2.service/kleen.consulting.pem | ||
447 | ssl_key = </run/credentials/dovecot2.service/kleen.consulting.key.pem | ||
448 | } | ||
449 | |||
435 | ssl_require_crl = no | 450 | ssl_require_crl = no |
436 | ssl_verify_client_cert = yes | 451 | ssl_verify_client_cert = yes |
437 | 452 | ||
@@ -651,12 +666,17 @@ in { | |||
651 | }; | 666 | }; |
652 | 667 | ||
653 | security.acme.domains = { | 668 | security.acme.domains = { |
669 | "surtr.yggdrasil.li" = {}; | ||
654 | "bouncy.email" = {}; | 670 | "bouncy.email" = {}; |
655 | "mailin.bouncy.email" = {}; | 671 | "mailin.bouncy.email" = {}; |
656 | "mailsub.bouncy.email" = {}; | 672 | "mailsub.bouncy.email" = {}; |
657 | "imap.bouncy.email" = {}; | 673 | "imap.bouncy.email" = {}; |
658 | "mta-sts.bouncy.email" = {}; | 674 | "mta-sts.bouncy.email" = {}; |
659 | "surtr.yggdrasil.li" = {}; | 675 | "kleen.consulting" = {}; |
676 | "mailin.kleen.consulting" = {}; | ||
677 | "mailsub.kleen.consulting" = {}; | ||
678 | "imap.kleen.consulting" = {}; | ||
679 | "mta-sts.kleen.consulting" = {}; | ||
660 | } // listToAttrs (map (domain: nameValuePair "spm.${domain}" {}) spmDomains); | 680 | } // listToAttrs (map (domain: nameValuePair "spm.${domain}" {}) spmDomains); |
661 | 681 | ||
662 | systemd.services.postfix = { | 682 | systemd.services.postfix = { |
@@ -666,6 +686,9 @@ in { | |||
666 | "bouncy.email.full.pem:${config.security.acme.certs."bouncy.email".directory}/full.pem" | 686 | "bouncy.email.full.pem:${config.security.acme.certs."bouncy.email".directory}/full.pem" |
667 | "mailin.bouncy.email.full.pem:${config.security.acme.certs."mailin.bouncy.email".directory}/full.pem" | 687 | "mailin.bouncy.email.full.pem:${config.security.acme.certs."mailin.bouncy.email".directory}/full.pem" |
668 | "mailsub.bouncy.email.full.pem:${config.security.acme.certs."mailsub.bouncy.email".directory}/full.pem" | 688 | "mailsub.bouncy.email.full.pem:${config.security.acme.certs."mailsub.bouncy.email".directory}/full.pem" |
689 | "kleen.consulting.full.pem:${config.security.acme.certs."kleen.consulting".directory}/full.pem" | ||
690 | "mailin.kleen.consulting.full.pem:${config.security.acme.certs."mailin.kleen.consulting".directory}/full.pem" | ||
691 | "mailsub.kleen.consulting.full.pem:${config.security.acme.certs."mailsub.kleen.consulting".directory}/full.pem" | ||
669 | ]; | 692 | ]; |
670 | }; | 693 | }; |
671 | 694 | ||
@@ -684,6 +707,10 @@ in { | |||
684 | "bouncy.email.pem:${config.security.acme.certs."bouncy.email".directory}/fullchain.pem" | 707 | "bouncy.email.pem:${config.security.acme.certs."bouncy.email".directory}/fullchain.pem" |
685 | "imap.bouncy.email.key.pem:${config.security.acme.certs."imap.bouncy.email".directory}/key.pem" | 708 | "imap.bouncy.email.key.pem:${config.security.acme.certs."imap.bouncy.email".directory}/key.pem" |
686 | "imap.bouncy.email.pem:${config.security.acme.certs."imap.bouncy.email".directory}/fullchain.pem" | 709 | "imap.bouncy.email.pem:${config.security.acme.certs."imap.bouncy.email".directory}/fullchain.pem" |
710 | "kleen.consulting.key.pem:${config.security.acme.certs."kleen.consulting".directory}/key.pem" | ||
711 | "kleen.consulting.pem:${config.security.acme.certs."kleen.consulting".directory}/fullchain.pem" | ||
712 | "imap.kleen.consulting.key.pem:${config.security.acme.certs."imap.kleen.consulting".directory}/key.pem" | ||
713 | "imap.kleen.consulting.pem:${config.security.acme.certs."imap.kleen.consulting".directory}/fullchain.pem" | ||
687 | ]; | 714 | ]; |
688 | }; | 715 | }; |
689 | }; | 716 | }; |
@@ -713,12 +740,11 @@ in { | |||
713 | proxy_set_header SPM-DOMAIN "${domain}"; | 740 | proxy_set_header SPM-DOMAIN "${domain}"; |
714 | ''; | 741 | ''; |
715 | }; | 742 | }; |
716 | }) spmDomains) // { | 743 | }) spmDomains) // listToAttrs (map (domain: nameValuePair "mta-sts.${domain}" { |
717 | "mta-sts.bouncy.email" = { | ||
718 | forceSSL = true; | 744 | forceSSL = true; |
719 | sslCertificate = "/run/credentials/nginx.service/mta-sts.bouncy.email.pem"; | 745 | sslCertificate = "/run/credentials/nginx.service/mta-sts.${domain}.pem"; |
720 | sslCertificateKey = "/run/credentials/nginx.service/mta-sts.bouncy.email.key.pem"; | 746 | sslCertificateKey = "/run/credentials/nginx.service/mta-sts.${domain}.key.pem"; |
721 | sslTrustedCertificate = "/run/credentials/nginx.service/mta-sts.bouncy.email.chain.pem"; | 747 | sslTrustedCertificate = "/run/credentials/nginx.service/mta-sts.${domain}.chain.pem"; |
722 | 748 | ||
723 | extraConfig = '' | 749 | extraConfig = '' |
724 | add_header Strict-Transport-Security "max-age=63072000" always; | 750 | add_header Strict-Transport-Security "max-age=63072000" always; |
@@ -734,18 +760,17 @@ in { | |||
734 | charset utf-8; | 760 | charset utf-8; |
735 | source_charset utf-8; | 761 | source_charset utf-8; |
736 | ''; | 762 | ''; |
737 | root = pkgs.runCommand "mta-sts" {} '' | 763 | root = pkgs.runCommand "mta-sts.${domain}" {} '' |
738 | mkdir -p $out/.well-known | 764 | mkdir -p $out/.well-known |
739 | cp ${pkgs.writeText "mta-sts.txt" '' | 765 | cp ${pkgs.writeText "mta-sts.${domain}.txt" '' |
740 | version: STSv1 | 766 | version: STSv1 |
741 | mode: enforce | 767 | mode: enforce |
742 | max_age: 2419200 | 768 | max_age: 2419200 |
743 | mx: mailin.bouncy.email | 769 | mx: mailin.${domain} |
744 | ''} $out/.well-known/mta-sts.txt | 770 | ''} $out/.well-known/mta-sts.txt |
745 | ''; | 771 | ''; |
746 | }; | 772 | }; |
747 | }; | 773 | }) ["bouncy.email" "kleen.consulting"]); |
748 | }; | ||
749 | }; | 774 | }; |
750 | 775 | ||
751 | systemd.services.nginx.serviceConfig.LoadCredential = concatMap (domain: [ | 776 | systemd.services.nginx.serviceConfig.LoadCredential = concatMap (domain: [ |
@@ -755,6 +780,9 @@ in { | |||
755 | "mta-sts.bouncy.email.key.pem:${config.security.acme.certs."mta-sts.bouncy.email".directory}/key.pem" | 780 | "mta-sts.bouncy.email.key.pem:${config.security.acme.certs."mta-sts.bouncy.email".directory}/key.pem" |
756 | "mta-sts.bouncy.email.pem:${config.security.acme.certs."mta-sts.bouncy.email".directory}/fullchain.pem" | 781 | "mta-sts.bouncy.email.pem:${config.security.acme.certs."mta-sts.bouncy.email".directory}/fullchain.pem" |
757 | "mta-sts.bouncy.email.chain.pem:${config.security.acme.certs."mta-sts.bouncy.email".directory}/chain.pem" | 782 | "mta-sts.bouncy.email.chain.pem:${config.security.acme.certs."mta-sts.bouncy.email".directory}/chain.pem" |
783 | "mta-sts.kleen.consulting.key.pem:${config.security.acme.certs."mta-sts.kleen.consulting".directory}/key.pem" | ||
784 | "mta-sts.kleen.consulting.pem:${config.security.acme.certs."mta-sts.kleen.consulting".directory}/fullchain.pem" | ||
785 | "mta-sts.kleen.consulting.chain.pem:${config.security.acme.certs."mta-sts.kleen.consulting".directory}/chain.pem" | ||
758 | ]; | 786 | ]; |
759 | 787 | ||
760 | systemd.services.spm = { | 788 | systemd.services.spm = { |