INT 21h

Select language

Gitea, Gogs, Forgejo: борьба с ботами для обучения нейросетей

№ 12736 В разделе Sysadmin от June 12th, 2026,
В подшивках:

Заебали. ЗАЕБАЛИ! Эти козлы вообще берега потеряли. Огромная нагрузка, быстро засирающийся кеш, медленная связь, игнор любых robots.txt и каких-то правил. Я уже думаю закрыть полностью git и другие сайты для интернета, сделав их приватными сервисами. РКН и Минцифры так заботятся о нас, загоняя в чебурнет ради безопасности от внешних угроз, конечно же, а тем временем эта бомбежка идет и из сети ростелекома в том числе.

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

if ($request_uri ~* "/(raw|src|commits|blame)/commit/") {
    set $block_bot 1;
}

# Если переменная активирована, возвращаем 418 и сразу стопорим обработку
if ($block_bot = 1) {
    return 418;
}

Это пометит в логах такие говнозапросы кодом 418. Потом в приложении нужно отключить скачивание архивов. Боты прожамкивают все ссылки на них и генерируют огромного размера кеш. Всего за 1 вечер у меня он вырос на 30 гигов. Добавить в app.ini:

[repository]
DISABLE_DOWNLOAD_SOURCE_ARCHIVES = true

Я мигрировал с Gitea на Forgejo, проверьте имя опции для своего приложения, если не сработало сразу.

В принципе, вы уже на этом этапе ощутите прирост скорости и эффективность очистки кешей архивов через панель администратора. Это все можно завернуть на fail2ban, если вам не жалко памяти и процессорного времени потому, что хостов будет великое множество.

Создаем новое правило в файле /etc/fail2ban/jail.d/nginx-fuck-ai-bots.conf

[nginx-bot-blocker]
enabled = true
port = http,https
filter = nginx-bot
logpath = /var/log/nginx/k8s-git-access.log
maxretry = 1
bantime = 86400
findtime = 60
ignoreip = 127.0.0.1/8 192.168.0.0/16 10.0.0.0/8
action = iptables-multiport[name=nginx-bot, port="http,https", protocol=tcp]

Можно сделать модифицированную копию этого action с добавлением маски /24, fail2ban начнет вваливать их небольшими подсетями, это сэкономит немного памяти. Но памяти сожрется очень много, сразу говорю.

Производительность можно увеличить переходом на кастомный action с ipset (ставится отдельно):

action = iptables-ipset-24[name=nginx-bot, port="http,https", protocol=tcp, blocktype=DROP]

А сам action в файле /etc/fail2ban/action.d/iptables-ipset-24.conf сделать таким:

[INCLUDES]

before = iptables-common.conf

[Definition]
actionstart = ipset create  hash:net timeout 
               -I  -p  -m multiport --dports  -m set --match-set  src -j 
actionflush = ipset flush 
actionstop =  -D  -p  -m multiport --dports  -m set --match-set  src -j 
             
             ipset destroy 
actionban = ipset add   timeout  -exist
actionprolong = %(actionban)s
actionunban = ipset del   -exist
[Init]
default-timeout = 600
ipmset = f2b-
familyopt =
subnet              = $(echo  | grep -oP '^d+.d+.d+').0/24
[Init?family=inet6]
ipmset = f2b-6
familyopt = family inet6

Обращаю внимание на тип таблицы hash:net и получение subnet.

Теперь нужно создать сам фильтр /etc/fail2ban/filter.d/nginx-bot.conf

[Definition]
failregex = ^"[^"]*","","[^"]*","418","[^"]*/(raw|src|commits|blame)/commit/[^"]*"
ignoreregex =

У меня логи пишутся в формате csv чтобы их было легко парсить. Если у вас дефолт, то должно быть что-то типа

failregex = ^ -.*GET.*/(raw|src|commits|blame)/commit/.* 418

Если все зашибок в логе fail2ban вы увидите что-то типа


2026-06-12 04:48:55,646 fail2ban.filter [2601244]: INFO Added logfile: '/var/log/nginx/k8s-git-access.log' (pos = 11892730, hash = 3766ecb7dadb449dee6e990831a627eb3468e574)
2026-06-12 04:48:55,665 fail2ban.jail [2601244]: INFO Jail 'sshd' started
2026-06-12 04:48:55,666 fail2ban.jail [2601244]: INFO Jail 'nginx-bot-blocker' started
2026-06-12 04:48:55,854 fail2ban.filter [2601244]: INFO [nginx-bot-blocker] Found 14.191.222.88 - 2026-06-12 04:48:55
2026-06-12 04:48:55,866 fail2ban.actions [2601244]: NOTICE [nginx-bot-blocker] Ban 14.191.222.88
2026-06-12 04:48:56,067 fail2ban.filter [2601244]: INFO [nginx-bot-blocker] Found 113.181.28.191 - 2026-06-12 04:48:56
2026-06-12 04:48:56,083 fail2ban.actions [2601244]: NOTICE [nginx-bot-blocker] Ban 113.181.28.191
2026-06-12 04:48:56,092 fail2ban.filter [2601244]: INFO [nginx-bot-blocker] Found 156.255.247.131 - 2026-06-12 04:48:56
2026-06-12 04:48:56,289 fail2ban.actions [2601244]: NOTICE [nginx-bot-blocker] Ban 156.255.247.131
2026-06-12 04:48:56,479 fail2ban.filter [2601244]: INFO [nginx-bot-blocker] Found 113.176.240.57 - 2026-06-12 04:48:56

Также можно понаблюдать как ваш фаервол заваливает адресами

watch -n 1 "iptables -L f2b-nginx-bot -n|wc"

Итого мы имеем, что послали любителей халявы на хуй + сразу же их определили в бан.

Нет комментариев »

Leave a Reply

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

*

Облачная платформа
Яндекс.Метрика

Fortune cookie: A proctologist is a doctor who puts in a hard day at the orifice.