Как ограничить определенного клиента, основываясь на имени его хоста, с помощью ModSecurity SecRule?

Я пытаюсь ограничить доступ определенных хостов (например, AWS) к моему веб-серверу. Я пробовал различные вариации этого, но это не работает.

# Block AWS
SecRule REQUEST_HEADERS:Host ".*\.amazonaws\.com.*" \
"msg:'AWS blocked',id:10007,log,t:lowercase,drop,phase:1"

Я пробовал:

SecRule REQUEST_HEADERS:Host ".*\.amazonaws\.com.*"
SecRule REQUEST_HEADERS:Host "@rx ^.*\.amazonaws\.com.*$"
SecRule REQUEST_HEADERS:Host "@contains amazonaws.com"

Ничего из вышеперечисленного не работает, поэтому я прихожу к выводу, что что-то не так с синтаксисом моего запроса заголовка. Вот пример строки хоста, которую я пытаюсь подобрать для исключения: Host: ec2-12-34-56-78.compute-1.amazonaws.com

0
задан 29 April 2021 в 15:26
2 ответа

Итак, из того, что я понял, и как заметил @FarhadSakhaei, REQUEST_HEADERS: Host относится к запрошенному хосту, а не к удаленному хосту. Это странно, потому что REQUEST_HEADERS: User-Agent действительно возвращает пользовательский агент клиента.

Вместо этого будет работать SecRule REMOTE_HOST с директивой Apache HostnameLookups, установленной на «On».

например.

SecRule REMOTE_HOST "bad\.host\.com$" "msg:'Bad host blocked',id:99999,log,drop,phase:1"

Если HostnameLookups имеет значение «Off», REMOTE_HOST вернет IP-адрес запрашивающего клиента. Очевидно, ожидается некоторое снижение производительности при установке HostnameLookups на "On", так что это компромисс.

1
ответ дан 7 May 2021 в 19:59

Использовал такие штуки:

HostnameLookups "On"
SecRule REMOTE_HOST "@rx (?:amazonaws\.com|your-server\.de)"\
 "msg:'Bad host blocked - REMOTE HOST: %REMOTE_HOST}'\
,id:99999,log,drop,block,t:lowercase,phase:request,status:403"

Отлично работает, просто заполнил список плохих хостов....

0
ответ дан 10 May 2021 в 10:21

Теги

Похожие вопросы