Nym SMTP Egress Investigation

Nym SMTP Egress Investigation

Date: 2026-04-15
Tool: custom probe via nym-socks5-client v1.1.74
Targets: smtp.gmail.com, smtp.fastmail.com, smtp.yandex.ru, smtp-mail.outlook.com (port 587)

The hook

A user in the NymVPN Matrix chat (apricotastronoutskis) reported that sending email via Thunderbird through Tech_Pundit exit gateways in Ashburn fails, while other exits work fine. They suggested Tech_Pundit needs to update their firewall.

That sounded like something the Nym Node Checker should be detecting automatically, so I dug in to understand the actual cause and whether it is detectable from outside.

Headline findings

  • 54 of 472 exit gateways (11.4%) cannot relay SMTP to any major provider. Not a rare edge case.

  • Another 16 exits (3.4%) are in a worse spot: their hoster allows SMTP out, but mail providers have flagged the IP at their own anti-abuse layer. My own Stockholm gateway (2245, after I got OneProvider to unblock their filter) ended up here: Fastmail accepts it, Gmail/Microsoft/Yandex silently drop it. That damage is accumulated while the IP sat behind the original filter and is not easily undone from the operator side.

  • The Nym Foundation’s own test gateway nym-wg-test.dev.nymte.ch (node 2165) is in the HOSTER_BLOCKED category. It cannot reach ANY of the four major mail providers tested.

What I tested and why

For each of the 472 exit gateways in the current Nym network, from a server in Zurich, I:

  1. Set the exit gateway’s NR address as provider_mix_address in nym-socks5-client’s config and started the client (one SOCKS5 proxy per exit).
  2. Sent a SOCKS5 CONNECT to each of four mail providers on port 587.
  3. Considered a target “open” only if a real SMTP banner 220 … came back. Otherwise “no data” (the receiving side silently drops).

Each exit was then labeled:

  • FULLY_OPEN - all 4 providers returned real banners.
  • PARTIAL - 1 to 3 providers returned banners. The hoster allows outbound SMTP, but some mail receivers are dropping this IP at their edge (IP reputation / RBL).
  • HOSTER_BLOCKED - 0 of 4 providers returned a banner. The exit’s hoster is most likely filtering outbound 587 at the network edge.

Summary

Category Exits Percentage
FULLY_OPEN 402 85.2%
PARTIAL 16 3.4%
HOSTER_BLOCKED 54 11.4%
Total 472 100%

Per-hoster breakdown (top 15 by size)

Hoster (ASN) Total Full Partial HosterBlocked
WorkTitans (AS209847) 113 108 5 0
HostHatch (AS63473) 47 46 0 1
netcup (AS197540) 30 23 0 7
FlokiNET (AS200651) 27 27 0 0
OVH (AS16276) 27 20 0 7
OneProvider (AS136258) 18 3 1 14
Contabo (AS51167) 18 14 3 1
Hostinger (AS47583) 16 16 0 0
Linode/Akamai (AS63949) 11 8 0 3
Hetzner (AS24940) 8 7 0 1
Melbikom (AS56630) 6 0 0 6
netcup secondary (AS214996) 4 0 0 4
DigitalOcean (AS14061) 4 0 3 1
Melbikom (AS8849) 3 0 0 3

Providers that are 100% OPEN: FlokiNET, Hostinger, M247, Serverastra, ATW, Geohosting, Gigahost, EDGE/GCI, IONOS, Online/Scaleway, Exoscale, Optimal Link, Kaopu HK, UpCloud and many small ones.

Providers that are 100% HOSTER_BLOCKED: Melbikom (both AS56630 and AS8849), netcup secondary AS214996 (all 4 Aether-gw-us-* exits).

My own story

I operate node 2245 (Stockholm, OneProvider AS136258, 185.186.78.251) and node 2254 in Johannesburg. While testing, I discovered that SSH-level direct TCP from these boxes to smtp.gmail.com:587 was timing out for all mail ports, while general HTTPS worked fine. Same happened on my other OneProviderDC not related to Nym server in Zurich.

tcpdump confirmed: SYN packets left the server, no SYN-ACK came back. Drop was upstream at OneProvider’s edge for those specific DCs.

I opened a ticket with OneProvider for that servers asking them to unblock outbound 25/465/587. Response came back a few hours later:

“The ports have been unfiltered, note that in the event of spamming, reports or blacklisted IPs, the limitation will be set back immediately.”

Re-tested: direct SMTP from Stockholm now works for all 4 mail providers on a direct TCP test. But via the Nym mixnet through the Stockholm NR, Gmail, Yandex, Outlook still drop packets. Only Fastmail accepts. My Stockholm ended up in the PARTIAL category - the hoster block is gone, but Gmail and the other big receivers have flagged the IP on their own mail infrastructure (separate from public RBLs - it is NOT on Spamhaus/CBL/SORBS/UCEPROTECT/etc). That is an IP-reputation thing with the receiving mail providers, accumulated while the IP was sitting behind a firewall that drops SMTP. Hard to fix from the operator side.

