www/content/2023-09-14-security-infrastructure.md

75 lines
3.3 KiB
Markdown
Raw Permalink Normal View History

2023-09-14 14:51:37 -05:00
+++
title = "Security & Infrastructure"
2023-10-04 12:23:29 -05:00
description = """\
An overview of all the infrastructure and services I host, and the security \
mindset behind it. \
"""
2023-09-14 14:51:37 -05:00
date = 2023-09-14
[taxonomies]
2023-10-04 12:23:29 -05:00
tags = [ "selfhosting", "nix", "privacy", "security", "networks" ]
2025-01-15 13:50:07 -06:00
[extra]
show_only_description = true
2023-09-14 14:51:37 -05:00
+++
2024-01-15 11:54:00 -06:00
**Note: This post is out of date, but I am leaving it here for its
historical value.**
2023-10-04 12:23:29 -05:00
2023-09-14 14:51:37 -05:00
Everything on this domain is [self-hosted][0], from DNS to email and all web
2023-10-04 12:23:29 -05:00
services. I currently manage two servers:
- `amsterdam`: A VM running on a physical server I own and control
2023-09-14 14:51:37 -05:00
the physical security of.
2023-10-04 12:23:29 -05:00
- `edinburgh`: A Contabo VPS.
2023-09-14 14:51:37 -05:00
`amsterdam` acts as the primary nameserver, controlling DNSSEC signing and is
thus the root of trust for the domain. It also runs the primary mail server and
most web services.
2023-10-04 12:23:29 -05:00
Finally, `edinburgh` acts as a router for `amsterdam`. It has secondary static
IPv4 and IPv6 addresses that are routed over a tunnel to bypass NAT and hosting
restrictions on my physical server. Additionally, this VPS also acts as secondary
nameserver in case my home network is down.
2023-09-14 14:51:37 -05:00
The goal with all of this is to have some basic redundancy, while keeping
sensitive keys and all personal data safely on my physical server.
2023-10-04 13:40:15 -05:00
# DNSSEC
2023-10-04 12:23:29 -05:00
`amsterdam` holds a [combined signing key][13] for the zone. Dynamic updates
are allowed using a [TSIG][1] key to allow [ACME DNS-01 challenges][2] for
issuing TLS certificates.
2023-09-14 14:51:37 -05:00
2023-10-04 13:40:15 -05:00
# TLS/HTTPS
2023-10-04 12:23:29 -05:00
`amsterdam` holds a [Let's Encrypt][3] wildcard TLS certificate for the domain,
which is used to protect web services. The DNS zone contains a [CAA][4] record
specifying that only Let's Encrypt may issue certificates for the domain, and
only using ACME DNS-01 challenges. All TLS-capable services have TLSA records
associated with them for [DANE-EE][5] support. Finally, all web services use
[HTTPS][6] records and [HSTS preload][7] headers to advertise support for HTTPS.
2023-09-14 14:51:37 -05:00
2023-10-04 13:40:15 -05:00
# Email
2023-09-14 14:51:37 -05:00
`amsterdam` holds [DKIM][8] keys for the domain, which is published in DNS
alongside [SPF][9] and [DMARC][10] records together protect against spoofing
the domain. [MTA-STS][11] and DANE-EE are used to advertise TLS support for
incoming mail. Outgoing mail requires that the receiving server support TLS.
2023-10-04 13:40:15 -05:00
# WireGuard
2023-10-04 12:23:29 -05:00
Both servers hold [WireGuard][14] keys for their end of the tunnels. The tunnel
2023-09-14 14:51:37 -05:00
being encrypted and authenticated isn't actually important for my purposes. This
could just as easily use another tunneling protocol like [GRE][12], but I find
WireGuard trivial to setup even if it adds some keys to manage.
2025-01-16 15:59:27 -06:00
[0]: https://git.averywinters.org/avery/home
2023-09-14 14:51:37 -05:00
[1]: https://en.wikipedia.org/wiki/TSIG
[2]: https://letsencrypt.org/docs/challenge-types/#dns-01-challenge
[3]: https://letsencrypt.org
[4]: https://letsencrypt.org/docs/caa
[5]: https://en.wikipedia.org/wiki/DNS-based_Authentication_of_Named_Entities
[6]: https://developer.mozilla.org/en-US/docs/Glossary/https_rr
[7]: https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security
[8]: https://en.wikipedia.org/wiki/DomainKeys_Identified_Mail
[9]: https://en.wikipedia.org/wiki/Sender_Policy_Framework
[10]: https://en.wikipedia.org/wiki/DMARC
[11]: https://datatracker.ietf.org/doc/html/rfc8461
[12]: https://en.wikipedia.org/wiki/Generic_Routing_Encapsulation
[13]: https://datatracker.ietf.org/doc/html/rfc6781
[14]: https://www.wireguard.com