Знакомая ситуация? Заходите утром в логи сервера, а там сотни IP-адресов со всего мира пытаются подобрать пароль к вашей админке. Даже если у вас пароль длиной в 30 символов, и вы спокойны за сохранность данных, эти боты создают лишнюю нагрузку на базу данных и php-fpm.
Сегодня разберем, как раз и навсегда закрыть этот вопрос с помощью Fail2Ban на стандартном сервере (Nginx или Apache).

🤔 В чем подвох с OpenCart?
Обычно Fail2Ban настраивают просто: "Если сервер вернул ошибку 401 Unauthorized или 403 Forbidden — баним".
Но OpenCart (как и WordPress) работает хитрее. Когда кто-то вводит неправильный пароль, движок возвращает статус 200 OK и просто показывает страницу с надписью "Неверный логин или пароль". Для стандартных настроек защиты это выглядит как обычный, легитимный запрос. Бот может долбиться сутками, и фаервол его не заметит.
Мы пойдем другим путем: будем ловить частые POST-запросы (отправку форм) именно на страницу входа.
ШАГ 1. Создаем фильтр (Глаза защиты)
Нам нужно научить Fail2Ban понимать логи веб-сервера и выцеплять оттуда попытки входа.
Создаем файл фильтра:
nano /etc/fail2ban/filter.d/opencart-login.conf
Вставляем туда этот код:
[Definition]
failregex = ^<HOST> -.*"POST .*route=common/login.*"
ignoreregex =
Разбор магии:
POST — мы смотрим только на тех, кто нажимает кнопку "Войти". Просто открывать страницу админки (GET-запрос) можно сколько угодно.
route=common/login — это "сердце" входа в OpenCart. Фильтр сработает, даже если ваша админка находится по адресу /secret-panel/ или /manager/, так как системный параметр route остается неизменным.
ШАГ 2. Строим Тюрьму (Jail)
Теперь скажем серверу, что делать с нарушителями. Открываем основной конфиг:
nano /etc/fail2ban/jail.local
Добавляем в конец файла новую секцию:
[opencart-login]
enabled = true
filter = opencart-login
port = http,https
backend = auto
logpath = /var/log/nginx/access.log
maxretry = 5
findtime = 5m
bantime = 3h
banaction = iptables-allports
💡 Важно: Убедитесь, что ваш собственный IP добавлен в ignoreip в секции [DEFAULT] этого же файла. Иначе, забыв пароль или случайно обновив страницу несколько раз, вы забаните сами себя.
ШАГ 3. Запуск и проверка
Перезагружаем службу, чтобы применить настройки:
systemctl restart fail2ban
Как проверить, что всё работает?
Не верьте конфигам на слово, всегда тестируйте "в бою".
- Возьмите телефон (отключите Wi-Fi, используйте мобильный интернет, чтобы у вас был другой IP).
- Зайдите в админку вашего магазина.
- Введите любой логин и пароль, нажмите "Войти". Повторите 5-6 раз подряд.
- На 6-й раз страница должна перестать загружаться (браузер выдаст ошибку соединения).
Если это произошло — поздравляю! Ваша админка теперь под надежным куполом.
Чтобы разбанить свой телефон, выполните на сервере:
fail2ban-client set opencart-login unbanip ВАШ_IP_АДРЕС
Итог
Мы получили легкую, но непробиваемую защиту:
- ✅ Не нагружает PHP и MySQL (отсекает ботов на уровне входа в сервер).
- ✅ Работает с переименованными папками
admin.
- ✅ Работает на стандартных логах Nginx и Apache.
Внедряйте и спите спокойно! 😴