💾 Archived View for sysrq.in › ru › gemlog › fail2ban.gmi captured on 2023-09-28 at 16:14:34. Gemini links have been rewritten to link to archived content

View Raw

More Information

⬅️ Previous capture (2023-01-29)

➡️ Next capture (2024-02-05)

-=-=-=-=-=-=-

Делаем плохим роботам "bonk!"

Неэффективность мировой экономической системы, направленной лишь на извлечение прибыли, проявляет себя и в логах серверов. Бесполезные и вредные роботы генерируют столько же траффика, сколько и люди, впустую растрачивая ресурсы... В глобальном масштабе человечеству ещё предстоит решить эту проблему, а на отдельном сервере это делается грамотно настроенным файрволом и Fail2ban. Он довольно громоздкий и непонятный, но разобраться в нём (с трудом) можно.

Большинство предпочитают просто поставить Clouflare. Пожалуйста, не делайте так!

Cloudflare является MITM-прокси, который блокирует настоящих, живых пользователей Tor (таких как я) и не является настоящей защитой от DDoS. Он блокирует мне даже больше сайтов, чем Роскомнадзор 😭

CloudFlare, We Have A Problem

Cloudflare considered harmful

Большой список того, что не так с ClownFlare

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

За общим представлением о Fail2ban можно обратиться к:

Вики Arch Linux

Gentoo Linux Wiki

Лицемерие: SSH

По SSH мне стучатся почти всегда через Tor, и ни в одном из случаев это не я, поэтому буду отклонять эти пакеты.

Я использую nftables, но сойдёт любой файрвол.

Для этого в cron.daily создам скрипт следующего содержания:

#!/bin/sh

set -e

TABLE="ip sshd-tor"
SET="torexitnodes"

wget https://check.torproject.org/torbulkexitlist -qO /etc/tor/torbulkexitlist

nft add table ${TABLE}
nft flush table ${TABLE}

nft add chain ${TABLE} input { type filter hook input priority 0 \; }
nft add set ${TABLE} "${SET}" { type ipv4_addr \; }

for node in $(cat /etc/tor/torbulkexitlist); do
    nft add element ${TABLE} "${SET}" { "${node}" }
done

nft add rule ${TABLE} input tcp dport 22 ip saddr "@${SET}" reject

/etc/init.d/nftables save

Ну и не забываем включить фильтр sshd для Fail2ban 😉

Сканеры: OpenSMTPD

В комплекте для него ничего не идёт, поэтому идём в /etc/fail2ban и создаём два файла.

1. filter.d/opensmtpd-auth.conf

[Definition]

_daemon = smtpd

prefregex = <F-MLFID>: \w{16} </F-MLFID><F-CONTENT>.+</F-CONTENT>$

failregex = <F-NOFAIL>smtp connected address=(?:<IP6>|<IP4>) host=.+</F-NOFAIL>
            smtp failed-command command="AUTH LOGIN" result="503 5.5.1 Invalid command: Command not supported"
            <F-NOFAIL><F-MLFFORGET>smtp disconnected reason=disconnect</F-MLFFORGET></F-NOFAIL>

2. filter.d/opensmtpd-ssl.conf

[Definition]

_daemon = smtpd

prefregex = <F-MLFID>: \w{16} </F-MLFID><F-CONTENT>.+</F-CONTENT>$

failregex = <F-NOFAIL>smtp connected address=(?:<IP6>|<IP4>) host=.+</F-NOFAIL>
            smtp disconnected reason="io-error: .+"
            <F-NOFAIL><F-MLFFORGET>smtp disconnected</F-MLFFORGET></F-NOFAIL>

Источник: рандомный вопрос на ServerFault

Осталось их включить, для этого нужен файл jail.d/opensmtpd.conf. Банить буду навсегда со второй попытки.

[opensmtpd-auth]
enabled  = 1
port     = smtp,465,submission
logpath  = %(syslog_mail)s
logtimezone = UTC
backend  = %(syslog_backend)s
maxretry = 2
bantime  = -1
ignorecommand = /bin/grep <ip> /etc/tor/torbulkexitlist

[opensmtpd-ssl]
enabled  = 1
port     = smtp,465,submission
logpath  = %(syslog_mail)s
logtimezone = UTC
backend  = %(syslog_backend)s
maxretry = 2
bantime  = -1
ignorecommand = /bin/grep <ip> /etc/tor/torbulkexitlist

С помощью ignorecommand можно убедиться, что пользователи Tor не пострадают. Но, судя по моему опыту, сканеры и спамеры тором и не пользуются.

Ну и можно вручную сразу целый диапазон внести в файрвол, если там нет никого, кроме сканеров.

Nginx

Вредные боты

Проверяем, чтобы в секции server обязательно было

if ($http_user_agent ~* (MauiBot|MJ12bot|SEMrushBot|AhrefsBot|Expanse)){
  return 403;
}

Сюда можно добавить ещё всяких вредных роботов, "SEO-оптимизаторов" и якобы "исследовательские проекты" (так сразу и поверили, ага).

Ботнеты и сканеры

С fail2ban поставляется фильтр filter.d/botsearch-common.conf, но это минимальная конфигурация. Туда стоит вписать всё, чего так хотят боты, но получают 404. В моём случае это, например, /GponForm, а также все файлы с расширением php и js.

Далее создадим jail.d/nginx-botsearch.conf

[nginx-botsearch]
enabled = 1
logpath = /var/log/nginx/*_log
ignorecommand = /bin/grep <ip> /etc/tor/torbulkexitlist

Опять же, чаще мне стучатся со взломанных роутеров, а не с выходных нод тора.

--

Следующий пост о том, как я готовлю тонкий клиент.

"Каким удалённым рабочим столом ты пользуешься? Конечно же, спайсом!"

🏠 Посмотреть на все мои посты