Setup mail server and restructure some things
This commit is contained in:
		
					parent
					
						
							
								fa3db3bad6
							
						
					
				
			
			
				commit
				
					
						4a802ab44d
					
				
			
		
					 90 changed files with 512 additions and 66 deletions
				
			
		
							
								
								
									
										61
									
								
								config/hosts/mail-1/configuration.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										61
									
								
								config/hosts/mail-1/configuration.nix
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,61 @@
 | 
			
		|||
{ ... }:
 | 
			
		||||
{
 | 
			
		||||
  boot.loader.grub = {
 | 
			
		||||
    enable = true;
 | 
			
		||||
    device = "/dev/vda";
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  networking = {
 | 
			
		||||
    hostName = "mail-1";
 | 
			
		||||
    useDHCP = true;
 | 
			
		||||
    defaultGateway = {
 | 
			
		||||
      address = "172.16.50.1";
 | 
			
		||||
      interface = "wg0";
 | 
			
		||||
    };
 | 
			
		||||
    interfaces.enp6s18.ipv4 = {
 | 
			
		||||
      routes = [
 | 
			
		||||
        {
 | 
			
		||||
          address = "10.201.0.0";
 | 
			
		||||
          prefixLength = 16;
 | 
			
		||||
          via = "10.202.41.1";
 | 
			
		||||
        }
 | 
			
		||||
        {
 | 
			
		||||
          address = "10.202.0.0";
 | 
			
		||||
          prefixLength = 16;
 | 
			
		||||
          via = "10.202.41.1";
 | 
			
		||||
        }
 | 
			
		||||
        {
 | 
			
		||||
          address = "172.21.87.0"; # management VPN
 | 
			
		||||
          prefixLength = 24;
 | 
			
		||||
          via = "10.202.41.1";
 | 
			
		||||
        }
 | 
			
		||||
        {
 | 
			
		||||
          address = "217.160.117.160"; # 
 | 
			
		||||
          prefixLength = 32;
 | 
			
		||||
          via = "10.202.41.1";
 | 
			
		||||
        }
 | 
			
		||||
      ];
 | 
			
		||||
    };
 | 
			
		||||
    wireguard = {
 | 
			
		||||
      enable = true;
 | 
			
		||||
      interfaces.wg0 = {
 | 
			
		||||
        ips = [
 | 
			
		||||
          "172.16.50.2/24"
 | 
			
		||||
        ];
 | 
			
		||||
        peers = [
 | 
			
		||||
          {
 | 
			
		||||
            name = "lifeline";
 | 
			
		||||
            publicKey = "g3xZ5oJCbPtzYDPTVAS400FDw6kirGR+7300bwiZDUY=";
 | 
			
		||||
            presharedKeyFile = "/secrets/wireguard-lifeline-mail-1-mail-1-psk.secret";
 | 
			
		||||
            endpoint = "lifeline.io.grzb.de:51820";
 | 
			
		||||
            allowedIPs = [ "0.0.0.0/0" ];
 | 
			
		||||
            persistentKeepalive = 25;
 | 
			
		||||
          }
 | 
			
		||||
        ];
 | 
			
		||||
        privateKeyFile = "/secrets/wireguard-lifeline-mail-1-mail-1-privatekey.secret";
 | 
			
		||||
      };
 | 
			
		||||
    };
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  system.stateVersion = "23.05";
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										7
									
								
								config/hosts/mail-1/default.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								config/hosts/mail-1/default.nix
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,7 @@
 | 
			
		|||
{ ... }:
 | 
			
		||||
{
 | 
			
		||||
  imports = [
 | 
			
		||||
    ./configuration.nix
 | 
			
		||||
    ./simple-nixos-mailserver.nix
 | 
			
		||||
  ];
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										85
									
								
								config/hosts/mail-1/secrets.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										85
									
								
								config/hosts/mail-1/secrets.nix
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,85 @@
 | 
			
		|||
{ keyCommandEnv, ... }:
 | 
			
		||||
{
 | 
			
		||||
  deployment.keys = {
 | 
			
		||||
    "wireguard-valkyrie-mail-1-mail-1-psk.secret" = {
 | 
			
		||||
      keyCommand = keyCommandEnv ++ [ "pass" "wireguard/valkyrie-mail-1/psk" ];
 | 
			
		||||
      destDir = "/secrets";
 | 
			
		||||
      user = "root";
 | 
			
		||||
      group = "systemd-network";
 | 
			
		||||
      permissions = "0640";
 | 
			
		||||
      uploadAt = "pre-activation";
 | 
			
		||||
    };
 | 
			
		||||
    "wireguard-mail-1-wg0-privatekey.secret" = {
 | 
			
		||||
      keyCommand = keyCommandEnv ++ [ "pass" "wireguard/mail-1-wg0-privatekey" ];
 | 
			
		||||
      destDir = "/secrets";
 | 
			
		||||
      user = "root";
 | 
			
		||||
      group = "systemd-network";
 | 
			
		||||
      permissions = "0640";
 | 
			
		||||
      uploadAt = "pre-activation";
 | 
			
		||||
    };
 | 
			
		||||
    "mail-fiona-grzb-de.secret" = {
 | 
			
		||||
      keyCommand = keyCommandEnv ++ [ "pass" "mail/fiona-grzb-de" ];
 | 
			
		||||
      destDir = "/secrets";
 | 
			
		||||
      user = "root";
 | 
			
		||||
      group = "root";
 | 
			
		||||
      permissions = "0640";
 | 
			
		||||
      uploadAt = "pre-activation";
 | 
			
		||||
    };
 | 
			
		||||
    "mail-yuri-nekover-se.secret" = {
 | 
			
		||||
      keyCommand = keyCommandEnv ++ [ "pass" "mail/yuri-nekover-se" ];
 | 
			
		||||
      destDir = "/secrets";
 | 
			
		||||
      user = "root";
 | 
			
		||||
      group = "root";
 | 
			
		||||
      permissions = "0640";
 | 
			
		||||
      uploadAt = "pre-activation";
 | 
			
		||||
    };
 | 
			
		||||
    "mail-mio-vs-grzb-de.secret" = {
 | 
			
		||||
      keyCommand = keyCommandEnv ++ [ "pass" "mail/mio-vs-grzb-de" ];
 | 
			
		||||
      destDir = "/secrets";
 | 
			
		||||
      user = "root";
 | 
			
		||||
      group = "root";
 | 
			
		||||
      permissions = "0640";
 | 
			
		||||
      uploadAt = "pre-activation";
 | 
			
		||||
    };
 | 
			
		||||
    "mail-fubuki-wg-grzb-de.secret" = {
 | 
			
		||||
      keyCommand = keyCommandEnv ++ [ "pass" "mail/fubuki-wg-grzb-de" ];
 | 
			
		||||
      destDir = "/secrets";
 | 
			
		||||
      user = "root";
 | 
			
		||||
      group = "root";
 | 
			
		||||
      permissions = "0640";
 | 
			
		||||
      uploadAt = "pre-activation";
 | 
			
		||||
    };
 | 
			
		||||
    "mail-cloud-nekover-se.secret" = {
 | 
			
		||||
      keyCommand = keyCommandEnv ++ [ "pass" "mail/cloud-nekover-se" ];
 | 
			
		||||
      destDir = "/secrets";
 | 
			
		||||
      user = "root";
 | 
			
		||||
      group = "root";
 | 
			
		||||
      permissions = "0640";
 | 
			
		||||
      uploadAt = "pre-activation";
 | 
			
		||||
    };
 | 
			
		||||
    "mail-status-nekover-se.secret" = {
 | 
			
		||||
      keyCommand = keyCommandEnv ++ [ "pass" "mail/status-nekover-se" ];
 | 
			
		||||
      destDir = "/secrets";
 | 
			
		||||
      user = "root";
 | 
			
		||||
      group = "root";
 | 
			
		||||
      permissions = "0640";
 | 
			
		||||
      uploadAt = "pre-activation";
 | 
			
		||||
    };
 | 
			
		||||
    "mail-matrix-nekover-se.secret" = {
 | 
			
		||||
      keyCommand = keyCommandEnv ++ [ "pass" "mail/matrix-nekover-se" ];
 | 
			
		||||
      destDir = "/secrets";
 | 
			
		||||
      user = "root";
 | 
			
		||||
      group = "root";
 | 
			
		||||
      permissions = "0640";
 | 
			
		||||
      uploadAt = "pre-activation";
 | 
			
		||||
    };
 | 
			
		||||
    "mail-social-nekover-se.secret" = {
 | 
			
		||||
      keyCommand = keyCommandEnv ++ [ "pass" "mail/social-nekover-se" ];
 | 
			
		||||
      destDir = "/secrets";
 | 
			
		||||
      user = "root";
 | 
			
		||||
      group = "root";
 | 
			
		||||
      permissions = "0640";
 | 
			
		||||
      uploadAt = "pre-activation";
 | 
			
		||||
    };
 | 
			
		||||
  };
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										66
									
								
								config/hosts/mail-1/simple-nixos-mailserver.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										66
									
								
								config/hosts/mail-1/simple-nixos-mailserver.nix
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,66 @@
 | 
			
		|||
{ simple-nixos-mailserver, ... }:
 | 
			
		||||
{
 | 
			
		||||
  imports = [
 | 
			
		||||
    simple-nixos-mailserver.nixosModule {
 | 
			
		||||
      mailserver = {
 | 
			
		||||
        enable = true;
 | 
			
		||||
        openFirewall = true;
 | 
			
		||||
        fqdn = "mail-1.grzb.de";
 | 
			
		||||
        enableImap = false;
 | 
			
		||||
        enableImapSsl = true;
 | 
			
		||||
        enableSubmission = false;
 | 
			
		||||
        enableSubmissionSsl = true;
 | 
			
		||||
        lmtpSaveToDetailMailbox = "no";
 | 
			
		||||
        domains = [ "grzb.de" "vs.grzb.de" "wg.grzb.de" "nekover.se" ];
 | 
			
		||||
        loginAccounts = {
 | 
			
		||||
          "fiona@grzb.de" = {
 | 
			
		||||
            hashedPasswordFile = "/secrets/mail-fiona-grzb-de.secret";
 | 
			
		||||
            aliases = [ "@grzb.de" ];
 | 
			
		||||
            catchAll = [ "grzb.de" ];
 | 
			
		||||
          };
 | 
			
		||||
          "yuri@nekover.se" = {
 | 
			
		||||
            hashedPasswordFile = "/secrets/mail-yuri-nekover-se.secret";
 | 
			
		||||
            aliases = [ "@nekover.se" ];
 | 
			
		||||
            catchAll = [ "nekover.se" ];
 | 
			
		||||
          };
 | 
			
		||||
          "mio@vs.grzb.de" = {
 | 
			
		||||
            hashedPasswordFile = "/secrets/mail-mio-vs-grzb-de.secret";
 | 
			
		||||
            sendOnly = true;
 | 
			
		||||
            aliases = [ "root@vs.grzb.de" ];
 | 
			
		||||
          };
 | 
			
		||||
          "fubuki@wg.grzb.de" = {
 | 
			
		||||
            hashedPasswordFile = "/secrets/mail-fubuki-wg-grzb-de.secret";
 | 
			
		||||
            sendOnly = true;
 | 
			
		||||
            aliases = [ "root@wg.grzb.de" ];
 | 
			
		||||
          };
 | 
			
		||||
          "cloud@nekover.se" = {
 | 
			
		||||
            hashedPasswordFile = "/secrets/mail-cloud-nekover-se.secret";
 | 
			
		||||
            sendOnly = true;
 | 
			
		||||
          };
 | 
			
		||||
          "status@nekover.se" = {
 | 
			
		||||
            hashedPasswordFile = "/secrets/mail-status-nekover-se.secret";
 | 
			
		||||
            sendOnly = true;
 | 
			
		||||
          };
 | 
			
		||||
          "matrix@nekover.se" = {
 | 
			
		||||
            hashedPasswordFile = "/secrets/mail-matrix-nekover-se.secret";
 | 
			
		||||
            sendOnly = true;
 | 
			
		||||
            aliases = [ "nyareply@nekover.se" ];
 | 
			
		||||
          };
 | 
			
		||||
          "social@nekover.se" = {
 | 
			
		||||
            hashedPasswordFile = "/secrets/mail-social-nekover-se.secret";
 | 
			
		||||
            sendOnly = true;
 | 
			
		||||
            aliases = [ "nyareply@nekover.se" ];
 | 
			
		||||
          };
 | 
			
		||||
        };
 | 
			
		||||
        certificateScheme = "acme-nginx";
 | 
			
		||||
      };
 | 
			
		||||
    }
 | 
			
		||||
  ];
 | 
			
		||||
 | 
			
		||||
  services.postfix = {
 | 
			
		||||
    transport = "relay:[mail-2.grzb.de]";
 | 
			
		||||
    extraConfig = ''
 | 
			
		||||
      proxy_interfaces = 212.53.203.19
 | 
			
		||||
    '';
 | 
			
		||||
  };
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue