Как защитить сайт на WordPress от атак через файл xmlrpc.php
Есть у меня сайт, который я делал для моих друзей — oktyabrsky-ufa.ru. Сегодня зашёл в админку ISPManager и наблюдаю на хостинге загрузку процессора на 99-100%. Понимая, что идёт атака на один из сайтов и скоро хостер надаст по шапочке, сразу лезу в ssh решать пробелму.
top показывает, что бешеную нагрузку даёт процесс apache именно от пользователя этого сайта. Возможно конкуренты, возможно просто ищут лазейки в дырявом wordpress, однако не хочется опять остаться со взломанными сайтами. Анализ error.log и фссуыыюдщп выдал следующее:
5.188.62.117 — — [19/Oct/2018:16:15:00 +0500] «POST //xmlrpc.php HTTP/1.0» 200 439 «-» «Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36»
Лог файла access.log
5.188.62.117 — — [19/Oct/2018:16:15:00 +0500] «POST //xmlrpc.php HTTP/1.0» 200 439 «-» «Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36»
5.188.62.117 — — [19/Oct/2018:16:15:00 +0500] «POST //xmlrpc.php HTTP/1.0» 200 439 «-» «Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36»
5.188.62.117 — — [19/Oct/2018:16:15:02 +0500] «POST //xmlrpc.php HTTP/1.0» 200 439 «-» «Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36»
5.188.62.117 — — [19/Oct/2018:16:15:03 +0500] «POST //xmlrpc.php HTTP/1.0» 200 439 «-» «Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36»
5.188.62.117 — — [19/Oct/2018:16:15:03 +0500] «POST //xmlrpc.php HTTP/1.0» 200 439 «-» «Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36»
5.188.62.117 — — [19/Oct/2018:16:15:04 +0500] «POST //xmlrpc.php HTTP/1.0» 200 439 «-» «Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36»
5.188.62.117 — — [19/Oct/2018:16:15:05 +0500] «POST //xmlrpc.php HTTP/1.0» 200 439 «-» «Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36»
5.188.62.117 — — [19/Oct/2018:16:15:05 +0500] «POST //xmlrpc.php HTTP/1.0» 200 439 «-» «Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36»
5.188.62.117 — — [19/Oct/2018:16:15:06 +0500] «POST //xmlrpc.php HTTP/1.0» 200 439 «-» «Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36»
И дураку понятно, что атака идёт через файл xmlrpc.php. Гуглю решение, попутно вспоминая, почему я не отключил эту фичу. Гугл выдаёт, что раньше была возможность отрубить, но сейчас её нет и куча сайтов страдают от этого, а толку от этой фишки почти и нет.
Статья на https://firstvds.ru/technology/xmlrpc даёт понимание проблемы и первое решение — это плагин Disable XML-RPC Pingback.
К сожалению, нагрузка на сервер вообще не снизилась, а значит толку от этого плагина почти нет. Да и к тому же работает он как плагин, то бишь злоумышленники проходят через nginx, затем apache и только потом движок сайта должен сказать — нет. Так что нахер этот плагин!
Второй вариант решения — в .htaccess прописать запрет на доступ к xmlrpc.php примерно таким кодом
<Files «xmlrpc.php»>
добавить в файл .htaccess
Order allow,deny
Deny from all
</Files>
Неплохой вариант, но apache всё равно будет подгружать сервер, значит решать надо на уровне nginx или вообще файервола. Кстати, защита от DDOS-атак в ISPManager тоже никак не помогла, сомнительная штука.
Мысль была настроить редирект на zip-бомбу или какой-либо посторонний ресурс. Но это всё равно даст нагрузку на свой или чужой сайт, хотя сделать редирект на рикролл — это было бы забавно))
На сайте https://www.inmotionhosting.com/support/community-support/server-usage/defending-against-wordpress-xmlrpc-attacks подглядел изящное решение, которое мне очень понравилось.
В nginx прописываем редирект 301 на самого атакующего следующим образом
Redirect 301 /xmlrpc.php http://127.0.0.1
прописать редирект в nginx, например через панельку ISPManager
Я просто ссал кипятком был безумно рад такому решению, пусть атакующий сам себе компуктер загрузит на 100% хе-хе.
В итоге нагрузка на сервер сразу упала. Всем советую!
P.S. ещё есть мысль, что так делать нельзя. Не в том смысле, что обманывать хакеров, а в том что, запрещать xmlrpc.php. Хотя кому он нужен?)
Отблагдарить автора статьи также можно переводом, +100 вам в карму!
apache nginx redirect wordpress xmlrpc.php взлом лайфхак хакеры