Задача: настроить связку 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 соединением до администрируемого хоста.
От 16.04.2020
Итого задача выполнена, с уважением автор блога Олло Александр aka ekzorchik.