What "open / closed / filtered" actually mean
Three TCP outcomes you can see when probing a port from the outside:
- Open — the target accepted the connection (TCP three-way handshake completed). Something is listening on that port and the firewall isn't in the way.
- Closed — the target answered with TCP RST. The IP is reachable and the firewall let our SYN through, but no process is bound to that port. Fix: start your service, or check that it's actually listening on the IP you expect (often it's bound to 127.0.0.1 only by default).
- Filtered — we got nothing back within the timeout. A firewall (host-level, network-level, or cloud-provider security group) is dropping the SYN silently. The user-visible symptom is the same as "closed," but the fix is different: open the firewall rule or update the security group.
What to use this for
- Confirming a port-forward. You set up port forwarding on your home router (see our port-forwarding explainer). Use this tool from outside your LAN to verify the public port is actually reaching your internal service.
- Validating a cloud firewall rule. You opened TCP 5432 in your AWS security group for a PostgreSQL service. Verify it's reachable.
- Testing a fresh deployment. The service started; the firewall is configured; the load balancer claims healthy. Verify from the public internet that all three are aligned.
- Debugging "the site won't load." If port 443 shows filtered from the outside, the problem is the firewall, not your TLS config.
What this is NOT
- Not a port scanner. We allowlist ~25 well-known service ports. For sweeping a target, use nmap from a host you own:
nmap -sS -p- target.example.com. - Not a vulnerability scanner. "Open" tells you the port accepts connections; it says nothing about whether the service is hardened, authenticated, or up-to-date. Run the actual service-specific probes (Lynis, Nessus, OpenVAS) for security posture.
- Not a tool for probing other people's infrastructure. Use this on IPs you own or have explicit authorization to probe. Network scanning without permission is illegal in many jurisdictions.
- Not a UDP probe. TCP only. UDP requires service-specific payloads to get a reliable reply.
Abuse hardening (so you know what we built)
Web-based scanners are tempting targets for misuse. We've added several guardrails:
- Port allowlist. Only the ~25 well-known service ports listed above are checkable. Arbitrary port numbers are rejected at the API.
- SSRF defense. Targets in any private, loopback, link-local, CGNAT, or IPv6 ULA range are rejected. The checker can't be used to probe internal networks reachable from our datacenter.
- Per-request port limit. Maximum 3 ports per request.
- Short timeouts. 3 seconds per probe to bound resource use.
- Rate limiting. Our middleware throttles requests per source IP (same limits as the rest of /api/*).
Adjacent tools
- Port forwarding explainer — how the rule you're testing should actually work.
- CGNAT explainer — the #1 reason a port-forward "works" but isn't reachable from outside.
- What's hosting this site? — confirm the IP you're probing belongs to who you think.
- SSL / TLS checker — once the port is open, check the service responds correctly.
