Why static IP blocklists stop working the moment you need them

René Benachour

•

An attacker rents a VPS for the price of a coffee. Ten minutes after the instance boots it is sweeping the internet for exposed SSH, RDP and VPN endpoints. Someone notices, the address gets reported, and some hours later it lands on a public blocklist. By that point the scanning has moved to a fresh instance, often at a different hosting provider, and the address now sitting in your firewall config belongs to whoever rents it next.

That gap, between the moment a host turns hostile and the moment your firewall knows about it, is the whole problem. Everything below is about how wide the gap really is and what you can do to narrow it.

Static lists are not useless

It is worth being fair to them first, because the internet is full of takes that are not.

A daily updated blocklist from a reputable source does real work. It removes a large slice of background noise before that noise reaches your VPN portal, your mail gateway or your application logs. Fewer authentication attempts means fewer alerts, smaller log volumes, less pressure on rate limits and a quieter on call rotation. If you run a small team, cutting the noise floor is not a cosmetic win.

Long lived bad infrastructure also exists. Bulletproof hosting ranges, compromised IoT segments that stay compromised for months, Tor exit nodes if your policy says so. For that class of address a list that refreshes once a day is perfectly adequate.

So the question is not whether to use a list. The question is what fraction of what actually reaches you is covered by a list that was assembled yesterday.

Three things go wrong

Rotation is cheaper than detection. Spinning up a new host takes a minute and costs almost nothing. Getting that host onto a shared blocklist takes observation, reporting, aggregation and publication. The economics run in the attacker's favour, and they know it.

Publication cycles add their own lag. Many feeds collect continuously and publish on a schedule. Your firewall then pulls on its own schedule, often hourly, sometimes daily. Two independent delays stack up, and neither of them is visible in your dashboard.

Nothing removes entries fast enough. This is the part people underestimate. Cloud addresses get recycled constantly. An address that was scanning last Tuesday may be serving a customer's staging environment today. Lists that grow without an aging mechanism turn into a slow accumulation of false positives, and the symptoms are miserable to debug: one partner cannot reach your portal, a payment callback fails intermittently, a monitoring probe from a new region gets dropped. Nobody connects that to a blocklist entry from three months ago.

Addition gets all the attention. Removal is what keeps a list trustworthy.

What changes with live telemetry

The alternative is not a better publishing schedule. It is skipping the publishing step.

In NxtFireGuard the devices you already own do the observing. A threat sensor is a firewall, an AAA server or a honeypot that forwards its threat logs to our Threat Collector. Palo Alto firewalls send over HTTPS, Cisco FTD and Cisco ISE send syslog through a feed aggregator, T-Pot honeypots ship through Logstash, and anything else can use the generic API.

Those events feed an IP scoring engine. A score moves on the severity of what the address did, how often it did it, what third party intelligence says about it, and what the rest of the community is seeing from the same address at the same time. One address hitting one honeypot once is weak evidence. The same address hitting eleven separate networks within an hour is not.

A traffic sensor then watches live flows against the score database and sends a block recommendation when an address crosses the threshold you set. The recommendation does not go straight into enforcement. It goes to the arbiter, which checks it against your whitelists and the configuration of the target blocklist before anything is published. Your firewall picks the list up from its normal external dynamic list URL, so no agent is installed and no policy is rewritten.

The part that matters as much as the speed: every blocked address gets re scored on the check interval you configure, in hours, and drops off the list when it no longer clears the threshold. The list shrinks on its own. That is the aging mechanism most static feeds never had.

What this does not fix

Anyone who tells you IP reputation solves your perimeter is selling something.

An attacker using a residential proxy network looks like a home broadband customer, because they are routing through one. A targeted attack against your organisation specifically may involve exactly one connection from one clean address, which leaves no reputation trail anywhere. Anything happening inside an allowed session, credential abuse, application logic flaws, a malicious document, is out of scope by definition. And carrier grade NAT means a single address can front thousands of subscribers, which is why thresholds and whitelists exist and why you should never blanket block a mobile carrier range.

IP reputation is a volume control, not a lock. It removes the automated majority so your team and your other controls can concentrate on what is left. Treat it as one layer with a clear job and it earns its place. Treat it as a security strategy and it will let you down at the worst moment.

A reasonable place to start

You do not need a project for this. Connect one sensor you already have, create one blocklist with a conservative public threshold, point a firewall at the URL in log only mode, and read the hits for a week before you enforce anything. You will learn more about your own traffic in those seven days than from any vendor datasheet.

The Basic tier is free and covers one sensor and two blocklists, which is enough to run exactly that experiment. If you want to see how the tiers compare before you start, the tier overview lays out sensors, blocklists, retention and support side by side.

Next in this series: a step by step walkthrough of wiring a blocklist into PAN-OS as an external dynamic list.


Written by René Benachour

← Back to all posts