Firewalls & Blocked Traffic

Network Troubleshooting

Chapter 7 · Firewalls & Blocked Traffic: Diagnosing a Block You Can't See the Rules For

Chapter 6 left one question open: a refused connection could mean nothing is listening on that port, or it could mean a firewall explicitly rejected it — and from a plain client-side test, the two can look identical. This chapter is about diagnosing firewall involvement specifically, under the constraint most support engineers actually work under: you very often can't see the firewall's own rules or logs at all, because it belongs to another team, a cloud provider's own console, or an ISP.

Two Ways a Firewall Can Say No

A firewall rule that blocks traffic can do it two genuinely different ways, and which one it uses shapes what you'll actually see from the client side:

Firewall behaviorWhat the client sees
DROP (silent)The packet is discarded with no response of any kind — indistinguishable, from the client's side, from a timeout caused by anything else (Chapter 5's "no reply" scenarios)
REJECT (explicit)An active reply is sent back — typically a TCP reset or an ICMP "administratively prohibited" message — which looks the same as Chapter 6's "connection refused" from a port with nothing listening on it

Both behaviors are entirely legitimate, deliberate configuration choices — DROP is often preferred specifically because it gives an attacker less information (a silent void looks the same whether a port is closed or actively blocked), while REJECT gives a faster, cleaner failure for legitimate traffic that isn't allowed. Distinguishing which one actually happened, and telling a firewall REJECT apart from a genuinely closed port, needs a packet-capture tool like tcpdump or Wireshark to inspect the actual ICMP response — deliberately out of scope for this course, but worth knowing the limit exists rather than assuming a simple client tool can always tell you.

Symptom Patterns That Point at a Firewall

PatternWhy it points at a boundary rule
Works from one network, not anotherThe service itself is unlikely to behave differently by source — a rule scoped to where the traffic originates is a much more likely explanation
One port blocked, others on the same host fineA blanket host outage would affect every port; a single port failing while others succeed points at a port-specific rule
Worked yesterday, no application deploy happenedA firewall or security-group rule change is a common, easy-to-miss cause precisely because it never shows up in an application's own deploy history
Fails consistently, everywhere, alwaysLess diagnostic on its own — equally consistent with a firewall block or genuinely nothing listening (Chapter 6's own ambiguity)

Testing From Multiple Vantage Points

The single most useful technique available when you can't see the rules yourself is testing the exact same port from more than one location and comparing the results — the same instinct as Chapter 1's own scoping questions ("one user or many, one destination or everywhere"), now applied specifically to isolating a boundary rule. A port that opens cleanly from inside the same network as the server, but times out from outside it, is strong evidence for a boundary firewall or a cloud security group specifically — not the service itself, which is demonstrably working for at least one source.

# From inside the same network as the server $ nc -zv 10.0.4.15 8443 Connection to 10.0.4.15 8443 port [tcp/*] succeeded! # From outside that network $ nc -zv 10.0.4.15 8443 (hangs with no response — Ctrl+C to cancel)

Cloud environments make this pattern especially common: a AWS Security Group or Azure NSG can silently restrict a port to a specific source range, and a support engineer without console access to that layer may have no visibility into the rule at all — only its effect, which is exactly why comparing results from multiple vantage points is often the fastest available path to a confident answer.

"I can't find a firewall rule" isn't the same as "there isn't one"
Real environments frequently stack several independent firewall layers — a host-based firewall on the server itself, a network appliance, and a cloud security group, any of which could be the one actually blocking traffic. Having checked one layer and found nothing doesn't rule out a block at a layer you don't have visibility into at all. Absence of evidence, in a layer you can't actually see, is not evidence of absence.
When you can't see the rules, give the firewall admin exact evidence instead
A vague "it's blocked somewhere" ticket is slow for someone else to act on. Handing off the exact source IP, destination IP, port, protocol, and timestamp of a failed attempt lets whoever owns the firewall search their own logs for that precise combination directly — turning a vague investigation into a quick lookup, the same principle as Chapter 5's traceroute handoff.

Working Example: A Fresh Ticket

A new ticket, unrelated to the one resolved in Chapter 6: users report an internal reporting app is unreachable when connecting from home, but works fine in the office. DNS and network reachability both check out from every location tested. Testing the port itself from multiple vantage points narrows it quickly:

  • From the office LAN: port opens immediately
  • Connected via the corporate VPN, from home: port opens immediately
  • Connecting directly from home, no VPN: the port times out every time

This pattern points precisely at a boundary rule that permits traffic from the office network and the VPN's own address range, but not from the general internet — consistent with a port-specific, source-scoped firewall rule. Worth being honest about the next step: this could be a genuine misconfiguration, or it could be entirely intentional access control — this app may simply have never been meant to be reachable without the VPN. The right next step is confirming which one it is with whoever owns that access policy, not assuming either answer and proceeding to "fix" something that might not be broken at all.

Hands-On Exercises

Exercise 1

Explain the difference between a firewall's DROP and REJECT behavior, and why DROP is a deliberate security choice rather than a misconfiguration.

📄 View solution
Exercise 2

A colleague checks the server's own host firewall, finds no blocking rule, and concludes the connection can't be firewall-related. Explain why this chapter says that conclusion isn't safe.

📄 View solution
Exercise 3

In this chapter's worked example, the port opens from the office and over VPN but not from a direct home connection. Explain what this pattern points to, and why the chapter says it might not actually be a bug at all.

📄 View solution

Chapter 7 Quick Reference

  • DROP = silent, indistinguishable from a plain timeout; REJECT = an active reply, indistinguishable from "nothing listening" (Chapter 6)
  • Telling a firewall reject apart from a genuinely closed port needs packet-capture tooling (tcpdump/Wireshark) — out of scope here, but worth knowing the limit
  • Symptom patterns pointing at a firewall: works from one network but not another, one port blocked while others work, or a sudden break with no application deploy behind it
  • Test the same port from multiple vantage points — the single most useful technique when you can't see the rules yourself
  • Not finding a rule at one layer (e.g. the host firewall) doesn't rule out a block at another layer (network appliance, cloud security group) you may have no visibility into
  • When you can't see the rules, hand off exact evidence — source IP, destination IP, port, protocol, timestamp — rather than a vague report
  • A source-scoped block found via testing may be intentional access control, not a bug — confirm before "fixing" it
  • Next chapter: Proxies, VPNs & NAT: When the Path Isn't What You Expect