
Nginx: блокировка плохих ботов, спам-рефереров, сканеров уязвимостей, User-Agents, вредоносного ПО, рекламного ПО, программ-вымогателей и вредоносных сайтов, с защитой от DDoS, блокировкой детектора тем Wordpress и тюрьмой Fail2Ban для повторных нарушителей
| REPO | СТАНЬТЕ СПОНСОРОМ |
|---|---|
| Ваш логотип и ссылка на ваш домен появятся здесь, если вы станете спонсором. Просто напишите мне на [email protected], если вы хотите спонсировать этот проект, так как Южная Африка пока не поддерживается программой спонсорства Github. | |
| Помогите поддержать меня на https://ko-fi.com/mitchellkrog |
Не используете Nginx? Смотрите
Пожалуйста, убедитесь, что вы подписаны на уведомления Github, чтобы получать уведомления об обновлениях блокировщика или о любых важных или критически важных (потенциально ломающих) изменениях.
Это наш новый предпочтительный метод установки, который теперь выполняется с помощью набора shell-скриптов, добавленных в этот репозиторий и поддерживаемых Stuart Cardall @itoffshore, одним из мейнтейнеров пакетов Alpine Linux.
Инструкции ниже предназначены для быстрого и безболезненного процесса установки, который загружает все необходимые файлы для блокировщика, а скрипты включают добавление необходимых include в ваш nginx.conf и файлы .vhost nginx. Установочный скрипт предполагает, что ваши конфигурационные файлы vhost находятся в /etc/nginx/sites-available/ и каждый конфигурационный файл vhost заканчивается расширением .vhost
Инструкции по ручной установке см. - Пожалуйста, смотрите: https://github.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/blob/master/MANUAL-CONFIGURATION.md
setup-ngxblocker, install-ngxblocker и update-ngxblocker могут быть настроены с пользовательскими путями установки / обновления из командной строки. (См. Шаг 11 инструкций, чтобы узнать, как использовать эти скрипты с нестандартными расположениями Nginx)
Запустите любой из скриптов setup, install или update с параметром --help или -h, чтобы просмотреть доступные опции.
ПОЖАЛУЙСТА, ОБРАТИТЕ ВНИМАНИЕ: Для тех, кто использует SSL-сертификаты Let's Encrypt, предпочтительным и 100% рабочим методом является использование Webroot Authenticator Method. Похоже, есть некоторые проблемы у людей, использующих метод http challenge, но могу подтвердить, что webroot работает безупречно. Мы пока не уверены, является ли метод http-01 challenge ошибкой certbot или nginx.
Сообщения о дублирующихся сетях от Nginx — это НЕ баг, и их нельзя исправить; это ожидаемое поведение блокировщика. Ежедневные обновления IP-черных списков приводят к тому, что некоторые известные IP-адреса и диапазоны попадают в черный список old value "1", затем они добавляются в белый список в самом конце globalblocklist, что является порядком загрузки, который затем устанавливает для известных нам хороших IP-адресов новое value "0", тем самым добавляя их в белый список. Так было с первого дня существования блокировщика и так останется. Это простые сообщения [WARN], а не сообщения [EMERG], и они никоим образом не влияют на работу Nginx.
Загрузите install-ngxblocker в ваш каталог /usr/local/sbin/ и сделайте скрипт исполняемым.```sh sudo wget https://raw.githubusercontent.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/master/install-ngxblocker -O /usr/local/sbin/install-ngxblocker sudo chmod +x /usr/local/sbin/install-ngxblocker
Если в вашем дистрибутиве Linux нет wget, вы можете заменить приведённую выше команду wget, используя curl следующим образом:```sh
curl -sL https://raw.githubusercontent.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/master/install-ngxblocker -o /usr/local/sbin/install-ngxblocker
Установите пакет.```sh pkg install www/nginx-ultimate-bad-bot-blocker
Альтернативно можно установить через portmaster:```sh
portmaster www/nginx-ultimate-bad-bot-blocker
Теперь запустите скрипт install-ngxblocker в РЕЖИМЕ ПРОСМОТРА (DRY-MODE), который покажет вам, какие изменения он внесёт и какие файлы загрузит для вас. Это только ПРОБНЫЙ ЗАПУСК (DRY-RUN), поэтому никакие изменения пока не вносятся.
Скрипт install-ngxblocker загружает все необходимые файлы, включая скрипты настройки и обновления.```sh cd /usr/local/sbin sudo ./install-ngxblocker
Это покажет вам вывод изменений, которые будут внесены, следующим образом
**(ПРИМЕЧАНИЕ: это только ПРОБНЫЙ ЗАПУСК, никакие изменения не были внесены)**```text
Checking url: https://raw.githubusercontent.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/master/include_filelist.txt
** Dry Run ** | not updating files | run as 'install-ngxblocker -x' to install files.
Creating directory: /etc/nginx/bots.d
REPO = https://raw.githubusercontent.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/master
Downloading [FROM]=> [REPO]/conf.d/globalblacklist.conf [TO]=> /etc/nginx/conf.d/globalblacklist.conf
Downloading [FROM]=> [REPO]/conf.d/botblocker-nginx-settings.conf [TO]=> /etc/nginx/conf.d/botblocker-nginx-settings.conf
REPO = https://raw.githubusercontent.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/master
Downloading [FROM]=> [REPO]/bots.d/blockbots.conf [TO]=> /etc/nginx/bots.d/blockbots.conf
Downloading [FROM]=> [REPO]/bots.d/ddos.conf [TO]=> /etc/nginx/bots.d/ddos.conf
Downloading [FROM]=> [REPO]/bots.d/whitelist-ips.conf [TO]=> /etc/nginx/bots.d/whitelist-ips.conf
Downloading [FROM]=> [REPO]/bots.d/whitelist-domains.conf [TO]=> /etc/nginx/bots.d/whitelist-domains.conf
Downloading [FROM]=> [REPO]/bots.d/blacklist-user-agents.conf [TO]=> /etc/nginx/bots.d/blacklist-user-agents.conf
Downloading [FROM]=> [REPO]/bots.d/blacklist-ips.conf [TO]=> /etc/nginx/bots.d/blacklist-ips.conf
Downloading [FROM]=> [REPO]/bots.d/bad-referrer-words.conf [TO]=> /etc/nginx/bots.d/bad-referrer-words.conf
Downloading [FROM]=> [REPO]/bots.d/custom-bad-referrers.conf [TO]=> /etc/nginx/bots.d/custom-bad-referrers.conf
REPO = https://raw.githubusercontent.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/master
Downloading [FROM]=> [REPO]/setup-ngxblocker [TO]=> /usr/local/sbin/setup-ngxblocker
Downloading [FROM]=> [REPO]/update-ngxblocker [TO]=> /usr/local/sbin/update-ngxblocker
setup-ngxblocker, install-ngxblocker и update-ngxblocker могут быть настроены с пользовательскими путями установки/обновления из командной строки.
Запустите любой из скриптов setup, install или update с параметром --help или -h, чтобы просмотреть доступные опции.
Теперь запустите скрипт установки с параметром -x, чтобы загрузить все необходимые файлы из репозитория:```sh cd /usr/local/sbin/ sudo ./install-ngxblocker -x
Это даст вам следующий результат:```text
Checking url: https://raw.githubusercontent.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/master/include_filelist.txt
Creating directory: /etc/nginx/bots.d
REPO = https://raw.githubusercontent.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/master
Downloading [FROM]=> [REPO]/conf.d/globalblacklist.conf [TO]=> /etc/nginx/conf.d/globalblacklist.conf...OK
Downloading [FROM]=> [REPO]/conf.d/botblocker-nginx-settings.conf [TO]=> /etc/nginx/conf.d/botblocker-nginx-settings.conf...OK
REPO = https://raw.githubusercontent.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/master
Downloading [FROM]=> [REPO]/bots.d/blockbots.conf [TO]=> /etc/nginx/bots.d/blockbots.conf...OK
Downloading [FROM]=> [REPO]/bots.d/ddos.conf [TO]=> /etc/nginx/bots.d/ddos.conf...OK
Downloading [FROM]=> [REPO]/bots.d/whitelist-ips.conf [TO]=> /etc/nginx/bots.d/whitelist-ips.conf...OK
Downloading [FROM]=> [REPO]/bots.d/whitelist-domains.conf [TO]=> /etc/nginx/bots.d/whitelist-domains.conf...OK
Downloading [FROM]=> [REPO]/bots.d/blacklist-user-agents.conf [TO]=> /etc/nginx/bots.d/blacklist-user-agents.conf...OK
Downloading [FROM]=> [REPO]/bots.d/blacklist-ips.conf [TO]=> /etc/nginx/bots.d/blacklist-ips.conf...OK
Downloading [FROM]=> [REPO]/bots.d/bad-referrer-words.conf [TO]=> /etc/nginx/bots.d/bad-referrer-words.conf...OK
Downloading [FROM]=> [REPO]/bots.d/custom-bad-referrers.conf [TO]=> /etc/nginx/bots.d/custom-bad-referrers.conf...OK
REPO = https://raw.githubusercontent.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/master
Downloading [FROM]=> [REPO]/setup-ngxblocker [TO]=> /usr/local/sbin/setup-ngxblocker...OK
Downloading [FROM]=> [REPO]/update-ngxblocker [TO]=> /usr/local/sbin/update-ngxblocker...OK
Все необходимые файлы теперь загружены в правильные папки на Nginx прямо из репозитория.
УБЕДИТЕСЬ, что вы сделали ваши скрипты настройки и обновления исполняемыми, выполнив следующие две команды. Это важно перед переходом к шагу 4 и далее.```sh sudo chmod +x /usr/local/sbin/setup-ngxblocker sudo chmod +x /usr/local/sbin/update-ngxblocker
**setup-ngxblocker, install-ngxblocker и update-ngxblocker — все они могут быть настроены с указанием пользовательских путей установки / обновления из командной строки.**
**Запустите любой из скриптов setup, install или update с флагом --help или -h, чтобы просмотреть доступные параметры.**
************************************************
<img src="https://raw.githubusercontent.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/master/.assets/step-4.png"/>
Теперь запустите скрипт setup-ngxblocker в РЕЖИМЕ ПРОСМОТРА (DRY-MODE), который покажет вам, какие изменения он внесёт и какие файлы загрузит для вас. Это лишь ПРОБНЫЙ ЗАПУСК (DRY-RUN), поэтому никакие изменения пока не вносятся.```sh
cd /usr/local/sbin/
sudo ./setup-ngxblocker
Это даст вам вывод следующего вида (приведённый ниже вывод предполагает, что ваш файл nginx.conf уже содержит стандартную директиву include для /etc/nginx/conf.d/*) Все известные мне установки Nginx имеют эту стандартную директиву include в файле nginx.conf, который распространяется со всеми версиями.```text Checking url: https://raw.githubusercontent.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/master/include_filelist.txt
** Dry Run ** | not updating files | run as 'setup-ngxblocker -x' to setup files.
INFO: /etc/nginx/conf.d/* detected => /etc/nginx/nginx.conf inserting: include /etc/nginx/bots.d/blockbots.conf; => /etc/nginx/sites-available/mydomain2.com.vhost inserting: include /etc/nginx/bots.d/ddos.conf; => /etc/nginx/sites-available/mydomain2.com.vhost inserting: include /etc/nginx/bots.d/blockbots.conf; => /etc/nginx/sites-available/mydomain1.com.vhost inserting: include /etc/nginx/bots.d/ddos.conf; => /etc/nginx/sites-available/mydomain1.com.vhost
Whitelisting ip: x.x.x.x => /etc/nginx/bots.d/whitelist-ips.conf
Этот скрипт также автоматически добавляет ваш IP в файл whitelist-ips.conf.
Дополнительные IP-адреса или диапазоны IP можно добавить в ваш настраиваемый файл whitelist-ips.conf, расположенный в /etc/nginx/bots.d/whitelist-ips.conf.
**setup-ngxblocker, install-ngxblocker и update-ngxblocker могут быть настроены с указанием пользовательских путей установки / обновления из командной строки.**
**Запустите любой из скриптов setup, install или update с параметром --help или -h, чтобы просмотреть доступные опции.**
************************************************
<img src="https://raw.githubusercontent.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/master/.assets/step-5.png"/>
Теперь запустите скрипт установки с параметром -x, чтобы внести все необходимые изменения в ваш nginx.conf (если требуется), а также добавить требуемые include-директивы во все ваши файлы виртуальных хостов.
Этот скрипт setup-ngxblocker предполагает, что все ваши файлы виртуальных хостов, расположенные в /etc/nginx/sites-available, заканчиваются расширением .vhost. Рекомендуется, чтобы все ваши конфигурационные файлы виртуальных хостов заканчивались расширением .vhost, но если вы предпочитаете оставить то, что у вас уже есть, например .conf, вы можете просто изменить запуск setup-ngxblocker, используя параметр `-e`, чтобы указать расширение, которое вы используете для своих файлов виртуальных хостов.
Например, если ваши файлы виртуальных хостов заканчиваются на .conf, вы измените команду, выполнив setup-ngxblocker с дополнительным параметром командной строки следующим образом:
`sudo ./setup-ngxblocker -x -e conf`
Итак, теперь давайте запустим скрипт установки и позволим ему внести все изменения, необходимые для активации Bot Blocker на всех ваших сайтах.```sh
cd /usr/local/sbin/
sudo ./setup-ngxblocker -x
Вы увидите вывод следующим образом:```text Checking url: https://raw.githubusercontent.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/master/include_filelist.txt
INFO: /etc/nginx/conf.d/* detected => /etc/nginx/nginx.conf inserting: include /etc/nginx/bots.d/blockbots.conf; => /etc/nginx/sites-available/mydomain2.com.vhost inserting: include /etc/nginx/bots.d/ddos.conf; => /etc/nginx/sites-available/mydomain2.com.vhost inserting: include /etc/nginx/bots.d/blockbots.conf; => /etc/nginx/sites-available/mydomain1.com.vhost inserting: include /etc/nginx/bots.d/ddos.conf; => /etc/nginx/sites-available/mydomain1.com.vhost
Whitelisting ip: x.x.x.x => /etc/nginx/bots.d/whitelist-ips.conf
Вы заметите, что он добавил include-директивы во все файлы .vhost на моём тестовом сервере, а также добавил ваш собственный IP-адрес в файл whitelist-ips.conf для вас. Дополнительные IP-адреса или диапазоны IP можно добавить в ваш настраиваемый файл whitelist-ips.conf, расположенный по пути /etc/nginx/bots.d/whitelist-ips.conf.
Что сделал этот скрипт настройки — он просто добавил следующие include-директивы в ваши файлы .vhost за вас, а также добавляет /etc/nginx/conf.d/* в include-директивы в nginx.conf (если его там ещё нет), в противном случае весь скрипт завершится ошибкой.```nginx
# Bad Bot Blocker
include /etc/nginx/bots.d/ddos.conf;
include /etc/nginx/bots.d/blockbots.conf;
setup-ngxblocker, install-ngxblocker и update-ngxblocker могут быть настроены с пользовательскими путями установки / обновления из командной строки.
Запустите любой из скриптов setup, install или update с флагом --help или -h, чтобы просмотреть доступные параметры.
Теперь проверьте вашу конфигурацию nginx
sudo nginx -t
и вы должны увидеть```text nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
************************************************
<img src="https://raw.githubusercontent.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/master/.assets/step-7.png"/>
Теперь просто перезагрузите или перезапустите Nginx, и Bot Blocker немедленно активируется и начнёт защищать все ваши веб-сайты.
`sudo nginx -t && sudo nginx -s reload`
или
`sudo service nginx restart`
Всё, блокировщик активен и защищает ваши сайты от тысяч вредоносных ботов и доменов.
************************************************
<img src="https://raw.githubusercontent.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/master/.assets/step-8.png"/>
Теперь настройте cron для автоматического ежедневного обновления блокировщика, чтобы у вас всегда была самая актуальная защита.
`sudo crontab -e`
Добавьте следующую строку в конец вашего файла crontab. Обратите внимание на добавление параметра командной строки `-e` для указания вашего адреса электронной почты, на который будет отправляться отчёт об обновлении. Разумеется, замените `[email protected]` на ваш реальный адрес электронной почты, иначе вы не получите письмо после обновления скрипта.
`00 22 * * * sudo /usr/local/sbin/update-ngxblocker -e [email protected]`
Это будет обновлять блокировщик каждую ночь в 22:00.
Если вы хотите, чтобы обновления происходили чаще (так как иногда я выпускаю 3–4 обновления в день), вы можете настроить cron на запуск каждые 8 часов, хотя одного раза в день более чем достаточно.
`00 */8 * * * sudo /usr/local/sbin/update-ngxblocker -e [email protected]`
Если вы не хотите получать уведомления по электронной почте после обновления (не рекомендуется на случай, если при перезагрузке Nginx возникнет ошибка EMERG), просто запустите cron следующим образом.
`00 */8 * * * sudo /usr/local/sbin/update-ngxblocker -n`
Если вы предпочитаете отправлять электронные письма через <a href="https://www.mailgun.com/">mailgun</a>, запустите cron так:
`00 22 * * * sudo /usr/local/sbin/update-ngxblocker -g [email protected] -d yourdomain.com -a mailgun api key -f [email protected]`
Всё, блокировщик будет автоматически поддерживать себя в актуальном состоянии, а также перезагружать Nginx после загрузки последней версии файла globalblacklist.conf.
************************************************
<img src="https://raw.githubusercontent.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/master/.assets/step-9.png"/>
Теперь вы можете настроить любой из следующих файлов под свою среду или требования. Эти файлы никогда не изменяются при обновлении с помощью указанного выше скрипта автоматического обновления, поэтому любые ваши настройки здесь никогда не будут перезаписаны во время обновления.```text
/etc/nginx/bots.d/whitelist-ips.conf
/etc/nginx/bots.d/whitelist-domains.conf
/etc/nginx/bots.d/blockbots.conf
/etc/nginx/bots.d/blacklist-domains.conf
/etc/nginx/bots.d/blacklist-user-agents.conf
/etc/nginx/bots.d/blacklist-ips.conf
/etc/nginx/bots.d/bad-referrer-words.conf
/etc/nginx/bots.d/custom-bad-referrers.conf
/etc/nginx/bots.d/ddos.conf
Допустим, по какой-то «непонятной» причине вы действительно хотите заблокировать GoogleBot от доступа к вашему сайту. Вам просто нужно добавить его в файл /etc/nginx/bots.d/blacklist-user-agents.conf, и он переопределит стандартный белый список для GoogleBot. То же самое касается любых других ботов, которые по умолчанию находятся в белом списке.
Все включаемые файлы снабжены комментариями для вашего удобства.
(ПРОВЕРЬТЕ, ЧТО ВСЁ РАБОТАЕТ)
ТЕСТИРОВАНИЕ
Выполните следующие команды по одной из терминала на другом Linux-компьютере, указав своё собственное доменное имя.
❗ замените http://yourdomain.com ❗ в примерах ниже на ваше собственное НАСТОЯЩЕЕ доменное имя ❗
curl -A "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.96 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" -I http://yourdomain.com
curl -A "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" -I http://yourdomain.com
Должен быть ответ 200 OK
curl -A "Xenu Link Sleuth/1.3.8" -I http://yourdomain.com
curl -A "Mozilla/5.0 (compatible; AhrefsBot/5.2; +http://ahrefs.com/robot/)" -I http://yourdomain.com
Должен быть один из следующих ответов об ошибке:
curl -I http://yourdomain.com -e http://100dollars-seo.com
curl -I http://yourdomain.com -e http://zx6.ru
Должен быть один из следующих ответов об ошибке:
Nginx Ultimate Bot Blocker теперь РАБОТАЕТ и ЗАЩИЩАЕТ ваши веб-сайты!!!
❗ замените http://yourdomain.com ❗ в примерах ниже на ваше собственное НАСТОЯЩЕЕ доменное имя ❗
Если вы пользователь Cloudflare и используете CDN/систему кэширования Cloudflare, вам всегда следует отключать CDN Cloudflare (установить серое облако)
Во время тестирования вы получите правильные коды ответов, как показано ниже:
Это сделано намеренно. CDN выполняет свою работу, то есть первый ответ вашего сервера сказал боту «уходи», выдав ему ответ 444 или 443.
Cloudflare кэширует этот ответ, и поэтому при втором тесте вы получите сообщение об ошибке 520 Origin Error.
Во время тестирования блокировщика отключите CDN/систему кэширования, а когда вы будете довольны результатами тестов, снова включите CDN/кэш в вашей рабочей среде, так как вы действительно хотите, чтобы боты получали этот ответ от Cloudflare.
Большинство других CDN-систем, вероятно, будут вести себя так же, поэтому всегда отключайте CDN во время тестирования, чтобы исключить всё, что может помешать вашим тестам. Обязательно снова включите CDN после завершения тестирования!!
После включения CDN Cloudflare протестируйте снова.
Во время тестирования вы получаете
Это означает, что CDN работает.
УСТАНОВКА БЛОКИРОВЩИКА В НЕСТАНДАРТНЫЕ ПАПКИ NGINX
Некоторые люди собирают Nginx самостоятельно, и у них не оказывается стандартных папок nginx в /etc/nginx
Для таких пользователей вы можете запустить install-ngxblocker, setup-ngxblocker и update-ngxblocker, указав расположение вашей папки в командной строке следующим образом.
sudo ./install-ngxblocker -x -c /usr/local/nginx/conf.d -b /usr/local/nginx/bots.d
sudo ./setup-ngxblocker -x -c /usr/local/nginx/conf.d -b /usr/local/nginx/bots.d
sudo ./update-ngxblocker -c /usr/local/nginx/conf.d -b /usr/local/nginx/bots.d -e [email protected]
Это автоматически поместит файлы в указанные вами места, выполнит включения в ваши vhost-файлы, используя ваши пользовательские пути, и когда update-ngxblocker получит новое обновление, он также автоматически перезапишет разделы «Include» внутри файла globalblacklist.conf вашими собственными пользовательскими путями. Снова спасибо Стюарту Кардаллу @itoffshore за его вклад в эти отличные скрипты.
Дублирующиеся сетевые отчёты от Nginx — это НЕ ошибка, и её нельзя исправить; это желаемое поведение блокировщика. Ежедневные обновления IP-чёрных списков приводят к тому, что некоторые известные IP-адреса и диапазоны попадают в чёрный список old value "1", затем они добавляются в белый список в самом конце globalblocklist, что соответствует порядку загрузки, и это устанавливает для IP-адресов, которые мы знаем как хорошие, новое значение value "0", тем самым добавляя их в белый список. Так было с первого дня существования блокировщика, и так останется. Это простые сообщения [WARN], а не сообщения [EMERG], и они никоим образом не влияют на работу Nginx.
(Более 4000 плохих рефереров, спам-рефереров, user-agent'ов, плохих ботов, плохих IP-адресов, сайтов порнографии, азартных игр и кликджекинга, прибыльных SEO-компаний, детекторов тем WordPress — и это число растёт)
Тысячи часов программирования и тестирования были вложены в этот проект, проявите немного любви
Боты пытаются замаскироваться под другое программное обеспечение или веб-сайты, скрывая свой user agent. Их имена user agent'ов могут выглядеть безобидно, даже вполне легитимно.
Например, «^Java», но согласно Project Honeypot, это на самом деле один из самых опасных, НО у множества легитимных ботов в строке user agent есть «Java», поэтому подход многих людей к блокировке «Java» не только невежественен, но и блокирует вполне легитимных краулеров, включая некоторых из Google и Bing, и мне совершенно ясно, что те люди, которые пишут скрипты блокировки ботов, редко когда-либо их тестируют.
Спам-рефереры и спам-доменные имена используют очень хитрые методы, чтобы перепрыгивать с ваших сайтов, запуская очень прибыльные кампании кликджекинга и клик-редиректов, которые показывают рекламу ничего не подозревающим людям, просматривающим веб, или даже внедряют вредоносное ПО, рекламное ПО или программы-вымогатели в их браузеры, которые затем становятся частью их прибыльной сети ботов.
Этот блокировщик ботов включает сотни доменных имён и IP-адресов, которые большинство людей даже не увидят в своих логах Nginx. Это результат того, что все мои сайты работают на SSL и используют Content-Security-Policy (CSP), которая блокирует вещи до того, как они даже достигнут Nginx, и я находил и продолжаю находить одни из худших доменов и ботов.
Огромное количество порнографических, азартных и фейковых новостных веб-сайтов также блокируется этим скриптом, который также быстро растёт.
К сожалению, большинство скриптов блокировки ботов в интернете — это просто скопированные и вставленные скрипты других людей, выдаваемые за собственную работу. Этот был вдохновлён скриптом, созданным https://github.com/mariusv, и я внёс вклад в тот проект, но затем ушёл в совершенно новую компоновку, сильно его почистил и начал с нуля. Теперь это полностью независимый проект. Он чистый, работает и был тщательно протестирован.
Этот список блокировки плохих ботов для nginx предназначен для использования в качестве глобального включаемого файла Nginx и использует директивы Nginx map $http_user_agent, map $http_referer и geo $validate_client.
Таким образом, файл .conf загружается в память Nginx один раз и доступен всем веб-сайтам, которые вы обслуживаете. Вам просто нужно использовать оператор Include в файле конфигурации vhost Nginx.
Прелесть этого в том, что это один центральный файл, используемый всеми вашими веб-сайтами. Это означает, что есть только одно место для внесения изменений, т.е. добавления новых ботов, которые вы обнаруживаете в своих лог-файлах. Любые изменения применяются немедленно ко всем сайтам после простого «sudo service nginx reload». Но, конечно, всегда выполняйте sudo nginx -t, чтобы протестировать любые изменения конфигурации перед перезагрузкой.
Файл крошечного размера. На момент написания этого текста и первого публичного коммита размер файла, включая все комментарии «которые nginx игнорирует», составляет всего 185 кб и уже содержит более 5000 плохих доменов, плохих ботов и плохих IP-адресов. Он настолько лёгкий, что Nginx даже не замечает его присутствия. Он уже содержит тысячи записей — общее количество обновлено в начале этого README.
В отличие от многих других блокировщиков плохих ботов для Nginx и Apache, где люди просто копируют и вставляют списки других, этот список был построен с нуля и тщательно протестирован, и я имею в виду тщательно, уже более 10 месяцев. Он основан на реальных серверных логах, которые отслеживаются ежедневно, и в этот файл почти ежедневно добавляется как минимум 3–10 новых записей.
Он также был тщательно протестирован на ложные срабатывания с помощью месяцев постоянного и регулярного тестирования и мониторинга лог-файлов.
Все веб-сайты, перечисленные в плохих реферерах, проверяются один за другим, прежде чем они вообще добавляются. Простое копирование всего, что выглядит подозрительно в вашем лог-файле, и добавление этого в подобный блокировщик без предварительного просмотра того, что это такое... ну, это, по меньшей мере, глупо.
У Nginx есть замечательная ошибка под названием 444, которая буквально просто обрывает соединение. Все эти правила выдают ответ 444, поэтому, если правило срабатывает, запрашивающий IP-адрес просто не получает ответа, и для них будет казаться, что вашего сервера не существует или он офлайн.
Тест с помощью curl с использованием одной из тестовых команд, описанных в файле /conf.d/globalblacklist.conf, даст простой ответ «curl: (52) Empty reply from server», и это ответ, который получают плохие рефереры и боты.
Для ботов или пауков, которых вы всё ещё хотите допускать, но хотите ограничить частоту их посещений, вы можете использовать встроенные функции ограничения скорости, которые я включил. Файл подробно прокомментирован по всему тексту, так что вы должны разобраться, в противном случае просто напишите мне, если у вас возникнут проблемы.
или, чтобы внести свой вклад своими плохими реферерами, ботами или внести исправления в любые ошибочно заблокированные боты или домены, пожалуйста, сделайте форк копии этого репозитория и отправьте запросы на изменение в отдельные файлы, расположенные здесь, а затем отправьте запрос на изменение (PR).
касательно неверных записей или любых других проблем в системе отслеживания проблем, и они будут расследованы и удалены при необходимости. Я очень быстро реагирую на проблемы пользователей и помог бесчисленному количеству пользователей в течение многих дней подряд настроить их блокировщик ботов. Можно сказать, что я сумасшедший (спорно), но я люблю помогать людям и не игнорирую проблемы или людей с трудностями в настройке этого.
Многие списки в интернете помещают странные домены в свои hosts-файлы. Ваш hosts-файл и DNS не поймут этого. Этот список использует преобразованные домены, которые находятся в правильном DNS-формате, понятном любой операционной системе. Избегайте использования списков, которые не помещают правильно отформатированную структуру домена в свои списки.
Например Домен:
lifehacĸer.com (обратите внимание на K)
на самом деле преобразуется в:
xn--lifehacer-1rb.com
Вы можете выполнить nslookup в любой операционной системе, и он разрешится правильно.
`nslookup xn--lifehacer-1rb.com````xn--lifehacer-1rb.com origin = dns1.yandex.net mail addr = iskalko.yandex.ru serial = 2016120703 refresh = 14400 retry = 900 expire = 1209600 minimum = 14400 xn--lifehacer-1rb.com mail exchanger = 10 mx.yandex.net. Name: xn--lifehacer-1rb.com Address: 78.110.60.230 xn--lifehacer-1rb.com nameserver = dns2.yandex.net. xn--lifehacer-1rb.com text = "v=spf1 redirect=_spf.yandex.net" xn--lifehacer-1rb.com nameserver = dns1.yandex.net.
- Смотрите: https://www.charset.org/punycode для получения дополнительной информации об этом.
************************************************
## ВСЕГДА СЛЕДИТЕ ЗА ТЕМ, ЧТО ВЫ ДЕЛАЕТЕ:
**ОБЯЗАТЕЛЬНО следите за журналами вашего веб-сайта** после внедрения этого. Я предлагаю сначала загрузить это на один сайт и отслеживать его на предмет возможных ложных срабатываний, прежде чем запускать это в производство на всех ваших веб-сайтах.
Не сидите, как страус, засунув голову в песок: быть ответственным оператором сервера и владельцем веб-сайта означает, что вы должны часто проверять свои журналы. Причина, по которой многие из вас вообще оказались здесь, — это то, что вы видели неприятные вещи в своих файлах журналов Nginx.
Также ежедневно проверяйте свои журналы на предмет новых плохих рефереров и строк user-agent, которые вы хотите заблокировать. Ваш лучший источник для пополнения этого списка — ваши собственные журналы сервера, а не мои.
Не стесняйтесь вносить плохие рефереры из ваших собственных журналов в этот проект, отправив Pull Request (PR). Однако вы можете положиться на этот список, чтобы отсеять 99% злоумышленников.
************************************************
## КАК ЕЖЕДНЕВНО ОТСЛЕЖИВАТЬ СВОИ ЖУРНАЛЫ (ЛЕГКИЙ СПОСОБ):
**С огромной благодарностью и признательностью**
https://blog.nexcess.net/2011/01/21/one-liners-for-apache-log-files/
Чтобы ежедневно отслеживать основные рефереры в файлах журналов веб-сайта, используйте следующие простые задания cron, которые будут отправлять вам по электронной почте список основных рефереров / user agents каждое утро из файлов журналов конкретного веб-сайта. Это пример только одного задания cron для одного сайта. Настройте несколько таких заданий для каждого сайта, который хотите отслеживать. Вот cron, который запускается в 8 утра каждое утро и отправляет мне по электронной почте урезанный журнал рефереров. Когда я говорю «урезанный», домен сайта и другие рефереры, такие как Google и Bing, удаляются из результатов. Конечно, вы должны изменить имя файла журнала, имя домена и свой адрес электронной почты в приведенных ниже примерах. Второй cron для сбора User agents не удаляет никакие рефереры, но вы можете добавить эту функцию, если хотите, скопировав оператор awk !~ из первого примера.
##### Cron для ежедневного отслеживания рефереров на Nginx
`00 08 * * * tail -10000 /var/log/nginx/mydomain-access.log | awk '$11 !~ /google|bing|yahoo|yandex|mywebsite.com/' | awk '{print $11}' | tr -d '"' | sort | uniq -c | sort -rn | head -1000 | mail -s "Top 1000 Referers for Mydomain.com" [email protected]`
Это отправляет вам по электронной почте ежедневный список рефереров, используя команду awk для исключения таких доменов, как google, bing и ваше собственное имя домена.
##### Cron для ежедневного отслеживания User Agents на Nginx
`00 08 * * * tail -50000 /var/log/nginx/mydomain-access.log | awk '{print $12}' | tr -d '"' | sort | uniq -c | sort -rn | head -1000 | mail -s "Top 1000 Agents for Mydomain.com" [email protected]`
Это отправляет вам по электронной почте список основных User-Agents, которые посетили ваш сайт за последние 24 часа, что полезно для обнаружения любых мошеннических или подозрительных строк User-Agents.
************************************************
## БЛОКИРОВКА АГРЕССИВНЫХ БОТОВ НА УРОВНЕ БРАНДМАУЭРА С ПОМОЩЬЮ FAIL2BAN:
Я добавил пользовательский фильтр и действие Fail2Ban, которые я написал и которые отслеживают ваши журналы Nginx на предмет ботов, генерирующих большое количество ошибок 444. Эта пользовательская тюрьма для Fail2Ban будет сканировать журналы за 1 неделю и банить нарушителя на 24 часа.
Это очень помогает в отсеивании некоторых повторных нарушителей и предотвращает заполнение ваших файлов журналов ошибками 444.
Смотрите папку Fail2Ban для инструкций по настройке этого замечательного дополнения для Nginx Bad Bot Blocker.
************************************************
## ОСТАНОВКА «ПРИЗРАЧНОГО» СПАМА GOOGLE ANALYTICS:
Простое использование блокатора Nginx не останавливает призрачный реферальный спам Google Analytics, потому что он попадает в Analytics напрямую и не всегда обязательно касается вашего веб-сайта.
Вам следует использовать regex-фильтры в Analytics, чтобы предотвратить призрачный реферальный спам.
Для этого были созданы несколько файлов google-exclude-0*.txt, которые обновляются одновременно с обновлением блокатора Nginx. По мере роста списка будет создаваться больше файлов исключений.
************************************************
## ЧТОБЫ ОСТАНОВИТЬ «ПРИЗРАЧНЫЙ» СПАМ В GOOGLE ANALYTICS, СЛЕДУЙТЕ ПРОСТОМУ ВИЗУАЛЬНОМУ РУКОВОДСТВУ НИЖЕ
Следуйте пошаговым визуальным инструкциям ниже, чтобы добавить эти файлы google-exclude в качестве сегментов на ваш веб-сайт.
<table style="width:100%;margin:0;">
<tr>
<td align="left"><img src="https://raw.githubusercontent.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/master/.assets/google-analytics-ghost-spam-01.jpg" alt="Google Analytics - Adding Segments to Stop Ghost Spam"/></td>
</tr>
<tr>
<td align="left"><img src="https://raw.githubusercontent.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/master/.assets/google-analytics-ghost-spam-02.jpg" alt="Google Analytics - Adding Segments to Stop Ghost Spam"/></td>
</tr>
<tr>
<td align="left"><img src="https://raw.githubusercontent.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/master/.assets/google-analytics-ghost-spam-03.jpg" alt="Google Analytics - Adding Segments to Stop Ghost Spam"/></td>
</tr>
<tr>
<td align="left"><img src="https://raw.githubusercontent.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/master/.assets/google-analytics-ghost-spam-04.jpg" alt="Google Analytics - Adding Segments to Stop Ghost Spam"/></td>
</tr>
<tr>
<td align="left"><img src="https://raw.githubusercontent.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/master/.assets/google-analytics-ghost-spam-05.jpg" alt="Google Analytics - Adding Segments to Stop Ghost Spam"/></td>
</tr>
<tr>
<td align="left"><img src="https://raw.githubusercontent.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/master/.assets/google-analytics-ghost-spam-06.jpg" alt="Google Analytics - Adding Segments to Stop Ghost Spam"/></td>
</tr>
<tr>
<td align="left"><img src="https://raw.githubusercontent.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/master/.assets/google-analytics-ghost-spam-07.jpg" alt="Google Analytics - Adding Segments to Stop Ghost Spam"/></td>
</tr>
</table>
************************************************
## БЛОКИРОВКА СПАМ-ДОМЕНОВ С ПОМОЩЬЮ GOOGLE SEARCH CONSOLE / WEBMASTER TOOLS
(Как использовать файл google-disavow.txt)
Я добавил создание текстового файла Google Disavow под названием google-disavow.txt. Этот файл можно использовать в Google Webmaster Tools, чтобы заблокировать все эти домены как спамные или плохие ссылки. Используйте с осторожностью.
************************************************
## ВЕРСИЯ ROBOTS.txt ДЛЯ ТЕХ, КТО НЕ МОЖЕТ ИСПОЛЬЗОВАТЬ ЭТОТ ПОЛНЫЙ БЛОКИРОВЩИК?
Многие люди находятся во власти своей хостинговой компании и не имеют root-доступа к серверу, работающему за их веб-сайтом. Если это ваша ситуация, ознакомьтесь с автоматически сгенерированным файлом robots.txt, который в некоторой степени поможет вам держать множество плохих ботов и User-Agents подальше от ваших сайтов.
************************************************
## ВЕРСИИ .htaccess ДЛЯ ТЕХ, КТО НЕ МОЖЕТ ИСПОЛЬЗОВАТЬ ЭТОТ ПОЛНЫЙ БЛОКИРОВЩИК?
Многие люди находятся во власти своей хостинговой компании и не имеют root-доступа к серверу, работающему за их веб-сайтом.
Если это ваша ситуация, ознакомьтесь с автоматически сгенерированными версиями .htaccess блокировщика спам-рефереров, которые можно найти в <a href="https://github.com/mitchellkrogza/apache-ultimate-bad-bot-blocker/tree/master/.htaccess">этом репозитории</a>. Этот метод .htaccess (ТОЛЬКО ДЛЯ САЙТОВ APACHE) поможет вам держать все спам-рефереры из этого блокировщика подальше от вашего сайта.
Это упоминается здесь просто потому, что многие люди, использующие системы CPanel, думают, что они находятся за сервером Nginx, но на самом деле работают на сервере Apache, находящемся за прокси-сервером Nginx. .htaccess не работает на сайтах Nginx.
Не используете веб-сервер Nginx? Смотрите [](https://github.com/mitchellkrogza/apache-ultimate-bad-bot-blocker)
************************************************
# ЭТО ФОРКИНГ РАБОТАЕТ !!!
************************************************
## Просто наслаждайтесь тем, что Nginx Bad Bot Blocker может сделать для вас и ваших веб-сайтов.
### И помогите поддержать этот проект
Тысячи часов программирования и тестирования были вложены в этот проект, проявите немного любви
[<img src="https://raw.githubusercontent.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/master/.assets/kofi4.png" alt="Buy me Coffee" width="300"/>](https://ko-fi.com/mitchellkrog)
************************************************
# ВАШ ВЕБ-САЙТ БЫЛ ВЗЛОМАН?
[](mailto:[email protected]) чтобы помочь вам очистить и защитить ваш веб-сайт.
************************************************
### НЕКОТОРЫЕ ДРУГИЕ ПОТРЯСАЮЩИЕ БЕСПЛАТНЫЕ ПРОЕКТЫ
- https://github.com/mitchellkrogza/apache-ultimate-bad-bot-blocker
- https://github.com/mitchellkrogza/Badd-Boyz-Hosts
- https://github.com/mitchellkrogza/Ultimate.Hosts.Blacklist
- https://github.com/mitchellkrogza/Stop.Google.Analytics.Ghost.Spam.HOWTO
- https://github.com/mitchellkrogza/The-Big-List-of-Hacked-Malware-Web-Sites
- https://github.com/mitchellkrogza/fail2ban-useful-scripts
- https://github.com/mitchellkrogza/linux-server-administration-scripts
- https://github.com/mitchellkrogza/Travis-CI-Nginx-for-Testing-Nginx-Configuration
- https://github.com/mitchellkrogza/Travis-CI-for-Apache-For-Testing-Apache-and-PHP-Configurations
- https://github.com/mitchellkrogza/Fail2Ban-Blacklist-JAIL-for-Repeat-Offenders-with-Perma-Extended-Banning
- https://github.com/funilrys/PyFunceble
- https://github.com/funilrys/dead-hosts
- https://github.com/mitchellkrogza/The-Big-List-of-Hacked-Malware-Web-Sites
- https://github.com/mitchellkrogza/Suspicious.Snooping.Sniffing.Hacking.IP.Addresses
- https://github.com/mitchellkrogza/Fail2Ban.WebExploits
************************************************
### ТАКЖЕ ОЗНАКОМЬТЕСЬ С НОВЫМ БОЛЬШИМ СПИСКОМ ВЗЛОМАННЫХ ВРЕДОНОСНЫХ И WORDPRESS ВЕБ-САЙТОВ
Этот репозиторий содержит список всех веб-сайтов, которые я встречаю и которые взломаны вредоносным ПО.
Большинство владельцев сайтов не знают, что их сайты были взломаны и используются для размещения вредоносного ПО.
Ознакомьтесь с ним по адресу: https://github.com/mitchellkrogza/The-Big-List-of-Hacked-Malware-Web-Sites
************************************************
### УВЛЕКАЕТЕСЬ ФОТОГРАФИЕЙ?
Заходите и навестите меня на [mitchellkrog.com](https://mitchellkrog.com) или [Facebook](https://www.facebook.com/MitchellKrogPhotography) или подпишитесь на меня в Twitter <a href='https://twitter.com/MitchellKrog'><img src="https://img.shields.io/twitter/follow/MitchellKrog.svg?style=social&label=Follow" alt='Follow @MitchellKrog'></a>
************************************************
### БЛАГОДАРНОСТИ И УЧАСТНИКИ:
Большое спасибо тем, кто вносит вклад в этот проект.
Многие части скриптов генератора и кода, работающего за этим проектом, были адаптированы из фрагментов сотен источников.
На самом деле так сложно упомянуть всех, но вот несколько ключевых людей, чьи небольшие фрагменты кода помогли мне постоянно внедрять новые функции. Проявите к ним немного любви и ознакомьтесь с некоторыми из их проектов.
- Konstantin Goretzki @konstantingoretzki https://github.com/konstantingoretzki (Улучшенный Regex в фильтре Fail2Ban)
- Stuart Cardall - https://github.com/itoffshore (Скрипты установки, обновления и настройки и мейнтейнер пакетов Alpine Linux)
- Mike van Eckendonk - https://github.com/Eckybrazzz
- Nissar Chababy @funilrys - https://github.com/funilrys/PyFunceble (Отличный скрипт для проверки АКТИВНЫХ, НЕАКТИВНЫХ и ПРОСРОЧЕННЫХ доменных имен)
- Marius Voila https://github.com/mariusv
- Cătălin Mariș https://github.com/alrra
- deformhead https://github.com/deformhead
- bluedragonz https://github.com/bluedragonz
- Alexander https://github.com/shoonois
- Steven Black https://github.com/StevenBlack
- Fail2Ban - https://github.com/fail2ban
- Stevie-Ray Hartog https://github.com/Stevie-Ray
- Sir Athos from StackOverFlow - http://stackoverflow.com/users/2245910/sir-athos (помощь с тегированием и коммитами сборки Travis)
- StackOverflow - http://stackoverflow.com/ (bash-скрипты из сотен вопросов и ответов)
- SuperUser - http://superuser.com/ (фрагменты из различных вопросов и ответов)
Если вы считаете, что ваше имя должно быть здесь, напишите мне.
************************************************
### Написание такого кода занимает много времени!!
Тысячи часов программирования и тестирования были вложены в этот проект, проявите немного любви
[<img src="https://raw.githubusercontent.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/master/.assets/kofi4.png" alt="Buy me Coffee" width="300"/>](https://ko-fi.com/mitchellkrog)
<img src="https://raw.githubusercontent.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/master/.assets/zuko.png"/>
************************************************
# Лицензия MIT
## Copyright (c) 2017 Mitchell Krog - [email protected]
## https://github.com/mitchellkrogza
Настоящим предоставляется бесплатное разрешение любому лицу, получившему копию
этого программного обеспечения и связанных файлов документации («Программное обеспечение»), на использование
Программного обеспечения без ограничений, включая, помимо прочего, права
на использование, копирование, изменение, слияние, публикацию, распространение, сублицензирование и/или продажу
копий Программного обеспечения, а также на разрешение лицам, которым предоставлено
Программное обеспечение, делать это при соблюдении следующих условий:
Вышеуказанное уведомление об авторских правах и данное уведомление о разрешении должны быть включены во все
копии или существенные части Программного обеспечения.
ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, ЯВНЫХ ИЛИ
ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ, ПОМИМО ПРОЧЕГО, ГАРАНТИИ ТОВАРНОЙ ПРИГОДНОСТИ,
СООТВЕТСТВИЯ ОПРЕДЕЛЕННОЙ ЦЕЛИ И ОТСУТСТВИЯ НАРУШЕНИЯ ПРАВ. НИ ПРИ КАКИХ ОБСТОЯТЕЛЬСТВАХ
АВТОРЫ ИЛИ ПРАВООБЛАДАТЕЛИ НЕ НЕСУТ ОТВЕТСТВЕННОСТИ ПО ЛЮБЫМ ИСКАМ, УБЫТКАМ ИЛИ ИНОЙ
ОТВЕТСТВЕННОСТИ, БУДЬ ТО В РАМКАХ ДОГОВОРА, ДЕЛИКТА ИЛИ ИНЫМ ОБРАЗОМ, ВОЗНИКАЮЩИМ ИЗ,
ВНЕ ИЛИ В СВЯЗИ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ ИЛИ ИСПОЛЬЗОВАНИЕМ ИЛИ ИНЫМИ ДЕЙСТВИЯМИ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ.