ТЕХНИЧЕСКА ПОДДРЪЖКА ЗА УЕБ ХОСТИНГ
     
 

Грешка "412 Precondition Failed" - използване на mod_security2

Mod_security2 е модул на Apache 2, известен още като защитна стена за уеб приложения, който блокира определени заявки до уеб сървъра, като се ползва списък от предварително зададени правила. Тези правила включват блокиране на заявки, свързани с популярни атаки срещу сървъри, както и блокиране на заявки към уязвим софтуер. Тази допълнителна мярка за сигурност е активирана по подразбиране на нашите сървъри, тъй като се стремим да защитим максимално сайтовете на нашите клиенти от хакерски атаки. Възможно е определени легитимни заявки към сървъра също да бъдат блокирани, ако съвпаднат с определено правило. Когато това се случи, посетителят вижда грешката 412 Request Blocked (precondition failed).

Деактивиране на mod_security2 за XML-RPC файлове

Протоколът XML-RPC се използва от някои модули на WordPress, за да комуникира с външни ресурси. Най-популярните примери за това са разширението Jetpack и официалните мобилни приложения на WordPress. Всички IP адреси, използвани от Jetpack, са добавени към списък с разрешени адреси, така че всички заявки от тях към xmlrpc.php файлове няма да бъдат блокирани от mod_security2. За повече информация как да разрешите достъпа до този файл от раздел "WordPress мениджър" в Контролния панел, разгледайте нашата статия Разрешаване на достъп до XML-RPC.

Ако сайтът Ви използва xmlrpc.php файл, но не е базиран на WordPress, Вие можете да деактивирате mod_security2 чрез добавяне на следното съдържание в .htaccess файла на Вашия сайт:

<IfModule security2_module>
SecRuleRemoveById 114
</IfModule>

Ако Вашият сайт няма .htaccess файл, можете лесно да го създадете чрез раздел Файлове на Контролния панел. Имайте предвид, че зададените настройки ще важат само за директорията, в която се намира .htaccess файла, както и нейните поддиректории.

Откриване на mod_security2 правило, което генерира грешка 412

Ако виждате грешка 412 на определена страница от Вашия сайт, можете много лесно да откриете кое mod_security2 правило я предизвиква. Всичко, което трябва да направите, е да прегледате сървърните логове за грешки за Вашия сайт, следвайки тези стъпки:

  1. Отворете хостинг Контролния панел > раздел "Логове" > подраздел "HTTP логове в реално време".
  2. Изчакайте една минута, за да започнат да се показват логовете в реално време в подраздел "HTTP логове в реално време".
  3. Отворете страницата на Вашия сайт, където се показва грешката 412.
  4. Проверете екрана "Логове за грешки" в подраздел "HTTP логове в реално време", където трябва да видите съобщение за грешка, подобно на следното:

    example.com [Fri Aug 13 14:46:30 2021] [error] [pid 9179] apache2_util.c(273): [client YOUR_IP_ADDRESS:59893] [client YOUR_IP_ADDRESS] ModSecurity: Access denied with code 412 (phase 2). Match of "ipMatchFromFile /apache/conf/includes/mod-security-jetpack-ip-whitelist.txt" against "REMOTE_ADDR" required. [file "/apache/conf/includes/mod_security2.conf"] [line "42"] [id "114"] [hostname "example.com"] [uri "/xmlrpc.php"] [unique_id "YRZblp0P33pV7fcztwccfAAAAQE"]

Конкретното mod_security2 правило и файлът, които генерират грешката, ще бъдат показани в полетата id и uri на съобщението за грешка. В "Match" частта от mod_security2 съобщението, ще откриете обяснение на конкретното правило. В дадения по-горе пример достъпът до xmlrpc.php файлът е блокиран от mod_security2 правилото с идентификационен номер (id) 114, защото достъпът до файла е позволен само от IP адресите на Jetpack.

Деактириване на отделно правило

По подразбиране, някои възможно зловредни ботове са блокирани на нашите сървъри с mod_security2 правила. Това е списъкът с някои блокирани ботове, както и техните идентификационни номера (ID):

"Havij" id:350
"^BOT/0.1" id:354
"^Mozilla\/4\.0 \(compatible; MSIE 6\.0; Windows NT 5\.1;?( SV1)?;?\)$" id:373
"^Mozilla\/3\.0 \(compatible; Indy Library\)$" id:392
"sqlmap" id:398
"DatabaseDriverMysql" "id:401"
"BUbiNG" id:406
"MauiBot" id:407
"MJ12bot" id:408
"BLEXBot" id:409
"DotBot" id:410
"MegaIndex" id:412

Ако желаете да разрешите достъпа до сайта Ви от някой от тези ботове, можете да деактивирате съответното mod_security2 правило в .htaccess файл в главната директория на Вашия сайт. Трябва да използвате директивата SecRuleRemoveById, последвана от идентификационния номер (ID) за съответното правило. Например, за да позволите достъп до сайта Ви от бота DotBot (който е блокиран с mod_security2 правило с идентификационен номер 410), трябва да добавите следния код към .htaccess файла на Вашия сайт:

<IfModule security2_module>
SecRuleRemoveById 410
</IfModule>

Деактивиране на mod_security2

Attention

Деактивирането на модула mod_security2 ще намали драстично сигурността на сайта Ви, затова не Ви препоръчваме да го правите. Вместо това, следвайки горните стъпки, разберете кой точно филтър на mod_security2 пречи на изпълнението на Вашия скрипт, след което забранете само конкретното правило.

Като алтернатива можете да спрете функциите на mod_security2 само в директорията, в която се намира скриптът, чието изпълнение предизвиква грешка. За да деактивирате mod_security2, създайте .htaccess файл в съответната директория със следното съдържание:
<IfModule security2_module>
SecRuleEngine Off
SecRequestBodyAccess Off
</IfModule>