Syed Hashmi.
Work

Network security

Protek.

CrowdSec → MikroTik bouncer with a NOC dashboard.

Status
Active
Live

Stack
  • Python
  • Flask
  • SQLite
  • CrowdSec
  • RouterOS API
Licence
MIT
Last update
Nov 2026
Protek's dark NOC overview page. A row of KPI cards shows 64,639 active LAPI decisions, 55,381 entries on the MikroTik address list, a sync lag of 1 minute, 13 unique scenarios and 62,988 attacking IPs in the last 24 hours, with blocklist.de as the top scenario. Below, a 'Recent blocks' table lists recent bans with their time, country code, CrowdSec scenario (ssh-bf and ssh-slow-bf), origin and remaining duration, and an 'Attack origins' world map sits on the right. The left sidebar has Monitor, Enforce, Operate and Admin sections.
The NOC overview: live ban counts, address-list size, sync lag and a recent-blocks feed that refreshes every 5 seconds.

Pulls attacker decisions from CrowdSec and pushes them to the router, so bans happen at the network edge — with a NOC dashboard over all of it.

Why I built it

CrowdSec on a single server only protects that server. Protek moves the ban to the network edge: when an attacker trips a CrowdSec scenario anywhere, it lands on the MikroTik router’s firewall and is dropped before it reaches anything behind it.

How it works

  1. CrowdSec flags an IP — a scenario fires on any server running CrowdSec.
  2. Protek updates the router — the decision is reconciled into an address list on the router’s firewall.
  3. The edge drops the traffic — before it reaches anything behind the router.

What it does

  • Fans out to more than one firewall — MikroTik, pfSense, OPNsense, iptables/ipset and Cloudflare.
  • Federation — pull decisions from several CrowdSec instances, merge them, and score how strongly the sources agree.
  • Threat intel on every attacker — ASN, GeoIP, WHOIS, rDNS, CrowdSec CTI, Tor-exit and VPN detection.
  • A NOC dashboard — live block feed, attack-origin map, scenarios, sync status, audit log, and two-factor login.

Engineering decisions

  • A pure, tested diff engine — each cycle it decides what to add to and remove from the router’s address list, pushes the change in batches, and only ever touches entries it created.
  • Dry-run by default and self-healing — nothing is pushed until you say so, and drift on the router is corrected on the next cycle.

Recent updates

  1. Guided installer — bare metal or Docker, access mode, CrowdSec, MikroTik
  2. Make the installer, Docker and docs work beyond Ubuntu 24.04
  3. Sign in with Google, same model as Othoni and RiMM
  4. Set map maxZoom so MarkerCluster stops killing the script