LINUX.ORG.RU
ФорумAdmin

Атакуют SPAM боты

 , ,


0

1

В access.log apache много запросов на сервер, они прямо молотят. Иногда сервер ложится от количества запросов.

Как этих ботов заблокировать по их паттерну поведения?

Access log:

2a02:c200:0:10:2:6:4108:1 - - [23/Jan/2017:14:39:05 +0100] "GET /feed/ HTTP/1.1" 200 70123 "http://mysite.com/feed/" "WordPress/4.7.1; http://mysite.com"
114.121.234.148 - - [23/Jan/2017:14:39:05 +0100] "GET /glitter_calendar9.php HTTP/1.1" 404 18385 "http://lovelybabyshop.blogspot.co.id/2009/04/humaira-naura-semarang.html?m=1" "Mozilla/5.0 (Linux; Android 5.0.2; SAMSUNG SM-G530H Build/LRX22G) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/3.3 Chrome/38.0.2125.102 Mobile Safari/537.36"
2a02:c200:0:10:2:6:4108:1 - - [23/Jan/2017:14:39:06 +0100] "GET /feed/ HTTP/1.1" 200 70123 "http://mysite.com/feed/" "WordPress/4.7.1; http://mysite.com"
66.249.93.152 - - [23/Jan/2017:14:39:06 +0100] "GET /glitter_calendar1.php HTTP/1.1" 404 18385 "http://nini213.niniweblog.com/post/76/%D9%88%D8%A7%DA%A9%D8%B3%D9%86-%D8%AF%D9%88-%D9%85%D8%A7%D9%87%DA%AF%DB%8C-%D9%85%D8%AD%D9%85%D8%AF%D9%BE%D8%A7%D8%B1%D8%B3%D8%A7.html" "Mozilla/5.0 (Linux; Android 4.4.2; Lenovo A5500-HV Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.124 Safari/537.36"
2a02:c200:0:10:2:6:4108:1 - - [23/Jan/2017:14:39:09 +0100] "GET /feed/ HTTP/1.1" 200 70123 "http://mysite.com/feed/" "WordPress/4.7.1; http://mysite.com"
8.37.234.61 - - [23/Jan/2017:14:39:09 +0100] "GET /glitter_calendar2.php HTTP/1.1" 404 18385 "-" "Mozilla/5.0 (Linux; U; Android 4.4.2; en-US; SM-G7102 Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 UCBrowser/11.0.8.855 U3/0.8.0 Mobile Safari/534.30"
2a02:c200:0:10:2:6:4108:1 - - [23/Jan/2017:14:39:10 +0100] "GET /feed/ HTTP/1.1" 200 70123 "http://mysite.com/feed/" "WordPress/4.7.1; http://mysite.com"
5.116.144.59 - - [23/Jan/2017:14:39:10 +0100] "GET /glitter_calendar2.php HTTP/1.1" 404 18385 "http://english-city.blogfa.com/9109.aspx" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36"
2a02:c200:0:10:2:6:4108:1 - - [23/Jan/2017:14:39:11 +0100] "GET /feed/ HTTP/1.1" 200 70123 "http://mysite.com/feed/" "WordPress/4.7.1; http://mysite.com"
8.37.230.20 - - [23/Jan/2017:14:39:10 +0100] "GET /glitter_calendar35.php HTTP/1.1" 404 18385 "-" "Mozilla/5.0 (Linux; U; Android 6.0.1; en-US; SM-J106B Build/MMB29Q) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 UCBrowser/11.1.0.882 U3/0.8.0 Mobile Safari/534.30"
2a02:c200:0:10:2:6:4108:1 - - [23/Jan/2017:14:39:13 +0100] "GET /feed/ HTTP/1.1" 200 70123 "http://mysite.com/feed/" "WordPress/4.7.1; http://mysite.com"
183.78.45.70 - - [23/Jan/2017:14:39:13 +0100] "GET /glitter_calendar9.php HTTP/1.1" 404 18385 "http://rainikeikei.blogspot.my/2012_08_01_archive.html" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_2) AppleWebKit/602.3.12 (KHTML, like Gecko) Version/10.0.2 Safari/602.3.12"
2a02:c200:0:10:2:6:4108:1 - - [23/Jan/2017:14:39:15 +0100] "GET /feed/ HTTP/1.1" 200 70123 "http://mysite.com/feed/" "WordPress/4.7.1; http://mysite.com"
36.73.133.1 - - [23/Jan/2017:14:39:15 +0100] "GET /glitter_calendar3.php HTTP/1.1" 404 18385 "http://yunitawijias.blogspot.co.id/2012/12/laporan-biologi-difusi-dan-osmosis_2163.html" "Mozilla/5.0 (Windows NT 6.2; WOW64; rv:37.0) Gecko/20100101 Firefox/37.0"
2a02:c200:0:10:2:6:4108:1 - - [23/Jan/2017:14:39:17 +0100] "GET /feed/ HTTP/1.1" 200 70123 "http://mysite.com/feed/" "WordPress/4.7.1; http://mysite.com"
64.233.172.131 - - [23/Jan/2017:14:39:17 +0100] "GET /glitter_calendar9.php HTTP/1.1" 404 18385 "http://lovelybabyshop.blogspot.co.id/search/label/BabySwing%20I?m=1" "Mozilla/5.0 (Linux; Android 4.2.1; en-us; Nexus 5 Build/JOP40D) AppleWebKit/535.19 (KHTML, like Gecko; googleweblight) Chrome/38.0.1025.166 Mobile Safari/535.19"
2a02:c200:0:10:2:6:4108:1 - - [23/Jan/2017:14:39:19 +0100] "GET /feed/ HTTP/1.1" 200 70123 "http://mysite.com/feed/" "WordPress/4.7.1; http://mysite.com"
168.235.196.94 - - [23/Jan/2017:14:39:18 +0100] "GET /glitter_calendar9.php HTTP/1.1" 404 18385 "http://lifegilacokelat.blogspot.in/" "UCWEB/2.0 (Java; U; MIDP-2.0; Nokia203/20.37) U2/1.0.0 UCBrowser/8.7.0.218 U2/1.0.0 Mobile"
2a02:c200:0:10:2:6:4108:1 - - [23/Jan/2017:14:39:19 +0100] "GET /feed/ HTTP/1.1" 200 70123 "http://mysite.com/feed/" "WordPress/4.7.1; http://mysite.com"
2a02:c200:0:10:2:6:4108:1 - - [23/Jan/2017:14:39:19 +0100] "GET /feed/ HTTP/1.1" 200 70123 "http://mysite.com/feed/" "WordPress/4.7.1; http://mysite.com"
2a02:c200:0:10:2:6:4108:1 - - [23/Jan/2017:14:39:19 +0100] "GET /feed/ HTTP/1.1" 200 70123 "http://mysite.com/feed/" "WordPress/4.7.1; http://mysite.com"
64.233.172.131 - - [23/Jan/2017:14:39:19 +0100] "GET /glitter_calendar9.php HTTP/1.1" 404 18385 "http://lovelybabyshop.blogspot.co.id/search/label/BabySwing%20I?m=1" "Mozilla/5.0 (Linux; Android 4.2.1; en-us; Nexus 5 Build/JOP40D) AppleWebKit/535.19 (KHTML, like Gecko; googleweblight) Chrome/38.0.1025.166 Mobile Safari/535.19"
2a02:c200:0:10:2:6:4108:1 - - [23/Jan/2017:14:39:20 +0100] "POST /wp-cron.php?doing_wp_cron=1485178760.5737669467926025390625 HTTP/1.0" 200 - "-" "WordPress/4.3.4; http://www.designtory.net"
110.136.144.198 - - [23/Jan/2017:14:39:19 +0100] "GET /glitter_calendar9.php HTTP/1.1" 404 18385 "http://adzkiasakura.blogspot.co.id/2012/06/i-s-o-f-l-v-o-n.html" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36"
36.73.133.1 - - [23/Jan/2017:14:39:19 +0100] "GET /glitter_calendar3.php HTTP/1.1" 404 18385 "http://yunitawijias.blogspot.co.id/2012/12/laporan-biologi-difusi-dan-osmosis_2163.html" "Mozilla/5.0 (Windows NT 6.2; WOW64; rv:37.0) Gecko/20100101 Firefox/37.0"

