INT 21h

Hi, I am Vladimir Smagin, SysAdmin and Kaptain. Telegram / LinkedIn / Email / GIT / RSS / GPG / Надежный хостинг в Селектел
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"

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

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

Программа бэкапа почты imap2mbox

№ 12719 В разделе Sysadmin от March 14th, 2026,
В подшивках: , ,

Дело было вечером, делать было нечего… А бэкапить почту все равно нужно в свете последних событий, где mail.ru выкатил нехилый ценник за пользование почтой через imap. Готовые решения мне не понравились и некоторым я, откровенно говоря, не доверял. Появилась цель создать простой эффективный инструмент, способный подключаться по современным протоколам безопасности, возможностью дедупликации и инкрементации бэкапных файлов новыми письмами и дальнейшим беспроблемным импортом в новый почтовый сервер.

Сайт с документацией https://imap2mbox.blindage.org

Программа предназначена для однократного запуска и не имеет функций архивирования, это простой инструмент для выкачивания писем в mbox файлы с возможностью докачать новые письма позже без повторной полной выкачки. Для архивации файлов используйте специализированное ПО, например, borg или даже самописный bash скрипт, что удобнее. Файлы mbox могут быть опционально сжаты в gzip прямо во время выкачивания писем, но тогда вы лишитесь возможности делать инкрементный бэкап с помощью того же borg просто потому, что файл стал бинарным и немного меняется каждое сжатие.

Запуск рекомендуется делать регулярно через cron. Также можно контейнеризировать весь набор ПО для бэкапа почты и запускать в Kubernetes по Cronjob, сохранив конфиг в секрет. Вывод программы подготовлен к использованию с системами сбора логов в kv формате. Там же на сайте есть helm чарт с кронджобой.

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

Linux: как сделать сброс USB порта и переподключить устройство

№ 12704 В разделе Sysadmin от January 22nd, 2026,

# Сбросить порт (замените 1-1.2 на ваш порт)
echo '1-1.2' | sudo tee /sys/bus/usb/drivers/usb/unbind
echo '1-1.2' | sudo tee /sys/bus/usb/drivers/usb/bind

Полный сброс всего USB-контроллера (радикальный способ)

# Отключить USB-контроллер
sudo sh -c "echo 0 > /sys/bus/pci/drivers/xhci_hcd/unbind"
# Включить обратно
sudo sh -c "echo 1 > /sys/bus/pci/drivers/xhci_hcd/bind"

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

Mount and use VirtualBox VDI disk container in Linux

№ 12688 В разделе Sysadmin от November 11th, 2025,
В подшивках: , ,

Let’s say you need to create an image for your virtual machine where you’ll write some files or even create a special partition from an existing disk image. In Linux, you can mount this virtual disk image and use it like a regular block device!

The first step is to create your new virtual disk. This can be done directly in VirtualBox’s disk manager.

The next step is to install the necessary utilities and kernel modules from the Qemu distribution.

sudo apt install qemu-utils qemu-block-extra 
sudo modprobe nbd max_part=8
qemu-nbd --version

All preparations are complete; now you can specify the new block device.

sudo qemu-nbd -c /dev/nbd0 /tmp/New-disk-image.vdi

Finally, the final step is to create a partition table and a new partition on the new block device. As an example, I’ll create an EXT4 filesystem and mount it on my host system. You can also write special images using the dd utility.

cfdisk /dev/nbd0
mkfs.ext4 /dev/nbd0p1
tune2fs -L VDIPART1 /dev/nbd0p1

Just in case, let’s check the partition table.

vlad@turtle:/$ fdisk -l /dev/nbd0
Disk /dev/nbd0: 256 GiB, 274877906944 bytes, 536870912 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x10b50298

Device      Boot Start       End   Sectors  Size Id Type
/dev/nbd0p1       2048 536870911 536868864  256G 83 Linux

Now you can mount this partition as usual and then unmount it after you’re done.

sudo mount /dev/nbd0p1 /mnt/
sudo rsync -avz /my/special/files/ /mnt/
sudo umount /mnt

Disconnect. Required before use in VirtualBox!

qemu-nbd -d /dev/nbd0

You’re awesome.

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

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

Fortune cookie: Today's spam: Are you hung like a horse?