Скрипт предназначен для организации блокировки от перебора из access.log'ов nginx при помощи iptables, без изменения самих настроек nginx и iptables.
- Лог парсится по дате и времени и выбираются записи за определённое время в минутах указанное при запуске скрипта.
- Из лога выбираются только ip, сортируются, считаются и самое большое количество запросов с одного IP записывается в файл /etc/ipban.sh/reqests-count.txt в формате " "
- Из этого файла забирается количество и проверяется превышает ли оно порог
- Если превышает и IP не забанен ранее - IP Блокируется через iptables, если нет - проверяется нужно ли разбанить кого-то из ранее заблокированных
- Заблокированный IP вместе с датой и параметрами отбора заносится в файл лога, /etc/ipban.sh/state.log
- Склонить репозиторий или просто скопировать скрипт
- Создать директорию /etc/ipban.sh
- Создать в ней файл /etc/ipban.sh/ignore_ip.list и внести в него IP которые никак нельзя банить
- Добавить в crontab запись вида /path/to/script , например /etc/ipban.sh/ipban.sh 60 120 , что значит блокировать IP у которых за 60 минут больше чем 120 запросов
- Есть возможность запуска в dry_run режиме. Для этого нужно добавить третьим аргументом 1, например /etc/ipban.sh/ipban.sh 60 120 1
- Добавить в /etc/logrotate.d/ файл logrotate_ipban переименовав его в любое другое произвольное имя
- Возможность фильтрации по UserAgent
- Возможность изменять уровень логгирования - debug - info