Если их немного, и нагрузку создают относительно небольшую, то можно fail2ban. Если на сайте у тебя нет /feed/, то банить прямо по одному срабатыванию.

Deleted ()
Ответ на: комментарий от Deleted

Нагрузка обычно небольшая ~10%, но раз в пару недель может накрыть так, что все ложится. Оно волнами как-то. Нужно или передергивать MySQL или перезагружать сервер.

dopedopedope ()
Последнее исправление: dopedopedope (всего исправлений: 2)
Ответ на: комментарий от dopedopedope

А что ложится, только апачик с мускулем? Если да, то тогда fail2ban пойдет. Я имел в виду, что он не спасет от ддоса по типу wordpress/xmlrpc.php, когда уже не справляется ядро.

Deleted ()
Ответ на: комментарий от Deleted

Да, ложится mysql. Ресурсов в системе дофига, но они сьедаются полностью этими запросами.

Изначально сервер валился из за атак xmlrpc.php, от них все падало по несколько раз в день. Поставил 404 на этот файл в .htaccess. Проблема ушла. Осталось эта проблемка.

Постоянно пялиться в логи смысла нет, т.к. обычно полет ровный. Блокировать ручками по ip смысла не вижу. Хосты разные.

dopedopedope ()
Последнее исправление: dopedopedope (всего исправлений: 1)

