Skip to main content

fail2ban Integration

MAPS integrates cleanly with fail2ban to provide IP-level enforcement on top of its built-in authentication controls.

Where AuthManager slows users down and locks accounts, fail2ban handles the blunt instrument: stop the IP from talking to the server at all.

This integration is intentionally simple and log-driven.


Location​

All fail2ban assets are shipped with MAPS:

$MAPS_HOME/bin/fail2ban/
  • Installation script: fail2ban-config.sh
  • Jail definition: maps-auth.local
  • Filter definition: maps-auth.conf

The script installs these into the system fail2ban configuration directories.


Jail Configuration (maps-auth.local)​

[maps-auth]
enabled = true
filter = maps-auth

# Point this at your MAPS log file
logpath = /opt/maps_data/log/messaging.log

# How aggressive you want it:
findtime = 300
maxretry = 5
bantime = 3600

# If your host is behind a proxy and logs proxy IPs, fix logging first.
# action defaults to banning via firewall (nftables/iptables) depending on distro.

Behaviour​

  • Watches the MAPS server log for authentication abuse
  • Tracks failures per IP within the findtime window
  • Bans the IP for bantime seconds once maxretry is exceeded

Key Parameters​

SettingMeaning
findtimeTime window (seconds) for counting failures
maxretryFailures allowed before ban
bantimeDuration of IP ban (seconds)

This operates independently of AuthManager lockouts.


Filter Definition (maps-auth.conf)​

[Definition]
# Match failures and lockouts emitted by MAPS auth monitor logging.
# Assumes the log line contains one of these tokens and the client IP address.
#
# Example lines this will match (examples only):
# ... AUTH_FAILURE user=bob attempts=3 ip=203.0.113.9
# ... AUTH_LOCKOUT_STARTED user=bob attempts=5 lockSeconds=60 ip=203.0.113.9
#
# If your log format is different, adjust the tail so the IP is captured as <HOST>.

failregex = ^.*\bAUTH_FAILURE\b.*\b(?P<host><HOST>)\b.*$
^.*\bAUTH_LOCKOUT_STARTED\b.*\b(?P<host><HOST>)\b.*$
^.*EndPoint closed during protocol negotiation ip=<HOST>\s*$
^.*Failed to detect protocol on End Point .*?, ip=<HOST>\s*$

ignoreregex = ^.*ip=127\..*$
^.*ip=::1.*$

What This Catches​

The filter reacts to:

  • Repeated authentication failures
  • Explicit authentication lockout events
  • Protocol abuse during negotiation
  • Invalid protocol detection attempts

All rules rely on the IP address being logged and captured as <HOST>.


Localhost Exclusions​

ignoreregex = ^.*ip=127\..*$
^.*ip=::1.*$

This prevents:

  • Accidental self-bans
  • Local monitoring tools from triggering fail2ban
  • Administrative testing from locking you out of your own server

Removing these lines is possible but strongly discouraged unless you enjoy console-only recovery.


Relationship to AuthManager​

LayerResponsibility
AuthManagerPer-user failure tracking, delays, account lockout
fail2banPer-IP enforcement and firewall bans

Recommended setup:

  • Enable both
  • Use AuthManager for precision and fairness
  • Use fail2ban for hostile or automated traffic

Proxies and Load Balancers​

If MAPS runs behind:

  • Reverse proxies
  • TLS terminators
  • Load balancers

Ensure that:

  • The real client IP is logged by MAPS
  • Proxy IPs are not logged as the source

Otherwise fail2ban will enthusiastically ban your own infrastructure.


Installation​

Installation is handled by:

$MAPS_HOME/bin/fail2ban/fail2ban-config.sh

The script:

  • Installs the jail and filter
  • Reloads fail2ban
  • Leaves existing configuration intact

The provided configuration is suitable for:

  • Internet-facing brokers
  • Public REST endpoints
  • MQTT, STOMP, AMQP listeners

For internal-only deployments, fail2ban may be disabled while keeping AuthManager protection enabled.