This is a guide to the tools and practices I actually use, ordered from things anyone can set up in an afternoon through to running your own server infrastructure. Each section builds on the last. Start wherever makes sense for where you are — but don't skip the basics because they seem simple. The basics are where most people leak the most data.
There is a common idea that if you have nothing to hide, you have nothing to worry about. That idea is wrong — and it is worth understanding why before you read the rest of this page. Read the full argument here.
Before any tools or software, the most important thing is understanding what you are protecting and from whom. Most people do not need to defend against nation-state actors. What they need is to stop leaking data to corporations, advertisers, and opportunistic attackers who profit from carelessness.
This is not paranoia. This is the digital equivalent of locking your front door.
Counter-surveillance is not about hiding — it is about understanding who is watching, what they can see, and how to reduce what you give away without thinking about it.
The goal is not to disappear. The goal is to make surveillance expensive, incomplete, and not worth the effort for anyone who is not specifically targeting you.
The browser is where almost all of your data leaks. Every site you visit can fingerprint your browser — a combination of your screen resolution, installed fonts, GPU, timezone, and dozens of other signals that together uniquely identify you even without cookies. A VPN does not stop this.
Enable HTTPS-only mode in your browser settings. There is no good reason to send unencrypted traffic in 2026.
A consumer VPN encrypts the traffic between your device and the VPN server, hiding it from your ISP. Your ISP can see that you are connected to a VPN, but not what you are doing inside it. This shifts trust from your ISP to the VPN provider. Choose one that has been independently audited and does not log traffic:
Consumer VPNs have one weakness: your ISP can see that you are using a VPN. In most countries this is not a problem. In some it is. The solution to that is further down this page.
Every time you visit a website, your device asks a DNS server to translate the domain name into an IP address. By default, that request goes to your ISP's DNS server — which means your ISP has a complete log of every domain you visit, even if you use HTTPS.
I run Pi-hole in Docker, backed by Unbound. Combined, Pi-hole handles the filtering and Unbound handles the resolution. No third party sees your queries.
UFW (Uncomplicated Firewall) controls what traffic can reach your server. The correct default is: deny all incoming, allow all outgoing, then explicitly open only what you need.
Every rule is a conscious decision about what is allowed in.
If your server is reachable from the internet, it is being scanned constantly. Automated bots probe SSH ports 24 hours a day looking for weak passwords.
/etc/ssh/sshd_config with PasswordAuthentication no.Between key-only auth and fail2ban, SSH becomes a very dull target.
A self-hosted VPN means you control the server that your traffic exits from, rather than trusting a commercial provider. WireGuard is the protocol — fast, modern cryptography (Curve25519 keys), and a much smaller codebase than OpenVPN.
10.0.0.1, listening on port 51820/UDP.10.0.0.0/24 subnet.All filtering and DNS security follows you when you are away from home.
A standard WireGuard connection is identifiable by deep packet inspection — ISPs and network operators can see that you are running a VPN even if they cannot see inside it.
Deep packet inspection sees HTTPS and moves on.
CrowdSec is an open-source intrusion detection system that watches your logs and detects attack patterns. Unlike fail2ban, CrowdSec participates in a shared intelligence network.
CrowdSec sits upstream of fail2ban — one provides rate limiting, the other provides community threat intelligence. Together they cover both reactive and proactive protection.
The point of monitoring is not to watch numbers all day — it is to know immediately when something changes. A sudden spike in SSH failures means someone is probing. An unusual DNS query pattern can mean something on your network has been compromised.
tshark -i eth0 -f "tcp port 443" for scripting captures on a headless server.All of the tools above except the browser and commercial VPN run on a server — in my case a home server running Ubuntu. Running your own server means you own your data, you control your services, and you are not depending on a third party to keep them private or online.
A full write-up on setting up a home server from scratch — hardware, OS, Docker, and the infrastructure above — is on the blog. Read: Getting Started with Self-Hosting →