1. Можно на iptables собрать конечный автомат (ipset, iprecent), который будет банить при превышении порога (не просечет keep-alive).
2. Можно в nginx лимиты выставить

Обычно этого хватает.

Vit ★★★★★ ()
Ответ на: комментарий от dopedopedope

Да, ложится mysql.

Ну, здесь явно не ботах проблема. Скажите им спасибо за нагрузочное тестирование.

int13h ★★★★★ ()
Ответ на: комментарий от dopedopedope

Настрой nginx c фильтрами. Это проще и тебе хватит. С фаерволом надо хорошо вникать что делаешь, чтобы лишнего не выпилить навсегда (например прокси оперы).

Vit ★★★★★ ()
Ответ на: комментарий от dopedopedope

Создал вот такой кастом фильтр:

[Definition]

failregex = ^<HOST> .*glitter_calendar.*$

ignoreregex =

По идее, он должен убирать все, попадающее под маску *glitter_calendar.*

Вроде работает. За 30 минут 45 хостов забанилось.

Status for the jail: my_filter
|- Filter
|  |- Currently failed: 21
|  |- Total failed:     117
|  `- File list:        /var/log/mysite.com_access_log
`- Actions
   |- Currently banned: 45
   |- Total banned:     45
dopedopedope ()

тебе кроме fail2ban надо ещё настраивать систему. не должен мускуль или апач сервер съедать насмерть. ограничь юзеров и настрой количество коннектов и т.д.

Iron_Bug ★★★★★ ()
Ответ на: комментарий от Deleted

Fail2ban - оказывается крутая штука, но она становится довольно тормозной, когда блочится много хостов, перестартовывает около 10-минут.

В общем, менее чем за сутки забанилось: 2983 хоста по маске *glitter_calendar*. Не знаю, много это или мало. Какой-то китайский ботнет. Заходил по линкам, там некие фейковые блоги маленьких девочек, с кучей вырвиглазной анимации вплоть до курсора.

Теперь дальше изучаю лог и вижу, что обращения к /feed/ идут только с 2a02:c200:0:10:2:6:4108:1. Это на ip v6 похоже, не? Как-то странно выглядит, местами по 2 или одной цифре разделены ":". Его можно как-то заблокировать?

Понятное дело, что нужно тьюнить MySQL. Проверял утилитой mysqltuner и подкручивал в соответствии с лучшими практиками.

Но проблема реально во вредоносном трафике, т.е. запросы с 3000 хостов на сервер создают менее 10% нагрузки. А потом приходит волна, которая создает такую нагрузку, что консоль просто замерзает.

dopedopedope ()
Последнее исправление: dopedopedope (всего исправлений: 1)
Ответ на: комментарий от dopedopedope

Еще более глубокий когнитивный диссонанс вызывает лог ошибок. Выглядит довольно подозрительно, как будто через плагин statpress идут запросы в базу данных без использования пароля:

[Tue Jan 24 18:59:36 2017] [warn] [client 37.129.99.138] mod_fcgid: stderr: PHP Warning:  mysql_real_escape_string(): A link to the server could not be established in /home/mysite/public_html/wp-content/plugins/daily-stat/statpress.php on line 266, referer: http://english-city.blogfa.com/post-643.aspx
[Tue Jan 24 18:59:36 2017] [warn] [client 2a02:c200:0:10:2:6:4108:1] mod_fcgid: stderr: PHP Warning:  mysql_real_escape_string(): Access denied for user 'mysite'@'localhost' (using password: NO) in /home/mysite/public_html/wp-content/plugins/daily-stat/statpress.php on line 262, referer: http://mysite.com/feed/
dopedopedope ()
Последнее исправление: dopedopedope (всего исправлений: 1)
Ответ на: комментарий от dopedopedope

Как-то странно выглядит, местами по 2 или одной цифре разделены ":"

Это чтобы 0001:0002 не писать

Его можно как-то заблокировать?

Пишут, что не раньше 0.10 будет поддержка ipv6. Можешь заюзать ip6tables, если такой адрес один.

2983 хоста

Отсортируй и бань подсети, откуда больше всего адресов (если, конечно, не жалко посетителей из Китая). Подсети можно взять из whois.

перестартовывает около 10-минут.

Тут бы подошел ipset с таймаутом, но надо заставить fail2ban не писать в свою sqlite-базу

mysql_real_escape_string(): A link to the server could not be established

max_connections превышен, скорее всего. Прямая дорога к разборкам с базой, в общем. Запросы не должны так вешать субд.

mysql_real_escape_string(): Access denied for user 'mysite'@'localhost'

Нашел вот это: https://wordpress.org/support/topic/mysql-errors-on-all-websites-using-statpr...

Deleted ()
Ответ на: комментарий от dopedopedope

Теперь дальше изучаю лог и вижу, что обращения к /feed/ идут только с 2a02:c200:0:10:2:6:4108:1. Это на ip v6 похоже, не? Как-то странно выглядит, местами по 2 или одной цифре разделены ":". Его можно как-то заблокировать?

Исходя из вашего вопроса, а вам вообще ipv6 там нужен?
Если нет, то отключить.
Если да, можно воспользоваться iptables limit/connlimit, не то что бы сильно поможет, но сократить кол-во с одного адреса вполне реально, т.к. v6 мы рассматриваем как одного клиента а не кучу клиентов после нат.

anc ★★★★★ ()
Ответ на: комментарий от Vit

Толку ноль в общем, если банить через fail2ban. Нагрузка не падает, а блочатся все новые и новые хосты. Как будто они по редиректу откуда-то приходят случайно натыкаясь на него.

Думаю попробовать в apache настроить mod rewrite. Чтобы показывало 404 при запросе по маске.

dopedopedope ()
Последнее исправление: dopedopedope (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.