e0453b0123
- caddy: security headers (X-Content-Type-Options/X-XSS-Protection/ X-Frame-Options) on all vhosts + baseline CSP; strip SnappyMail upstream copies via header_down on mail.severijnse.eu - tlsa-updater: compute TLSA 3 1 1 from cert SPKI (SHA-256), sync _25/_465/_993, fail-safe placeholders; coredns zone updated - pre-commit: wire cachix/git-hooks.nix (alejandra, statix, actionlint, ...); CI pre-commit job over x86_64 + aarch64 matrix - gitea: enable Gitea Actions + self-hosted runner (native:host, aarch64 via binfmt); add .gitea/workflows/ci.yml and local hook - fix statix warnings (merge repeated systemd/database/configFile keys, inherit, bool-compare guards); add missing trailing newlines
136 lines
5.9 KiB
Nix
136 lines
5.9 KiB
Nix
{pkgs, ...}: let
|
|
zoneFile = pkgs.writeText "severijnse.eu.db" ''
|
|
$ORIGIN severijnse.eu.
|
|
$TTL 3600
|
|
severijnse.eu. 3600 IN SOA ns1.severijnse.eu. abuse.severijnse.eu. 2026071003 3600 1800 1209600 86400
|
|
IN NS ns1.severijnse.eu.
|
|
IN NS ns2.severijnse.eu.
|
|
|
|
@ IN A 49.13.92.205
|
|
www IN A 49.13.92.205
|
|
ns1 IN A 49.13.92.205
|
|
ns2 IN A 49.13.92.205
|
|
mail IN A 49.13.92.205
|
|
|
|
@ IN AAAA 2a01:4f8:c014:2585::1
|
|
www IN AAAA 2a01:4f8:c014:2585::1
|
|
ns1 IN AAAA 2a01:4f8:c014:2585::1
|
|
ns2 IN AAAA 2a01:4f8:c014:2585::1
|
|
mail IN AAAA 2a01:4f8:c014:2585::1
|
|
|
|
*.severijnse.eu. IN A 49.13.92.205
|
|
*.severijnse.eu. IN AAAA 2a01:4f8:c014:2585::1
|
|
|
|
@ IN MX 10 mail.severijnse.eu.
|
|
|
|
mail._domainkey.severijnse.eu. 300 IN TXT (
|
|
"v=DKIM1; k=rsa; "
|
|
"p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAskpG7m4kninxRE4JF5KzpnBhLbOlGJL2RO/iDfzdz6sHEvxe78q9c5UnZ0OQddOSuQo4q48dJkXR/XzqY7Ak109lhoAx+Kr1neYsi8/"
|
|
"JaoTC8OURk365+/aBSmWXUCCBphCx43QWfC9h8GMQ6PUIqawkz5CcGPT7X7hPdwHQcd5Vn3CqmABptxdwshdkBjZs"
|
|
"oi79BOo9ZrQSTY7iiLcOP7hVVC9Ad+ydlZ4MWGfy5BxgyTGrrtuSuLcM219oqdovIvr2EtXs8AMx5fyXplKE3R/"
|
|
"YlwF2Jcy50Gmb5y/E9pOaFjVv8HXUmKsvuhA2b8K+rt0WVHNc3dvbgZUl8bGAQIDAQAB"
|
|
)
|
|
_dmarc.severijnse.eu. IN TXT "v=DMARC1; p=reject; rua=mailto:abuse@severijnse.eu"
|
|
severijnse.eu. IN TXT "v=spf1 mx ip4:49.13.92.205 -all"
|
|
|
|
default._bimi.severijnse.eu. IN TXT "v=BIMI1; l=https://severijnse.eu/logo.svg; avp=personal;"
|
|
|
|
severijnse.eu. IN CAA 0 issue "letsencrypt.org"
|
|
severijnse.eu. IN CAA 0 issuewild "letsencrypt.org"
|
|
severijnse.eu. IN CAA 0 iodef "mailto:abuse@severijnse.eu"
|
|
|
|
_smtp._tls.severijnse.eu. IN TXT "v=TLSRPTv1; rua=mailto:abuse@severijnse.eu"
|
|
_mta-sts.severijnse.eu. IN TXT "v=STSv1; id=2024120501"
|
|
|
|
severijnse.eu. 300 IN TXT "google-site-verification=H0HHB7zNQ10uom1zH5f8CEtHcVVcWiuu41ZQv348T5U"
|
|
|
|
; TLSA records updated dynamically by mail-cert-sync service.
|
|
; The placeholders below mirror the current live certificate so the zone is
|
|
; correct even if the sync service has not yet run (e.g. a failed boot).
|
|
_25._tcp.mail.severijnse.eu. 3600 IN TLSA 3 1 1 15ec4d8823874c8363af004188338f76e6e6c5878faf25cdf40556b44b26677d
|
|
_465._tcp.mail.severijnse.eu. 3600 IN TLSA 3 1 1 15ec4d8823874c8363af004188338f76e6e6c5878faf25cdf40556b44b26677d
|
|
_993._tcp.mail.severijnse.eu. 3600 IN TLSA 3 1 1 15ec4d8823874c8363af004188338f76e6e6c5878faf25cdf40556b44b26677d
|
|
|
|
severijnse.eu. IN DS 20930 13 2 B0D9B13DCE5FA0D41589239EB5166D124B0C9D3060A538726DDCCBFC91E8DBD8
|
|
|
|
@ IN DNSKEY 257 3 13 kOc88RGHKdWa7YLjNs7mljux7cT9/9wVNgcp+8jaVe6zle4cHAk6+Sub9wKEVa7Q4FlQYzS1KFL2HOW05Azq1A==
|
|
@ IN DNSKEY 256 3 13 QTFplRlXes5NExKLvuCJmX0l8FhulFNS+sJw+pvcAq4+0T3cCzT6hmcJPjd4BVl6KvvyS78Vij2f7HjrcjyHfw==
|
|
@ IN CDS 20930 13 2 B0D9B13DCE5FA0D41589239EB5166D124B0C9D3060A538726DDCCBFC91E8DBD8
|
|
@ IN CDNSKEY 257 3 13 kOc88RGHKdWa7YLjNs7mljux7cT9/9wVNgcp+8jaVe6zle4cHAk6+Sub9wKEVa7Q4FlQYzS1KFL2HOW05Azq1A==
|
|
|
|
severijnse.eu IN SSHFP 1 1 7f5235b2997e0c621fe773acaaae45b9551049ce
|
|
severijnse.eu IN SSHFP 1 2 2ec1d37df094915253c0b059762052ae19e66cd97e82d7a58ac1a0d1bd5d5e52
|
|
severijnse.eu IN SSHFP 3 1 240418eb7cc2a3969257c30363d16103dbfd5822
|
|
severijnse.eu IN SSHFP 3 2 43dbfdd8b131efda4c98844e1434e4f35e773f472bdb355ede94f8a9f7001c35
|
|
severijnse.eu IN SSHFP 4 1 efbd7836208684d110f3a72543eba74ad8e54b44
|
|
severijnse.eu IN SSHFP 4 2 c02f4b13aef78579f3466851fcc741c0169eaa63237463ceacc9bb72a2be0519
|
|
'';
|
|
in {
|
|
systemd = {
|
|
services = {
|
|
decrypt-coredns-keys = {
|
|
description = "Decrypt CoreDNS DNSSEC signing keys";
|
|
before = ["coredns.service"];
|
|
wantedBy = ["coredns.service"];
|
|
serviceConfig = {
|
|
Type = "oneshot";
|
|
RemainAfterExit = true;
|
|
Environment = "SOPS_AGE_KEY_FILE=/etc/age/keys.txt";
|
|
};
|
|
script = ''
|
|
SOPS_FILE=${../../secrets/coredns-keys.yaml}
|
|
KEYS_DIR=/var/lib/coredns/keys
|
|
mkdir -p "$KEYS_DIR"
|
|
|
|
${pkgs.sops}/bin/sops --decrypt --extract '["coredns_ksk_key"]' "$SOPS_FILE" > "$KEYS_DIR/Kseverijnse.eu.+013+20930.key"
|
|
${pkgs.sops}/bin/sops --decrypt --extract '["coredns_ksk_private"]' "$SOPS_FILE" > "$KEYS_DIR/Kseverijnse.eu.+013+20930.private"
|
|
${pkgs.sops}/bin/sops --decrypt --extract '["coredns_zsk_key"]' "$SOPS_FILE" > "$KEYS_DIR/Kseverijnse.eu.+013+38678.key"
|
|
${pkgs.sops}/bin/sops --decrypt --extract '["coredns_zsk_private"]' "$SOPS_FILE" > "$KEYS_DIR/Kseverijnse.eu.+013+38678.private"
|
|
|
|
chmod 644 "$KEYS_DIR/"*
|
|
'';
|
|
};
|
|
coredns = {
|
|
after = ["decrypt-coredns-keys.service"];
|
|
requires = ["decrypt-coredns-keys.service"];
|
|
|
|
# Copy zone file from Nix store to writable location on service start
|
|
# TLSA updater will modify the writable copy at runtime
|
|
preStart = ''
|
|
cp -f ${zoneFile} /var/lib/coredns/zones/severijnse.eu.db
|
|
chown coredns:coredns /var/lib/coredns/zones/severijnse.eu.db
|
|
'';
|
|
};
|
|
};
|
|
tmpfiles.rules = [
|
|
"d /var/lib/coredns 0750 coredns coredns -"
|
|
"d /var/lib/coredns/zones 0750 coredns coredns -"
|
|
"d /var/lib/coredns/keys 0750 coredns coredns -"
|
|
];
|
|
};
|
|
services.coredns = {
|
|
enable = true;
|
|
config = ''
|
|
severijnse.eu {
|
|
bind 127.0.0.1 49.13.92.205 2a01:4f8:c014:2585::1
|
|
file /var/lib/coredns/zones/severijnse.eu.db {
|
|
reload 300s
|
|
}
|
|
dnssec {
|
|
key file /var/lib/coredns/keys/Kseverijnse.eu.+013+38678
|
|
key file /var/lib/coredns/keys/Kseverijnse.eu.+013+20930
|
|
}
|
|
log
|
|
errors
|
|
}
|
|
|
|
. {
|
|
bind 127.0.0.1
|
|
forward . 1.1.1.1 8.8.8.8
|
|
log
|
|
errors
|
|
}
|
|
'';
|
|
};
|
|
}
|