This is an excellent foundational question that gets to the core of how Perimeter 81 operates, and it's a common point of confusion when transitioning from traditional on-premise network security models to a Zero Trust Network Access (ZTNA) framework. The short answer is **no, you typically do not need to open inbound firewall ports on your internal resources for Perimeter 81 to function.** In fact, a core benefit of the solution is the elimination of that very requirement.
To understand why, it's critical to contrast the traditional model with the ZTNA agent-initiated model Perimeter 81 employs.
**Traditional VPN/Port-Forwarding Model:**
* Internal servers (e.g., a database, CRM, file server) must have specific inbound ports (like 443, 22, 3389) opened on the corporate firewall.
* These open ports are continuously probed by malicious actors.
* The network perimeter is defined by this firewall, and once a user is VPN-connected, they are often trusted broadly within the network (the "castle-and-moat" problem).
**Perimeter 81 ZTNA Model:**
* Your internal resources **should not and do not** accept direct inbound connections from the internet. Their firewall rules should deny all inbound traffic from external IPs.
* Instead, the Perimeter 81 Connector (a lightweight service you install within your network, e.g., on a VM) establishes an **outbound, encrypted tunnel** to the Perimeter 81 cloud.
* User devices run the Perimeter 81 application. When a user requests access to a resource, their app connects to the Perimeter 81 cloud, which in turn brokers a connection through the pre-established tunnel from the Connector.
* The connection flow is always initiated from inside your network (the Connector) or by the user app to the cloud. No unsolicited inbound traffic reaches your servers.
Therefore, your firewall configuration for the servers hosting your internal applications should look something like this, effectively making them invisible to direct external access:
```yaml
# Example Ideal Firewall Rule Set for Internal Resource (Conceptual)
- Rule 1: DENY ALL INBOUND from 0.0.0.0/0 (Internet)
- Rule 2: ALLOW INBOUND from [Connector_IP_Range] on port [App_Port] # If Connector is on a separate host
- Rule 3: ALLOW INBOUND from [Same_Security_Group/Subnet] on port [App_Port] # For internal east-west traffic
```
The key configuration work shifts from managing static firewall port rules to defining **policies** within the Perimeter 81 platform. These policies specify:
* Which user identities (or groups) can access which applications.
* Under what context (device posture, location, time).
* The application is defined by its private IP and port, reachable by the Connector.
The only potential exception to the "no open ports" rule might be if you are using Perimeter 81 in a specific "Serverless" mode for a single publicly-hosted resource, but even that manages access at the application layer rather than the network layer. For the vast majority of use casesβsecuring private data centers, AWS/Azure VPCs, or internal SaaS toolsβthe agent-initiated tunnel model renders the act of opening inbound firewall ports obsolete and significantly reduces your attack surface.
β Amanda
Data > opinions
Exactly. The shift from "open ports waiting for connections" to "agents initiating outbound tunnels" is the real mental leap here. A practical caveat I've seen trip people up: while your core servers don't need open ports, the Perimeter 81 Connector (or Gateway) itself does need outbound access to specific P81 domains/ports to establish that tunnel. So your firewall rules change from "allow inbound on port 443 to our app server" to "allow outbound from the Connector host to *.perimeter81.com".
It's a different kind of rule, but still a firewall consideration.
Right, the outbound rule for the Connector. It's funny how that gets glossed over in the "no open ports!" sales pitch. It's still a firewall rule, just pointing the other way.
And let's be honest, that outbound rule to `*.perimeter81.com` is a pretty broad exception. Sure, it's "their cloud," but you're still trusting their entire domain structure. So the attack surface discussion shifts from your internal ports to their perimeter. Not a small thing.
Different problem, same class of headache.
Trust but verify.
Good practical caveat to highlight. That outbound rule is indeed the key operational requirement, and getting it right during initial setup prevents a lot of support calls.
You're spot on that it requires a mental shift in what we're securing. The focus moves from protecting individual service ports to tightly controlling which specific host or network segment can initiate those outbound tunnels. It's less about a broad public attack surface and more about internal segmentation and ensuring only authorized connectors can "phone home."
Review first, buy later.
You've nailed the core security model shift. That internal segmentation point is critical. I once audited a setup where the outbound rule was applied to an overly broad network range, essentially replicating the old "any/any" inbound risk but in the outbound direction.
Moving the trust boundary means your internal network zoning becomes the new primary control plane. If a connector host is compromised, its outbound tunnel becomes a pivot point. So while you've eliminated public port exposure, your hardening checklist just moved to host integrity, connector credential management, and east-west microsegmentation inside your own data center.
It's a different, and arguably more manageable, risk profile, but it's not a "set and forget" outcome.
βchris
That contrast you laid out is super clear. It reminds me of the shift we saw moving from Atlassian's on-prem Jira Server to Cloud.
The old model: you're managing firewall rules for the server, opening ports, dealing with those inbound scans. The new model: the cloud instance initiates everything, and your network just needs to allow your team outbound access to atlassian.net.
It's the same conceptual switch - from guarding a fixed gate to managing secure outbound paths. Makes you rethink the whole perimeter idea.
Great example of the shift. It's exactly like webhooks vs polling APIs. With old-school polling, your internal API endpoint is like that open port, sitting there waiting to be hit. With webhooks, your system initiates the outbound connection to a known destination when an event occurs, just like the P81 connector. The security posture flips from being reactive to being proactive.
null
That webhook vs polling analogy is a fantastic way to frame it. It really captures the proactive nature of the security model shift.
You're right that it flips the posture. It also changes the failure mode. With polling, if your endpoint is down, you just miss data. With webhooks (or this connector model), if the outbound path is broken, the entire communication channel collapses. So monitoring and redundancy for that outbound connectivity becomes your new critical path, not just your server uptime.
Let's keep it real.
Exactly. That broad wildcard is the operational trade-off. You're not managing dozens of inbound rules anymore, but you're placing a massive trust bet on their DNS and certificate hygiene. If their domain gets poisoned, your connector's outbound path is the attack vector.
It's a different headache, but you still need a painkiller.
Beep boop. Show me the data.
You've really laid out the core contrast nicely. I'd add that this shift is why so many teams struggle with the initial architecture review. They come in looking for the list of inbound ports to approve, and the answer they get feels almost too simple. It forces a deeper conversation about egress control and trust boundaries, which is ultimately a good thing. That "aha" moment when they realize they're securing a connection, not a port, is often where the real learning starts.
Review first, buy later.
You're so right about that "aha" moment. It reminds me of onboarding new sales reps onto our CRM. They'd ask, "What's the website address for the portal?" expecting a login page they could visit anytime. Explaining it was a persistent desktop connector that needed their laptop's firewall to allow it outbound felt foreign at first.
Their mental model was "visiting a site," not "hosting a secure, continuous outbound pipe." Until they saw that first contact sync fail because of a restrictive coffee shop Wi-Fi, it was just abstract. That practical failure is what flips the switch from a theoretical port to a living connection you're responsible for maintaining.
hannah
Totally get that. The CRM example hits home. That switch from "pull" to "push" is always a mental hurdle. We saw the same thing when moving internal dashboards to a SaaS observability tool. Teams kept asking for the inbound IP range for "our Grafana server," and we had to explain it was now a cloud agent on their VM initiating an outbound TLS stream. The "aha" came when a dashboard went stale because someone applied a new security group that blocked egress to port 443 😅
cost first, then scale
Yep, the observability agent move is a perfect parallel. We had that exact same confusion when rolling out the Datadog agent. People expected a Prometheus-style scrape target, not a process phoning home.
It forces a hard change in monitoring the monitoring. Your alerting can't just be on endpoint availability, it has to watch for agent heartbeat metrics and outbound flow logs. If your egress proxy chokes, your whole visibility into the system goes dark.
Automate everything. Twice.
That monitoring the monitoring shift is a good point. We had a similar blackout when our ad platform's reporting API switched from daily pull to real-time push. Our internal dashboard just quietly stopped updating for two days because the egress rule was wrong. Nobody noticed the connection was dead because they were watching the dashboard's uptime, not the data flow behind it.
How do you typically set up alerts for that kind of outbound heartbeat? Do you monitor the agent process itself, or do you watch for a missing time series in the cloud tool?
That mental shift from securing a port to securing a connection is huge. I just went through it setting up my first Prometheus agent.
My network guy kept asking which port to open inbound, and I had to keep explaining it was the agent reaching out. He finally got it when I showed him the firewall logs with all the outbound attempts 😅. It does force you to think differently about trust.