Fail2Ban Advanced: Custom Jails for Apache, WordPress, and SSH to stop Brute-Force in its tracks

Advanced Fail2Ban Strategies for Hardening Linux Servers

Fail2Ban is an essential security tool for any Linux administrator. While the default configurations provide basic protection, they often fail to address the nuance of modern application-layer attacks. By creating custom jails tailored to specific service logs, you can significantly reduce the noise of brute-force attempts and minimize server resource exhaustion.

Protecting SSH with Custom Filter Policies

While the standard SSH jail covers basic password guessing, you can enhance it by monitoring specific log patterns associated with unauthorized key attempts or specific user targeting. Create a custom jail in your local configuration directory to enforce stricter bans on persistent offenders.

# /etc/fail2ban/jail.local

[ssh-custom]

enabled = true

port = ssh

filter = sshd-aggressive

logpath = /var/log/auth.log

maxretry = 3

findtime = 600

bantime = 86400

Defending WordPress from XML-RPC and Login Attacks

WordPress is a prime target for automated brute-force attacks against wp-login.php and the XML-RPC interface. Since these attacks generate significant database load, blocking them at the firewall level before they hit PHP is critical.

First, define a custom filter to match WordPress-specific login failures:

# /etc/fail2ban/filter.d/wordpress.conf

[Definition]

failregex = ^<HOST> -.* "POST /wp-login.php HTTP/.*" 200

^<HOST> -.* "POST /xmlrpc.php HTTP/.*" 200

ignoreregex =

Then, apply this filter in your jail configuration:

# /etc/fail2ban/jail.local

[wordpress]

enabled = true

port = http,https

filter = wordpress

logpath = /var/log/apache2/access.log

maxretry = 5

bantime = 3600

Apache-Specific Request Filtering

Apache serves as the entry point for most web applications. Beyond login attempts, you should protect your server from vulnerability scanners that probe for common directories (e.g., .env, .git, or /admin). A proactive approach is to create a jail that identifies 404-heavy traffic patterns.

# /etc/fail2ban/jail.local

[apache-bad-bots]

enabled = true

port = http,https

filter = apache-auth

logpath = /var/log/apache2/access.log

maxretry = 3

bantime = 604800

Best Practices for Maintenance

  • Whitelist your IP: Always add your static office or home IP to the ignoreip list in jail.local to prevent self-lockout.
  • Monitor Logs: Regularly inspect your Fail2Ban log files to ensure that your regex patterns are correctly matching current attack signatures.
  • Action Types: Consider using fail2ban-client to integrate with Cloudflare or other edge firewalls rather than relying solely on local iptables/nftables if you are under heavy distributed attack.
  • Testing Regex: Use the fail2ban-regex tool to test your custom expressions against actual log lines before deploying the jail to production.

By implementing these granular controls, you transition from reactive log monitoring to proactive automated defense, ensuring that your server remains resilient against the most common automated threats.

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *