- Баллы
- 76
- Имя в Minecraft
- Jon
Сразу к делу. Если на ваш сервер совершаю бот атаки, иногда даже с разных айпи, есть хороший способ решить эту проблему.
Этот способ подойдет только тем, у кого сервер работает на линуксе и есть root доступ.
fail2ban - это встроенный в линукс сервис, который предотвращает попытки взлома ssh,mysql,ftp,apache,nginx и других сервисов. Работает он интересным образом: он сканирует логи сервисов и, если айпи превысил лимит попыток авторизироваться, то он попадает в черный список и блокируется через iptables и ipset.
Я приведу рабочий пример защиты BungeeCord (далее банга).
И так, у нас есть банга, ее логи находятся в файле proxy.log.0. Когда идет бот атака, в логах начинает появляться куча сообщений вида:
Сообщение "InitialHandler has connected" пишется, когда игрок входит на сервер или получает motd сервера. Нам не важно, что из этого делает бот, потому что атаки бывают и с получением большого числа motd.
Я пришел к таким цифрам: если игрок за 60 секунд попытался войти/получить motd более 30 раз, то это скорее всего бот.
Переходим к настройке защиты.
Узнать, сколько айпи забанено: fail2ban-client status bungee-connection
Разбанить айпи: fail2ban-client set bungee-connection unbanip АЙПИ
Сразу скажу, при первой атаке бангу могут положить несколько раз. Но когда все айпи ботов попадут в бан, вы будете защищены.
Вы можете создать и другие тюрьмы (так это называется в fail2ban).
Например, если вы используете BotFilter, вы можете банить айпи, если в лог пишется аля "Игрок 32.32.32.32 не прошел проверку на антибота". Кто скинет рабочий пример, я добавлю в статью (просто я BotFilter не использую).
Я хочу сделать статью максимально понятной, по этому задавайте вопросы, если что-то не понятно.
Этот способ подойдет только тем, у кого сервер работает на линуксе и есть root доступ.
fail2ban - это встроенный в линукс сервис, который предотвращает попытки взлома ssh,mysql,ftp,apache,nginx и других сервисов. Работает он интересным образом: он сканирует логи сервисов и, если айпи превысил лимит попыток авторизироваться, то он попадает в черный список и блокируется через iptables и ipset.
Я приведу рабочий пример защиты BungeeCord (далее банга).
И так, у нас есть банга, ее логи находятся в файле proxy.log.0. Когда идет бот атака, в логах начинает появляться куча сообщений вида:
Код:
23:03:07 [INFO] [/213.32.67.146:59380] <-> InitialHandler has connected
23:03:37 [INFO] [/213.32.67.146:60984] <-> InitialHandler has connected
23:04:07 [INFO] [/213.32.67.146:34370] <-> InitialHandler has connected
23:04:15 [INFO] [/77.122.62.35:55387] <-> InitialHandler has connected
23:04:19 [INFO] [/77.122.62.35:55399] <-> InitialHandler has connected
Я пришел к таким цифрам: если игрок за 60 секунд попытался войти/получить motd более 30 раз, то это скорее всего бот.
Переходим к настройке защиты.
- Заходим по ssh/sftp от рута
- Установка fail2ban. Он может стоять по умолчанию, но очень рекомендую поставить версию v0.10.5 или выше:
Код:# Смотрим версию # Если версия v0.10.5 и выше, тогда все хорошо, на этом установка окончена. fail2ban-client --version # Если версия ниже, тогда придется обновить вручную до новой версии # Обновляем apt remove fail2ban -y rm /etc/systemd/system/fail2ban.service git clone -b 0.10 https://github.com/fail2ban/fail2ban.git cd fail2ban/ python setup.py install source /etc/profile cp files/debian-initd /etc/init.d/fail2ban update-rc.d fail2ban defaults cd .. rm -r fail2ban service fail2ban start # перезаходим по ssh - Устанавливаем ipset:
Код:apt install ipset - Заходим в папку /etc/fail2ban/jail.d
- Создаем там файлик minecraft.conf, вставляем туда:
Код:[bungee-connection] enabled = true # фильтр логов, об этом ниже filter = bungee-connection # тип блокировки, установлена блокировка порта 25565 action = iptables-ipset-proto4[name="bungee-connection", port="25565"] # путь к файлу логу банги logpath = /глобальный-путь-к/proxy.log.0 # максимальное число "InitialHandler has connected" maxretry = 30 # время бана айпи в секундах, установлен 1 месяц bantime = 2592000 # время в секундах, за которое будет учитываться maxretry # если за findtime секунд, будет совершено maxretry попыток входа, тогда айпи забанится на bantime findtime = 60 - Теперь нужно создать фильтр логов bungee-connection, переходим в папку /etc/fail2ban/filter.d
- Создаем файлик bungee-connection.conf, вставляем туда:
Код:[Definition] # regex выражение, которое находит нужные нам сообщения в логах и извлекает из них айпи бота <HOST> failregex = \[\/<HOST>:.+] <-> InitialHandler has connected ignoreregex = # формат даты в логах, в нашем случае "23:27:38" datepattern = %%H:%%M:%%S - Перезагружаем fail2ban
Код:fail2ban-client reload service fail2ban restart
Узнать, сколько айпи забанено: fail2ban-client status bungee-connection
Разбанить айпи: fail2ban-client set bungee-connection unbanip АЙПИ
Сразу скажу, при первой атаке бангу могут положить несколько раз. Но когда все айпи ботов попадут в бан, вы будете защищены.
Вы можете создать и другие тюрьмы (так это называется в fail2ban).
Например, если вы используете BotFilter, вы можете банить айпи, если в лог пишется аля "Игрок 32.32.32.32 не прошел проверку на антибота". Кто скинет рабочий пример, я добавлю в статью (просто я BotFilter не использую).
Я хочу сделать статью максимально понятной, по этому задавайте вопросы, если что-то не понятно.
Последнее редактирование: