
Nginx: блокировка плохих ботов, спам-рефереров, сканеров уязвимостей, User-Agents, вредоносного ПО, рекламного ПО, программ-вымогателей и вредоносных сайтов, с защитой от DDoS, блокировкой детектора тем Wordpress и тюрьмой Fail2Ban для повторных нарушителей
| РЕПО | СТАНЬТЕ СПОНСОРОМ |
|---|---|
| Ваш логотип и ссылка на ваш домен появятся здесь, если вы станете спонсором. Просто напишите мне на [email protected], если хотите спонсировать этот проект, так как ЮАР пока не поддерживается в программе спонсорства Github. | |
| Помогите поддержать меня на https://ko-fi.com/mitchellkrog |
Не используете Nginx? Смотрите
Пожалуйста, убедитесь, что вы подписаны на уведомления Github, чтобы получать оповещения об обновлении блокировщика или о любых важных или критически важных (потенциально ломающих) изменениях.
Это наш новый предпочтительный способ установки, который теперь выполняется через набор shell-скриптов, добавленных в этот репозиторий и поддерживаемых Stuart Cardall @itoffshore, одним из сопровождающих пакетов Alpine Linux.
Приведённые ниже инструкции описывают быстрый и безболезненный процесс установки, который загружает все необходимые файлы для блокировщика, а скрипты добавляют необходимые include в ваши файлы nginx.conf и nginx .vhost. Скрипт установки предполагает, что ваши конфигурационные файлы 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. Похоже, у некоторых людей возникают проблемы при использовании метода http challenge, но можно подтвердить, что webroot работает безупречно. На данный момент мы не уверены, является ли проблема метода http-01 багом 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
Это покажет вам следующий вывод изменений, которые будут внесены
**(ПРИМЕЧАНИЕ: это только DRY-RUN, изменения не были внесены)**```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 для просмотра опций.
Теперь запустите скрипт install с параметром -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 можно добавлять в ваш настраиваемый файл whitelits-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 во все ваши файлы vhost.
Этот сценарий setup-ngxblocker предполагает, что все ваши файлы vhost, расположенные в /etc/nginx/sites-available, имеют расширение .vhost. Рекомендуется, чтобы все ваши конфигурационные файлы vhost заканчивались расширением .vhost, но если вы предпочитаете оставить то, что у вас уже есть, например .conf, вы можете просто изменить запуск setup-ngxblocker, используя параметр `-e` для указания расширения, которое вы используете для ваших файлов vhost.
Например, если ваши файлы vhost заканчиваются на .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 можно добавить в ваш настраиваемый файл whitelits-ips.conf, расположенный в /etc/nginx/bots.d/whitelist-ips.conf.
Что сделал этот установочный скрипт: он просто добавил следующие include-инструкции в ваши файлы .vhost, а также добавляет /etc/nginx/conf.d/* в include-инструкции в nginx.conf (если этого ещё нет в 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", а затем в самом конце globalblacklist включаются в белый список — именно такой порядок загрузки — после чего 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).
ошибочные записи или любые другие проблемы — через систему issues, и они будут расследованы и при необходимости удалены. Я очень быстро реагирую на проблемы пользователей и помогал бесчисленным пользователям днями напролёт наладить работу их блокировщика ботов. Можно сказать, что я сумасшедший (спорно), но я люблю помогать людям и не игнорирую проблемы или людей, у которых не получается заставить это работать.
Многие списки добавляют забавные домены в 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-agent'ов из файлов журналов конкретного сайта. Это пример только одного cron-задания для одного сайта. Настройте несколько таких заданий для каждого сайта, который хотите отслеживать. Вот cron, который запускается в 8:00 каждое утро и присылает мне урезанный журнал рефереров. Под «урезанным» я подразумеваю, что домен сайта и другие рефереры, такие как Google и Bing, удаляются из результатов. Конечно, в примерах ниже вы должны изменить имя файла журнала, имя домена и свой адрес электронной почты. Второе cron-задание для сбора user-agent'ов не удаляет никакие рефереры, но вы можете добавить эту функцию, если хотите, скопировав оператор 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-agent'ов в 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-Agent'ов, посетивших ваш сайт за последние 24 часа, что помогает выявлять любые недобросовестные или подозрительные строки User-Agent.
************************************************
## БЛОКИРОВКА АГРЕССИВНЫХ БОТОВ НА УРОВНЕ БРАНДМАУЭРА С ПОМОЩЬЮ 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-agent'ов на ваши сайты.
************************************************
## ВЕРСИИ .htaccess ДЛЯ ТЕХ, КТО НЕ МОЖЕТ ИСПОЛЬЗОВАТЬ ЭТОТ ПОЛНЫЙ БЛОКИРОВЩИК?
Многие люди находятся во власти своей хостинговой компании и не имеют root-доступа к серверу, работающему за их веб-сайтом.
Если это ваша ситуация, ознакомьтесь с автоматически генерируемыми .htaccess-версиями блокировщика спам-рефереров, которые можно найти в <a href="https://github.com/mitchellkrogza/apache-ultimate-bad-bot-blocker/tree/master/.htaccess">этом репозитории</a>. Этот метод .htaccess (ТОЛЬКО ДЛЯ САЙТОВ APACHE) поможет вам не пускать на ваш сайт все спам-рефереры из этого блокировщика.
Это упоминается здесь потому, что многие люди, использующие системы CPanel, думают, что работают за сервером Nginx, но на самом деле работают на Apache-сервере, стоящем за Nginx Proxy Server. .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
Настоящим предоставляется бесплатное разрешение любому лицу, получившему копию
этого программного обеспечения и связанных с ним файлов документации («Программное Обеспечение»), использовать
Программное Обеспечение без ограничений, включая, помимо прочего, права
на использование, копирование, изменение, объединение, публикацию, распространение, сублицензирование и/или продажу
копий Программного Обеспечения, а также разрешение лицам, которым предоставляется
Программное Обеспечение, делать это при соблюдении следующих условий:
Вышеуказанное уведомление об авторских правах и данное уведомление о разрешении должны быть включены во все
копии или значительные части Программного Обеспечения.
ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, ЯВНЫХ ИЛИ
ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ, ГАРАНТИЯМИ ТОВАРНОЙ ПРИГОДНОСТИ,
СООТВЕТСТВИЯ ОПРЕДЕЛЁННОМУ НАЗНАЧЕНИЮ И ОТСУТСТВИЯ НАРУШЕНИЙ ПРАВ. НИ ПРИ КАКИХ ОБСТОЯТЕЛЬСТВАХ
АВТОРЫ ИЛИ ПРАВООБЛАДАТЕЛИ НЕ НЕСУТ ОТВЕТСТВЕННОСТИ ПО КАКИМ-ЛИБО ИСКАМ, ЗА УЩЕРБ ИЛИ ПО ИНЫМ
ОБЯЗАТЕЛЬСТВАМ, БУДЬ ТО В РАМКАХ ДОГОВОРА, ДЕЛИКТА ИЛИ ИНЫМ ОБРАЗОМ, ВОЗНИКАЮЩИМ ИЗ,
ВНЕ ИЛИ В СВЯЗИ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ ИЛИ ИСПОЛЬЗОВАНИЕМ ИЛИ ИНЫМИ ДЕЙСТВИЯМИ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ.