Posted in

Fortify Your SSH: Installing and Configuring Fail2Ban on Ubuntu 24.04

Fortify Your SSH: Installing and Configuring Fail2Ban on Ubuntu 24.04
Fortify Your SSH: Installing and Configuring Fail2Ban on Ubuntu 24.04

Introduction

Securing your server is paramount, especially when exposing services like SSH to the internet. While strong passwords and SSH key authentication are crucial, they aren’t always enough to deter persistent attackers. Brute-force attacks against SSH are common, where malicious actors attempt to guess your login credentials repeatedly. This is where Fail2Ban comes in, acting as a robust intrusion prevention framework that dynamically blocks suspicious IP addresses.

Fail2Ban works by monitoring log files (like those for SSH, web servers, or mail servers) for specific patterns indicating failed login attempts or other malicious activities. Once a threshold of failed attempts is met from a particular IP address, Fail2Ban automatically updates your firewall rules to temporarily or permanently block that IP, effectively locking out the attacker. This guide will walk you through installing and configuring Fail2Ban on your Ubuntu 24.04 server to protect your SSH service.

Prerequisites

Step 1: Update Your System

Before installing any new software, it’s always a good practice to update your system’s package list and upgrade existing packages to their latest versions:

sudo apt update
sudo apt upgrade -y

Step 2: Install Fail2Ban

Fail2Ban is available in the default Ubuntu repositories, making installation straightforward:

sudo apt install fail2ban -y

Once installed, the Fail2Ban service will typically start automatically. You can check its status using:

sudo systemctl status fail2ban

Step 3: Configure Fail2Ban for SSH

Fail2Ban’s configuration files are located in /etc/fail2ban/. The primary configuration file is jail.conf, but it’s not recommended to modify this file directly. Instead, create a copy named jail.local, which will override the default settings and prevent your changes from being overwritten during updates.

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Now, open jail.local using your preferred text editor (e.g., nano):

sudo nano /etc/fail2ban/jail.local

Inside this file, you’ll find a [DEFAULT] section and various jail configurations for different services. Scroll down to the [DEFAULT] section. Here are some key parameters you might want to adjust:

  • bantime: This is the duration (in seconds) for which an IP address is banned. The default is usually 10 minutes (600 seconds). For SSH, you might want a longer ban time.
  • findtime: This is the duration (in seconds) during which the number of failed attempts must occur before an IP is banned. The default is usually 10 minutes (600 seconds).
  • maxretry: The number of failed attempts before an IP address is banned. The default is typically 5.

For example, to set a ban time of 1 hour (3600 seconds), a find time of 15 minutes (900 seconds), and a max retry of 3, you would modify the [DEFAULT] section like this:

[DEFAULT]
bantime = 3600
findtime = 900
maxretry = 3

Next, find the [sshd] section. By default, it’s usually enabled. Ensure the enabled = true line is uncommented:

[sshd]
enabled = true
port = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s

If your SSH server is listening on a non-standard port, make sure to update the port directive accordingly (e.g., port = 2222).

Save and close the file (Ctrl+X, Y, Enter for nano).

Step 4: Restart Fail2Ban Service

After making changes to jail.local, you need to restart the Fail2Ban service for the changes to take effect:

sudo systemctl restart fail2ban

Step 5: Verify Fail2Ban Status

You can check the overall status of Fail2Ban and individual jails using the fail2ban-client command.

To see all active jails:

sudo fail2ban-client status

To check the status of a specific jail (e.g., sshd):

sudo fail2ban-client status sshd

This output will show you details like the number of currently banned IPs and the total number of IPs banned since the service started.

Step 6: Further Customization

Fail2Ban offers many advanced customization options:

  • Email Notifications: You can configure Fail2Ban to send email alerts when an IP address is banned. Look for the destemail and action parameters in jail.local.
  • Custom Jails: Create new jails to protect other services by defining specific log paths and regular expressions (filters).
  • Whitelisting IPs: If you have static IP addresses that you never want to be banned (e.g., your office IP), add them to the ignoreip directive in the [DEFAULT] section of jail.local.

Troubleshooting

If Fail2Ban isn’t working as expected, check the logs:

sudo journalctl -u fail2ban -n 50 --no-pager

You can also manually test a ban by attempting multiple failed SSH logins from another machine, then checking the jail status:

sudo fail2ban-client status sshd

Further Reading

Protecting your SSH service with Fail2Ban is just one layer of server security. For a comprehensive security approach, explore these related guides:

Conclusion

Protecting your SSH service with Fail2Ban is a critical step in hardening your server’s security posture. By automatically blocking malicious IP addresses, you significantly reduce the risk of brute-force attacks and unauthorized access. Remember that security is an ongoing process, and combining Fail2Ban with other security measures creates multiple layers of defense for your Ubuntu server.

Zac Morgan is a DevOps engineer and system administrator with over a decade of hands-on experience managing Linux and Windows infrastructure. Passionate about automation, cloud technologies, and sharing knowledge with the tech community. When not writing tutorials or configuring servers, you can find Zac exploring new tools, contributing to open-source projects, or helping others solve complex technical challenges.

Leave a Reply

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