Who needs to do what

HOSTER_BLOCKED (54 exits) - fixable by ticketing the hoster

These exits have 0/4 mail providers reachable. Almost certainly their hoster is filtering outbound mail ports at the network edge. The fix is the same one that worked for me: open a ticket, explain the use case (relay for anonymity network), ask for ports 25/465/587 to be unblocked. Most hosters will comply, some with anti-abuse conditions.

OneProvider / BrainStorm (AS136258) - 14 exits

Node ID IP Moniker
2297 172.245.232.60 tech_pundit Node-3 (original complaint)
2299 172.245.232.205 tech_pundit Node-4 (original complaint)
2300 172.245.232.62 tech_pundit Node-2 (original complaint)
2301 172.245.232.254 tech_pundit Node-5 (original complaint)
2237 91.148.134.232 Avril14th CO
1922 23.95.76.216 BwNymGama
2446 185.93.173.173 GwLaCondenacion (nymtech.net.ar Bolivia)
2489 103.106.230.58 GwLaPurgacion (nymtech.net.ar Taiwan)
2078 46.16.131.203 GwLaSufricion (nymtech.net.ar Ireland)
2442 223.165.4.38 patacon4 (bwnym.xyz)
3054 103.106.229.234 Node 3054
2047 185.231.233.53 bwn_g2 (moteg6 / bwnym.xyz)
2258 185.47.253.36 bwnym-pr-kuntur
1937 37.143.129.71 patacong1 (bwnym.xyz)

netcup (AS197540 + AS214996) - 11 exits, largely Aether gateway operator

Node ID IP Moniker
2692 152.53.80.130 Aether-gw-us-01
2697 152.53.168.181 Aether-gw-us-02
2701 152.53.81.78 Aether-gw-us-03
2989 152.53.82.11 Aether-gw-us-04
2693 152.53.105.109 Aether-gw-nl-01
2862 152.53.107.48 Aether-gw-nl-02
2866 152.53.104.204 Aether-gw-nl-03
2943 152.53.105.12 Aether-gw-nl-04
3050 152.53.84.57 Aether-gw-de-05
2638 152.53.144.147 PrivacyMeow #01
2933 152.53.122.46 weisser-zwerg.dev

Melbikom (AS56630 + AS8849) - 9 exits

Node ID IP Moniker
3056 213.183.63.103 onchainaustria.at-exit-BG01
3055 195.238.126.176 onchainaustria.at-exit-LT01
2979 185.135.86.215 onchainaustria.at-exit-LV01
2671 95.81.87.209 DAOariwas Samay
2057 185.140.12.132 patacong2 (bwnym.xyz)
2414 176.97.192.38 bwnym-pr-quwi
2328 89.36.162.71 Oceanus Staking AE 2
2717 5.188.183.174 Oceanus Staking ES 1
2409 103.97.91.245 Oceanus Staking NG 1

OVH (AS16276) - 7 exits

Node ID IP Moniker
2804 141.227.186.52 Hermes Stakepool Belgium BE01
180 141.227.135.100 Hermes Stakepool Czechia CZ01
3028 141.227.148.103 Hermes Stakepool Switzerland CH01
3083 141.227.149.187 Hermes Stakepool Switzerland CH02
2643 141.227.135.132 onchainaustria.at-exit-CZ01
2647 141.227.135.154 mku1tra EntryNode #5
3073 141.227.142.124 Oceanus Staking MA 1

Linode/Akamai (AS63949) - 3 exits (including Nym Foundation!)

Node ID IP Moniker
2165 172.232.211.187 nym-wg-test.dev.nymte.ch (Nym Foundation test gateway)
2031 172.105.14.241 NodesGuruShipyard
2835 172.105.57.27 id-1.kyhofa.eu

HZ-EU (AS59711) - 2 exits

Node ID IP Moniker
1893 185.117.89.70 nymgwearth (nsosquad.ovh)
2072 185.235.138.75 nymgwjupiter (nsosquad.ovh)

Singletons (one node each)

Node ID IP Hoster Moniker
1986 185.205.187.165 CL8ASN1 nymgwmercury (nsosquad.ovh)
2670 95.81.70.58 Clouvo Nodo-asir
3011 156.67.30.121 Contabo CtrlAltNym
1970 134.122.63.209 DigitalOcean twiga (ndovai.net)
3057 46.225.63.59 Hetzner cNET-1 (lifebot.ru)
2869 45.45.217.115 HostHatch (unnamed)
1995 103.75.117.191 Leaseweb APAC Avril14th HK
2083 104.36.231.170 Shock Hosting nym-exit.gw3.tupinymquim.com

PARTIAL (16 exits) - IP reputation issue, harder to fix

These exits have some mail providers reachable, some not. Typically means the hoster allows SMTP out, but the IP has been flagged by specific receivers (often Gmail, which is strict). Fixing requires mail-provider-specific delisting (Gmail Postmaster Tools, Microsoft SNDS etc.). Operators may want to acknowledge it and either migrate to a new IP or accept reduced mail-destination coverage.

