Рейтинг:1

Как разрешить удаленное имя хоста через DNS при использовании Nginx и ModSecurity?

флаг br

Вопрос mod_security с OWASP CRS: пользовательское правило для внесения googlebot в белый список предоставляет следующее правило в качестве ответа для проверки имени хоста клиента:

SecRule REMOTE_HOST «@rx google(bot|)\.com$» «id:50000,nolog,allow»

Это правило предназначалось для использования в ModSecurity с Apache и требовало директивы HostnameLookups On настроен на апаче. РУКОВОДСТВО ПО MODSECURITY говорит:

УДАЛЕННЫЙ УЗЕЛ
Если для директивы Apache HostnameLookups установлено значение On, эта переменная будет содержать удаленное имя хоста, разрешенное через DNS. Если для директивы установлено значение Off, эта переменная будет содержать удаленный IP-адрес. адрес (такой же, как REMOTE_ADDR). Возможное использование этой переменной включает отказ от известных плохих клиентских хостов или сетевых блоков или, наоборот, разрешить авторизованным хостам вход.

При использовании Nginx в качестве обратного прокси-сервера без Apache есть способ сделать УДАЛЕННЫЙ УЗЕЛ вернуть имя хоста, разрешенное через DNS?

Рейтинг:0
флаг cz

Удаленный IP-адрес уже находится в переменной nginx. $remote_addr и переменная ModSecurity REMOTE_ADDR. В справочном руководстве сказано:

REMOTE_ADDR

Эта переменная содержит IP-адрес удаленного клиента.

SecRule REMOTE_ADDR "@ipMatch 192.168.1.101" "id:35"

Вы должны использовать REMOTE_ADDR здесь (и, вероятно, пользователи Apache также должны).

Ronaldo avatar
флаг br
Спасибо, Майкл Хэмптон. Но мне нужен DNS, а не IP-адрес. Я уже получаю IP-адрес из-за отсутствия опции «HostnameLookups» в Nginx.
Michael Hampton avatar
флаг cz
@Ronaldo Я полагаю, что под «DNS» вы на самом деле подразумеваете _hostname_? Видимо, я как-то пропустил последнюю часть вашего поста. Я думаю, что это можно сделать, включив какой-нибудь Lua для поиска DNS и выполнив его выборочно (вы не можете выполнять поиск имени хоста при каждом запросе, потому что это абсолютно снизит вашу производительность). Я посмотрю, смогу ли я написать что-нибудь позже.
Ronaldo avatar
флаг br
Я ценю его. Но прежде чем вы попытаетесь что-то написать, не могли бы вы сказать мне, есть ли лучший вариант добавить ботов Google в белый список? Я новичок, когда дело доходит до Nginx и ModSecurity, и я мог просто пропустить некоторые базовые настройки. Я спросил о получении имени хоста, потому что это был единственный метод, который я мог найти в Интернете, и, по-видимому, он больше не применяется (как вы сказали, поиск имени хоста снижает производительность).
Michael Hampton avatar
флаг cz
@ Роналду Не совсем. Даже у Google нет лучших решений в документации по [проверке робота Google](https://developers.google.com/search/docs/advanced/crawling/verifying-googlebot). Поиск требует времени, но нет необходимости делать это для любых запросов, в строке User-Agent которых нет Googlebot. И мне все равно, заставлять ли бота ждать.
Ronaldo avatar
флаг br
Я понимаю. Итак, идея состоит в том, чтобы проверить, есть ли Googlebot в строке User-Agent, и только потом проверить имя хоста.
Ronaldo avatar
флаг br
Здравствуйте, Майкл Хэмптон. Я научился пропускать правило, если оно не соответствует критериям (если User-Agent не google), теперь мне нужно знать, как получить имя хоста из IP-адреса запроса. Не могли бы вы дать мне какую-нибудь подсказку о сценарии Lua, о котором вы упомянули?

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.