Зміст

Fail2Ban

Встановимо fail2ban

apt install fail2ban -y

Збережемо оригінальні налашування (на всякий випадок)

cp -a /etc/fail2ban/ /etc/fail2ban.orig/

Створимо копію основного файлу конфігурації для модифікування

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

Підправимо його для роботи з nftables

[DEFAULT]
# Destination email for action that send you an email
destemail = fail2ban@mydomain.example
 
# Sender email. Warning: not all actions take this into account. Make sure to test if you rely on this
sender    = fail2ban@mydomain.example
 
# Specify chain where jumps would need to be added in ban-actions expecting parameter chain
chain     = input
 
# configure nftables
banaction = nftables-multiport
banaction_allports = nftables-allports
 
# Default action. Will block user and send you an email with whois content and log lines.
## action    = %(action_mwl)s
action    = %(action_)s
systemctl enable fail2ban
fail2ban-client reload
fail2ban-client status

Створюємо файл конфігурації fail2ban для файрвола

mkdir -p /etc/nftables/
nano /etc/nftables/fail2ban.conf
#!/usr/sbin/nft -f
 
# Use ip as fail2ban doesn't support ipv6 yet
table inet fail2ban {
        chain input {
                # Assign a high priority to reject as fast as possible and avoid more complex rule evaluation
                type filter hook input priority 100;
        }
}

Додамо створений файл в оновну конфігурацію файрвола

echo "include \"/etc/nftables/fail2ban.conf\"" >> /etc/nftables.conf

Також підвантажимо його в роботу

nft -f /etc/nftables/fail2ban.conf

Налаштування Fail2Ban для запуску/зупинки за допомогою nftables

Ми намагаємося досягти наступного:

Ми можемо зробити все це, створивши файл перевизначення для fail2ban, вказавши йому, що він залежить від nftables, а потім nftables хоче, щоб він запустився:

mkdir -p /etc/systemd/system/fail2ban.service.d/
nano /etc/systemd/system/fail2ban.service.d/override.conf
[Unit]
Requires=nftables.service
PartOf=nftables.service

[Install]
WantedBy=multi-user.target nftables.service

Оскільки ми змінили розділ [Install], нам потрібно повторно ввімкнути відповідну службу, щоб створити відповідні символічні посилання. Ми також переконаємося, що nftables спочатку встановлено як сервісний блок:

# systemctl enable nftables.service 
Created symlink /etc/systemd/system/sysinit.target.wants/nftables.service → /lib/systemd/system/nftables.service.
# systemctl enable fail2ban.service
Created symlink /etc/systemd/system/nftables.service.wants/fail2ban.service → /lib/systemd/system/fail2ban.service.
# systemctl daemon-reload

Як саме це працює?

У нашому файлі заміни або повному файлі конфігурації (див. нижче) ми включаємо такі параметри:

[Unit]
Requires=nftables.service "запуск цієї служби спочатку запустить nftables.service."
PartOf=nftables.service "змушує цю службу зупинятися або перезапускатися (але не запускатися) за допомогою nftables.service."
 
[Install]
WantedBy=multi-user.target nftables.service "змушує цю службу запускатися, коли запускається будь-яка з перелічених служб."

Як бачите, нам потрібно встановити Requires, PartOf і WantedBy, щоб отримати бажану поведінку.

Блокувальники

Після додавання або видалення блокувальниуів необхідно перезавантажити fail2ban

fail2ban-client reload

Також можна переглянути статус fail2ban

fail2ban-client status 

Рецедив

Повторно блокує по всіх портах іп адреси які раніше вже блокувались по іншим блокувальникам

nano /etc/fail2ban/jail.d/recidive.local
# Jail for more extended banning of persistent abusers
# !!! WARNINGS !!!
# 1. Make sure that your loglevel specified in fail2ban.conf/.local
#    is not at DEBUG level -- which might then cause fail2ban to fall into
#    an infinite loop constantly feeding itself with non-informative lines
# 2. If you increase bantime, you must increase value of dbpurgeage
#    to maintain entries for failed logins for sufficient amount of time.
#    The default is defined in fail2ban.conf and you can override it in fail2ban.local
#
# Manages the fail2ban history for hosts repeatedly banned by Fail2Ban and bans them
# according to the settings defined
#
 
[recidive]
enabled   = true
logpath   = /var/log/fail2ban.log
banaction = nftables-allports
backend   = systemd
bantime   = 9w
findtime  = 3d
maxretry  = 3
protocol  = 0-255

SSH

Вмикаємо блокувальник ssh. Оскільки всі значення стандартні то файл простий

nano /etc/fail2ban/jail.d/sshd.local
[sshd]
enabled   = true