Настроить связку Fail2ban + UFW не iptables

Posted by

Задача: настроить связку Fail2ban + UFW (не iptables)

С чего бы это использовать ufw вместо дефолтного iptables, а все дело в личных предпочтениях, да и синтаксис правил упрощен. Лучше делать просто и с пониманием, чем тратить кучу времени на то что пытаешься понять, пробуешь скопировать из интернета или по крупицам собираешь рабочий вариант, но не замечая что все уже сделано и нужно только изменить дефолтное. Вот как я сейчас — я уже давно пришел к выводу что в проектах на базе Ubuntu 18.04 (до этого Precise, Trusty, Xenial) сервис ufw делает всю работу по ограничение безопасного подключения к моим сервисам, так пусть он работает и с сервисов предотвращения проникновения fail2ban.

Получилось разобрать, как это сделать, см. заметку ниже.

ekzorchik@srv-bionic:~$ hg clone --insecure https://ekzorchik@172.35.35.8/hg/dproject

Запускаю личный скрипт настройки системы перед использованием, Вы же используете свое:

ekzorchik@srv-bionic:~$ sudo ./dproject/default

ekzorchik@srv-bionic:~$ uname -a

Linux srv-bionic 4.15.0-29-generic #31-Ubuntu SMP Tue Jul 17 15:39:52 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

ekzorchik@srv-bionic:~$ sudo apt-get install fail2ban -y

итого защита подключения к сервису ssh сводится к следующим шагам настройки:

ekzorchik@srv-bionic:~$ sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

ekzorchik@srv-bionic:~$ sudo nano /etc/fail2ban/action.d/ssh-ufw.conf

[Definition]

actionstart =

actionstop =

actioncheck =

actionban = ufw insert 1 deny from <ip> to any app OpenSSH

actionunban = ufw delete deny from <ip> to any app OpenSSH

ekzorchik@srv-bionic:~$ sudo nano /etc/fail2ban/jail.d/defaults-debian.conf

[sshd]

enabled = false

ekzorchik@srv-bionic:~$ sudo nano /etc/fail2ban/jail.local

[ssh-ufw]

enabled = true

filter = sshd

action = ssh-ufw

logpath = /var/log/auth.log

maxretry = 3

bantime = 600

ekzorchik@srv-bionic:~$ sudo systemctl restart fail2ban

ekzorchik@srv-bionic:~$ sudo systemctl status fail2ban

● fail2ban.service - Fail2Ban Service

Loaded: loaded (/lib/systemd/system/fail2ban.service; enabled; vendor preset:

Active: active (running) since Mon 2018-10-08 22:00:54 MSK; 5s ago

Теперь включаю ufw:

ekzorchik@srv-bionic:~$ sudo apt-get install ufw -y

ekzorchik@srv-bionic:~$ sudo ufw enable

Command may disrupt existing ssh connections. Proceed with operation (y|n)? y

Firewall is active and enabled on system startup

ekzorchik@srv-bionic:~$ sudo nano /etc/default/ufw

IPV6=no

ekzorchik@srv-bionic:~$ sudo ufw default deny incoming

ekzorchik@srv-bionic:~$ sudo ufw default allow outgoing

ekzorchik@srv-bionic:~$ sudo ufw allow ssh

Rule added

ekzorchik@srv-bionic:~$ sudo ufw app list

Available applications:

OpenSSH

ekzorchik@srv-bionic:~$ sudo ufw status numbered

Status: active

To Action From

-- ------ ----

[ 1] 22/tcp ALLOW IN Anywhere

ekzorchik@srv-bionic:~$ sudo ufw logging on

Logging enabled

ekzorchik@srv-bionic:~$ sudo ufw reload

Firewall reloaded

Проверяю, как работает блокировка подключения к SSH сервису:

ekzorchik@srv-bionic:~$ sudo fail2ban-client status

Status

|- Number of jail: 1

- Jail list: ssh-ufw

ekzorchik@srv-bionic:~$ sudo fail2ban-client status ssh-ufw

ekzorchik@srv-bionic:~$ sudo fail2ban-client status ssh-ufw

Status for the jail: ssh-ufw

|- Filter

| |- Currently failed: 0

| |- Total failed: 15

| - File list: /var/log/auth.log

- Actions

|- Currently banned: 1

|- Total banned: 1

- Banned IP list: 172.35.35.4

ekzorchik@srv-bionic:~$ sudo fail2ban-client set sshd unbanip 172.35.35.4

Вот почему важно не оставлять смотрящий сервис на всеобщее обозрение пусть даже он закрыт сервисом Fail2ban, правильнее ограничить с каких систем можно удаленно в целях администрирования подключаться, к примеру так:

ekzorchik@srv-bionic:~$ sudo ufw allow to 172.33.33.25 port 22 from 172.33.33.0/24 proto tcp

ekzorchik@srv-bionic:~$ sudo ufw status numbered

Status: active

To Action From

-- ------ ----

[ 1] 172.33.33.25 22/tcp ALLOW IN 172.33.33.0/24

Где разрешенная сеть — это Management сеть или сеть организуемая VPN соединением до администрируемого хоста.

Итого задача выполнена, с уважением автор блога Олло Александр aka ekzorchik.