← Back to blog
IP RESTRICTIONS nodetonet.com

IP allow-lists and deny-lists — locking the tunnel to your sources

N Nodetonet Team
April 19, 2026 7 min read

Every Nodetonet tunnel ships with username and password authentication by default. That covers most cases, but credentials are just bytes — anyone you share them with, knowingly or not, gets the same access as you. Paste a proxy URL into a public Gist by mistake, commit it into version control, or let a script leak it through an error log, and the keys are out in the open.

The defence-in-depth answer is a per-tunnel source-IP firewall. You tell Nodetonet which client IPs may connect to a given proxy; everyone else is dropped at the TCP level before they even start the auth handshake. Even with the right credentials, a connection from the wrong IP gets nothing — not even an error message worth fingerprinting.

Allow-list vs deny-list: which mode to pick

There are two complementary modes, both configured per proxy:

ModeWho connectsBest forRisk if misconfigured
Allow-list Only IPs on the list; all others dropped Fixed-IP offices, CI runners, cloud functions with stable egress Lock yourself out if your own IP is missing
Deny-list Everyone except listed IPs Blocking a known abuser or a single range while keeping the tunnel public Attacker rotates to an unlisted IP and bypasses the block
Off All IPs (credential-only) Development, dynamic residential clients, or when IPs are unpredictable Credential leak = unrestricted access

You pick one mode per proxy, not both. An empty allow-list means "block everyone" — a fast kill switch if a tunnel is compromised. An empty deny-list is the same as Off.

If your client traffic comes from a dynamic home IP or a CGNAT mobile network, an allow-list will cause more headaches than it prevents. In that case, pair your tunnel with a VPN or cloud bastion that provides a fixed egress, then allow-list that egress address.

Where the setting lives in the panel

Open the proxy you want to lock on /proxies, click Settings, then switch to the IP Restrictions tab. You will see:

Hit Save and the new rules take effect within a couple of seconds. Existing connections are not killed — only new handshakes are evaluated. So if you accidentally lock yourself out, an in-flight scrape keeps running until it finishes a request and tries to reconnect. Use that window to fix the entry and save again.

Entry formats: single IPs, CIDRs, and IPv6

Each line is a single address or a CIDR range, IPv4 or IPv6:

# single addresses
203.0.113.7
2001:db8::1

# CIDR ranges
198.51.100.0/24       # a whole /24 subnet
10.0.0.0/8            # your private VPN egress
2001:db8::/32         # IPv6 prefix

Comments after a # are stripped. Blank lines are ignored. Hostnames are not accepted — the panel rejects them with a clear error. Reverse-DNS at TCP-accept time is slow, spoofable, and unreliable, so we require explicit IPs. If you are unsure what your current egress IP is, our free What Is My IP tool shows exactly what a server reads from your connection.

What a blocked connection looks like

A blocked source sees the TCP connection succeed, but the proxy negotiation never starts — the server accepts and immediately closes. From curl this looks like:

curl: (52) Empty reply from server

From a SOCKS5 client you typically see a connection closed before handshake message. We deliberately say nothing about why — leaking "you are not on the allow-list" gives an attacker information they do not deserve.

To confirm a rule is working, watch the proxy's request log on the same page. Rejected attempts appear as BLOCKED · acl with the source IP recorded, so you have a full audit trail of who tried and when.

Setting rules programmatically via the REST API

The same controls are available on the REST API. This is especially useful in CI/CD pipelines where you want a job to add its current egress IP to the allow-list at the start of a run, then remove it at the end:

curl -X PATCH -H "Authorization: Bearer $KEY"   -H "Content-Type: application/json"   -d '{"aclMode":"allow","aclEntries":["203.0.113.7","198.51.100.0/24"]}'   https://nodetonet.com/api/v1/proxies/<id>

aclMode accepts off, allow, or deny. aclEntries is an array of strings in the same format the panel accepts. To clear all rules and revert to credential-only, send aclMode: "off" with an empty aclEntries array. You can also manage tokens and generate API keys through the features panel if you are building an automated workflow around multiple proxies.

Layering with per-client ACLs

If you have issued multiple proxy clients on a single tunnel — different credentials per downstream consumer — each client carries its own ACL as well. The evaluation order is:

  1. Per-tunnel ACL — the source IP must pass this first.
  2. Per-client ACL — if the source IP passes the tunnel-level check, the client-level rules narrow it further.

This means you can run one tunnel for several customers, each locked to their own office IP range, without creating a separate proxy for each. Pair this with per-client quotas and thread limits for a fully isolated multi-tenant setup on a single endpoint.

Combining IP restrictions with domain restrictions

IP restrictions control who can connect to your tunnel. For a complementary control over where the tunnel's exit traffic goes, see domain allow- and deny-lists. Together they give you a two-sided firewall: lock the source on the way in, and lock the destination on the way out.

Common pitfalls

What's next

Frequently asked questions

What is an IP allow-list on a proxy tunnel?
An IP allow-list is a source-IP firewall attached to a single tunnel. Only connections arriving from addresses on the list are accepted; all others are dropped at the TCP level before authentication even begins. It is the strictest access control Nodetonet offers and is recommended whenever your client IPs are fixed and predictable.
What is the difference between an allow-list and a deny-list?
An allow-list operates on a default-deny model: only explicitly listed IPs get through. A deny-list operates on a default-allow model: everyone gets through except the listed IPs. Allow-lists are stronger because a leaked credential is useless from any unlisted address. Deny-lists are faster to deploy when you just need to block one abuser without restricting everyone else.
Can I use CIDR ranges, not just individual IPs?
Yes. Both allow-lists and deny-lists accept individual IPv4/IPv6 addresses and CIDR notation such as 203.0.113.0/24. Comments after a # on each line are stripped. Hostnames are not accepted because reverse DNS at connection time is slow and spoofable.
Will changing the IP restriction cut off active connections?
No. Existing connections continue until the client naturally reconnects. Only new handshakes are checked against the updated rules. This gives you a brief window to fix a misconfigured rule without dropping an in-flight job.
Can I set IP rules per customer rather than per tunnel?
Yes. Each proxy client you issue on a tunnel carries its own ACL in addition to the tunnel-level rules. A source IP must pass both layers. This lets you run one tunnel for multiple customers, each locked to their own office IP range, without creating separate proxies.
How do I manage IP rules without using the panel?
The REST API accepts PATCH requests to update aclMode and aclEntries on any proxy. This is the standard approach for CI/CD pipelines that need to whitelist a runner's egress IP at the start of a job and remove it at the end. See the REST API quickstart for authentication details.
N

Nodetonet Team

Building Nodetonet — a prepaid proxy + tunneling platform that replaces ngrok, Cloudflared and a residential proxy provider with a single panel.

Related posts