- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Маркетинг для шоколадной фабрики. На 34% выше средний чек
Через устранение узких мест
Оксана Мамчуева
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
У меня сильно нашпигованный конфиг Nginx ибо я очень не люблю плохих ботов.
одним из условий в конфиге я собираю в отдельный лог запросы от ботов которые косят юзерагеном под поисковых ботов, но таковыми не являются.
Но так как подсети поисковиков могут измениться хотелось бы настроить автоматическую проверку к примеру топ 10 IP из этого лога.
Прошу вас - помогите написать bash скрипт для автоматизации проверки.
К примеру такой командой
я получаю такой вывод (слева кол-во запросов, справа IP)
100 95.213.246.202
91 95.213.246.204
61 82.202.205.84
56 82.202.205.82
27 13.66.139.0
11 23.103.64.39
8 46.243.173.199
8 178.57.65.193
7 193.93.195.233
7 178.57.65.103
Далее логику работы я вижу такой - каждый из этих IP проверяем командой Host, например
Host 202.246.213.95.in-addr.arpa. not found: 3(NXDOMAIN)
и т.д. Куда то записываем эти данные, в лог какой-то. Далее сканируем этот лог на наличие в нем
google.com
Так как IP ботов яндекса и гугла возвращает
197.113.9.37.in-addr.arpa domain name pointer 37-9-113-197.spider.yandex.com.
host 66.249.76.57
57.76.249.66.in-addr.arpa domain name pointer crawl-66-249-76-57.googlebot.com.
Если при сканировании лога нашли Яндекс или Гугл - шлем уведомление админу.
---------- Добавлено 31.08.2018 в 21:36 ----------
Начало вроде сам написал :))
cat /var/log/nginx/access.zakos_pod_good_bot.log | awk '{if ($9=="503") {print $1}}' | sort | uniq -c | sort -nr | head > dns.txt
только наверное нужно как-то убрать первую цифру (кол-во запросов), чтобы только IP остался
1. Рекомендации по оптимизации неоптимального в существующем принимаются? Потому как число пайпов в показанном однострочнике можно радикально сократить за счет одного вызова sort
| sort -nru
+ я бы не стал резать head а оставил все IP
2. Если написалось то, что написалось, в awk - какая проблема этот лог так же по-простому прогнать опять через еще один скриптец, который будет вызывать host и процессить полученное (ну или просто print и все пайпить в grep - это по вкусу)?
Run command piping the output either into $0 or var
+
Prints expressions. Each expression is separated by the value of the OFS variable. The output record is terminated with the value of the ORS variable.
print expr-list >file
Prints expressions on file. Each expression is separated by the value of the OFS variable. The output record is terminated with the value of the ORS variable.
"Что пробовал?" и "Что не получилось" - стандартный вопрос
Сегодняшний лог access.zakos_pod_good_bot.log на данный момент содержит 3413 (!!!) записей.
Я не вижу смысла делать столько запросов, мне бы вполне хватило просканировать топ 10
про sort -nru не понял, попробовал запрос с ним, разницы не увидел.
Яж не кодер и 90% написанного вам не понял :((
---------- Добавлено 31.08.2018 в 22:00 ----------
просто запрос
вывел непоятные IP не те что изначатльный запрос сортировал
---------- Добавлено 31.08.2018 в 22:16 ----------
пока остановился на этом
#!/bin/bash
cat /var/log/nginx/access.zakos_pod_good_bot.log | awk '{if ($9=="503") {print $1}}' | sort | uniq -c | sort -nr | head | awk '{print $2}' > dns.txt
как теперь проверять то что записалось в dns.txt ?
пару часов погуглил и продвинулся еще дальше, вот что имею на данный момент
cat /var/log/nginx/access.zakos_pod_good_bot.log | awk '{if ($9=="503") {print $1}}' | sort | uniq -c | sort -nr | head | awk '{print $2}' > dns.txt
cat dns.txt | while read line
do
host $line >> result.txt
done
в файл result.txt получаю вывод
Host 202.246.213.95.in-addr.arpa. not found: 3(NXDOMAIN)
204.246.213.95.in-addr.arpa domain name pointer angry.io.
Host 0.139.66.13.in-addr.arpa. not found: 3(NXDOMAIN)
Host 84.205.202.82.in-addr.arpa. not found: 3(NXDOMAIN)
82.205.202.82.in-addr.arpa domain name pointer as3.angry.io.
Host 53.3.216.91.in-addr.arpa. not found: 3(NXDOMAIN)
Host 31.183.181.95.in-addr.arpa. not found: 3(NXDOMAIN)
Host 183.90.243.91.in-addr.arpa. not found: 3(NXDOMAIN)
Host 13.90.243.91.in-addr.arpa. not found: 3(NXDOMAIN)
Host 136.3.216.91.in-addr.arpa. not found: 3(NXDOMAIN)
теперь пытаюсь понять как его просканировать на наличие слов yandex и google и если нашло - то отправлять админу уведомление
как то так надо..
---------- Добавлено 01.09.2018 в 10:29 ----------
почти дописал :)))
cat /var/log/nginx/access.zakos_pod_good_bot.log | awk '{if ($9=="503") {print $1}}' | sort | uniq -c | sort -nr | head | awk '{print $2}' > dns.txt
cat dns.txt | while read line
do
host $line >> result.txt
done
FILEPATH=gootbot.log
egrep -w 'yandex|google' result.txt > $FILEPATH
if [ -s $FILEPATH ]
then
mail -s 'Возможно хороший бот' 444@gmail.com < $FILEPATH
fi
Но почему то письмо не приходит :( (я там специально добавил строку с яндексом для проверки, лог gootbot.log создался)
---------- Добавлено 01.09.2018 в 10:58 ----------
Понял на сервере не настроена почта, тут ошибка /var/log/exim4
Если не хочется пользоваться специализированным сервисом для защиты от ботов, типа BotGuard, а клепать свое "на коленке", есть модуль для nginx который решает эту задачу:
https://www.nginx.com/resources/wiki/modules/rdns/
Если у кого-то из читающих тоже будет проблема с почтой, мне помогло это решение http://blog.asidorov.name/2013/10/gmail-debian-exim4.html
# vim /etc/exim4/exim4.conf.template
Над строкой begin acl необходимо добавить такую запись:
disable_ipv6 = true
И все, перезагружаем почтовый сервер:
# service exim4 restart
и там еще небольшая обшибочка в скрипте, нужно очищать файл перед записью
cp /dev/null result.txt
cat dns.txt | while read line
do
host $line >> result.txt
done
...
Если у кого-то из читающих тоже будет проблема с почтой, мне помогло это решение http://blog.asidorov.name/2013/10/gmail-debian-exim4.html
Если ошибка была именно такая как по ссылке, значит у Вас на сервере включен и работает IPv6. В таком случае лучше попросить хостера прописать для v6-адреса реверсное имя в DNS и почтовый сервер будет работать одновременно по двум протоколам.
Если ошибка была именно такая как по ссылке, значит у Вас на сервере включен и работает IPv6. В таком случае лучше попросить хостера прописать для v6-адреса реверсное имя в DNS и почтовый сервер будет работать одновременно по двум протоколам.
И затем почтовый сервер будет атакован по ipv6 тысячами в час коннектами нехороших людей а fail2ban стабильной версии ipv6 банить не умеет.
Возможно кому-то будет полезно.
Это улов всего 1 дня.
1000 IP которые использовали юзер агенты поисковых ботов, сканировали страницы не загружая стили и картинки, но поисковыми ботами не являются.
P.S. среди этих говноботов нашелся всего 1 нормальный (его я убрал из списка) бот майл ру.
Возможно кому-то будет полезно.
Это улов всего 1 дня.
1000 IP которые использовали юзер агенты поисковых ботов, сканировали страницы не загружая стили и картинки, но поисковыми ботами не являются.
P.S. среди этих говноботов нашелся всего 1 нормальный (его я убрал из списка) бот майл ру.
Не хотите написать понятную инструкцию по этому поводу?
Какие скрипты были использованы, какие настройки, выборки и т.д.
baas, дык все выше написано