A long time ago, I wrote RBL-Checker, a tool to check if a range IP is blacklisted or not.
I continue to use it but need a lot more complete and that integrate better in my use case.
In this post, you’ll learn:
- my use case (actual and future)
- my choice about my style to write code, and tools
My use case
I wrote the first version at home when I worked for a hosting provider. This company never sees the ROI to build this style of little software.
I can’t tell you that I liked this manager when I needed to debug one email server with a very high queue with nothing about metrology, detection of blacklist, exclusively reading the log without an ELK or similar.
Right now, I continue to have my own email servers so I use my software but also for any clients that need to monitor and alerting on them.
My future use case can be for a non-profit IAP because it’s very important to keep range IP clean and be alerted when an IP becomes blacklisted.
My first version was in Python and I continue in that way.
From monolith to 2 services
I moved from a service that use subprocess to do check in concurrency to 2 services because I need to check very quickly a large range of IP.
Asynchronous service taking message from the queue and checking IP across the list. Finally, add blacklisted IP with blacklist name and datetime of the check to the database.
I use it exclusively to add range to publish the message to the queue. Maybe later, I’ll add an endpoint to know how many messages are in the queue.
The biggest move can be a migration to Haskell but right now, I don’t need it.
Possible big change
Migrating from JSON to binary format and in that case, I see these possibilities:
Also, public cloud providers provide managed PostgreSQL (like Amazon RDS for PostgreSQL ) so it’s easy to deploy.
Deploying Python based software it’s very easy and compatible with every CPU architecture (ARM, RISC-V, x86).
Some cloud providers provide Kafka or Kafka compatible managed service so it’s very easy to deploy and you don’t need to manage it.