Phase 4: DNS Records

Phase 4: DNS Records

Objective

Create MX, SPF, DKIM, and DMARC DNS records in BIND (10.50.1.90). These are the authentication foundation that Abnormal Security ingests as trust signals.

Why This Matters for Abnormal

Abnormal reads Authentication-Results headers from M365. Those headers contain SPF, DKIM, and DMARC verdicts. Understanding how these records are created and what they enforce gives you the vocabulary to evaluate Abnormal’s detection claims and diagnose false positives during the CHLA migration.

MX Record

# Before
dig @10.50.1.90 MX inside.domusdigitalis.dev +short

# Create
nsupdate -k /path/to/tsig.key <<EOF
server 10.50.1.90
zone inside.domusdigitalis.dev
update add inside.domusdigitalis.dev. 3600 MX 10 mail-01.inside.domusdigitalis.dev.
send
EOF

# After
dig @10.50.1.90 MX inside.domusdigitalis.dev +short

SPF Record

SPF tells receiving servers which IPs are authorized to send mail for your domain.

# Before
dig @10.50.1.90 TXT inside.domusdigitalis.dev +short

# Create
nsupdate -k /path/to/tsig.key <<EOF
server 10.50.1.90
zone inside.domusdigitalis.dev
update add inside.domusdigitalis.dev. 3600 TXT "v=spf1 ip4:10.50.1.91 ~all"
send
EOF

# After — verify SPF record exists
dig @10.50.1.90 TXT inside.domusdigitalis.dev +short | grep spf

DKIM Record

DKIM adds a cryptographic signature to outbound mail. The public key is published in DNS so receivers can verify.

The DKIM public key is generated in Phase 5 (OpenDKIM installation). This section creates the record after that key exists.
# After generating key in Phase 5:
# Extract public key from /etc/opendkim/keys/default.txt

nsupdate -k /path/to/tsig.key <<EOF
server 10.50.1.90
zone inside.domusdigitalis.dev
update add default._domainkey.inside.domusdigitalis.dev. 3600 TXT "v=DKIM1; k=rsa; p=<PUBLIC_KEY_HERE>"
send
EOF

# Verify
dig @10.50.1.90 TXT default._domainkey.inside.domusdigitalis.dev +short

DMARC Record

DMARC tells receivers what to do when SPF or DKIM fails, and where to send aggregate reports.

nsupdate -k /path/to/tsig.key <<EOF
server 10.50.1.90
zone inside.domusdigitalis.dev
update add _dmarc.inside.domusdigitalis.dev. 3600 TXT "v=DMARC1; p=quarantine; rua=mailto:postmaster@inside.domusdigitalis.dev; pct=100"
send
EOF

# Verify
dig @10.50.1.90 TXT _dmarc.inside.domusdigitalis.dev +short

Complete DNS Verification

# All records at once
echo "=== MX ===" && dig @10.50.1.90 MX inside.domusdigitalis.dev +short
echo "=== A ===" && dig @10.50.1.90 mail-01.inside.domusdigitalis.dev A +short
echo "=== PTR ===" && dig @10.50.1.90 -x 10.50.1.91 +short
echo "=== SPF ===" && dig @10.50.1.90 TXT inside.domusdigitalis.dev +short | grep spf
echo "=== DMARC ===" && dig @10.50.1.90 TXT _dmarc.inside.domusdigitalis.dev +short
# DKIM verified after Phase 5

Verification Checklist

  • MX record resolves to mail-01.inside.domusdigitalis.dev

  • A record resolves to 10.50.1.91

  • PTR record resolves to mail-01.inside.domusdigitalis.dev

  • SPF TXT record present with v=spf1

  • DMARC TXT record present with v=DMARC1

  • DKIM TXT record present (after Phase 5)