Node ID IP Works on Moniker
2856 103.94.238.205 fastmail mixnet.id Jakarta
973 161.97.93.32 fastmail Odessa Digital Club Lauterbourg FR
724 37.60.247.198 fastmail Odessa Digital Club Saint-Die FR
1690 173.212.251.166 fastmail, yandex, outlook Palantir Tech Wissembourg FR
1902 128.199.242.71 fastmail Blockfend Gen Labs
2295 206.189.135.239 fastmail Blockfend blr2
2296 142.93.221.105 fastmail Blockfend blr3
2245 185.186.78.251 fastmail NYMLEM STOCKHOLM GATEWAY (mine)
2043 38.244.199.123 fastmail TupiNymQuim 6
2304 38.180.185.82 fastmail bwnym-teckel-AR
2432 38.180.185.73 fastmail j4ck-gw-01
1871 37.221.125.184 fastmail, yandex, outlook Adela
2060 95.164.5.213 gmail, yandex, outlook Stake. BR III
1456 5.253.41.179 gmail, fastmail, outlook Stake. JP
2114 5.253.41.195 gmail, fastmail, outlook Stake. JP II
2206 45.89.109.222 gmail, fastmail, outlook Stake. JP III

FULLY_OPEN (402 exits)

All good. This includes all FlokiNET, all Hostinger, all M247, most of HostHatch, most of WorkTitans (the biggest single cluster in the Nym network). No action needed.

Note on the original complaint

The Tech_Pundit Ashburn exits the user complained about are in HOSTER_BLOCKED. Their hoster (OneProvider, same as mine) is filtering outbound SMTP at the network edge for that DC. The user’s diagnosis (firewall policy needs updating) was correct, just not on the operator’s side - it is on the hoster’s side, reachable by the operator via a support ticket.

What’s next?

Further action is at the team’s discretion. My personal recommendation: affected operators in the HOSTER_BLOCKED category should open a support ticket with their hoster asking to unblock outbound TCP ports 25, 465 and 587. That is the exact fix that worked for my two servers, and it addresses the underlying cause for 54 of the 70 affected exits.

For operators in the PARTIAL category the problem is different and harder: the hoster already allows SMTP, but specific mail receivers (usually Gmail) have flagged the IP at their own anti-abuse layer. Ticketing the hoster will not help there - the realistic options are using Gmail Postmaster Tools, requesting a new IP from the hoster, or accepting reduced mail-destination coverage.

Caveats

  • IP reputation is dynamic. A probe run next week might give different PARTIAL results.

  • Only tested 4 mail providers on port 587. Port 25 (MTA-to-MTA) and port 465 (SMTPS) were not re-tested in this run. Some hosters block 25 but not 587.

  • The probe requires the mixnet to route through a specified exit. Occasional mixnet path failures can cause a PROBE_TIMEOUT on otherwise working exits; these were treated as HOSTER_BLOCKED by the classifier. With 10 concurrent workers and 120-second script timeout there should be very few false positives, but the count could shift by a few exits between runs.

Massive thanks to apricotastronoutskis, whoever you are, for chaining me to this laptop all fucking day with my brain boiling over!

This is an incredible work, very well done. It’s good to break it on the levels that you had described.

First of all there is always the issue of some operators not having fully ran the newest NTM, so we have to account for that, and we have a gateway probe expansion in testnet pipeline for that.

And then it comes to the levels you describing. If you don’t mind, I would take your advice and make a new template, or you can draft it and open a PR for this page: nym/documentation/docs/pages/operators/community-counsel/templates.mdx at develop · nymtech/nym · GitHub

The issue of changing IP or contacting different providers will be more difficult one. I think there is an interesting correlation where some of the providers who never filter, are more likely to have IPs blocked on the other side and vice versa.

These are the perks of decentralized network.

I think we can at least start to note down the providers in a more detailed way here: nym/documentation/docs/data/csv/isp-sheet.csv at develop · nymtech/nym · GitHub

And make expand the troubleshooting pages about the steps. In the end it will be the ticket based rewarding incentivizing the operators to have their nodes real world working in all possible use-cases, and up to us is to provide tools and knowledge to be able to do so.

2 Likes

Glad it landed well. Happy to take this on - I will draft a PR covering all three:

  1. A new template under community-counsel/templates.mdx for operators to use when asking their hoster to unblock SMTP egress (25/465/587). I’ll base it on the wording that actually worked for me with OneProvider.
  2. Updates to isp-sheet.csv reflecting what the probe surfaced - per-ASN counts of HOSTER_BLOCKED vs. PARTIAL vs. FULLY_OPEN, plus notes on hosters known to block by default and the ones with cleaner outbound mail behaviour.
  3. An expansion of the troubleshooting docs with a step-by-step decision tree: “is your direct SMTP egress timing out → ticket the hoster”, “egress fine but mail still rejected → IP reputation, here’s what to do”, etc.

The probe results JSON is tracked at vvmmaann/nym-checker if you want to consume it programmatically. Will share the PR link as soon as it is ready.

1 Like