понедельник, 6 июля 2009 г.

Фильтрующий прокси

Фильтрующий прокси

Варианты использования
1. Apache2(продакшен) + mod_securtity
2. Apache2 + mod_proxy + mod_securtity

Для защиты вашего сервера от то атак разного типа можно использовать 2 вариант подключения модуля mod_securtity
Один из них это прямая защита сайта, этим модулем, т.е. наш сервер должен быть доступен из вне.
Второй вариант, это дополнительное использование прокси сервера, что позволит оставить продакшен в интрасети и кэшировать, при желании, запросы.

Коротко о преимуществах mod_securtity
1. Бесплатный
2. Открытые исходные коды
3. Фильтрует как get запросы, так и post данные
4. Удобный язык для написания правил фильтрации, базированный на проверке по регулярным выражениям
5. Интеграция с прокси модулями апача, что позволяет оптимально ускорить работу веб-сервера (loadbalancing)
6. Графическая оболочка для написание правил безопасности (REMO)
Так же просмотреть презентацию можно по ссылке
http://www.modsecurity.org/documentation/ApacheCon_Europe_2008-Web_Intrusion_Detection_with_ModSecurity.pdf

Структурная схема работы mod_securtity


Установка mod_security
Установить модуль можно, из пакетов или собрать из исходников
Выбрать пакет для интересуемей вас ОС или исходники можно здесь
http://www.modsecurity.org/download/index.html
Так же там можно скачать базовый набор правил, что предотвращает 70%-80% всевозможных атак

Необходимые предварительно установленные модули Apache
1. mod_so
2. mod_unique_id
3. mod_proxy
4. mod_proxy_http
5. mod_proxy_balancer
Так же если мы хотим использовать mod_security с прокси сервером, нужно установить еще один экземпляр апача.
После этого приступаем к установке mod_security
Создаем папку .../apache2/modules/mod_security2 и копируем туда mod_security2.so и libxml2.dll

Добавте в httpd.conf:
LoadModule security2_module modules/mod_security2/mod_security2.so
LoadModule unique_id_module modules/mod_unique_id.so

Для того, что бы в основном конфигурационном файле не было мешанины, выносим настройки наших модулей в отдельные файл
Include ……/bin/Apache2_Proxy/conf/mod_security.conf
Include ……/bin/Apache2_Proxy/conf/mod_proxy.conf

В конфигурационном файле mod_proxy, настраиваем прокси
Базовая настройка прокси сервера, которая передает полностью все запросы, без кэширования
ProxyRequests On
ProxyVia On

ProxyPass / http://localhost/
ProxyPassReverse / http://localhost/

В файле mod_security.conf, мы должны указать правила безопасности
Для проверки работоспособности конфигурации, можно указать такие правила

SecRuleEngine On
SecDefaultAction log,auditlog,deny,status:403,phase:2,t:lowercase,t:replaceNulls,t:compressWhitespace

SecAuditEngine RelevantOnly
SecAuditLogType Serial
SecAuditLog logs/mod_security2.log

## -- General rules --------------------
SecRule ARGS "c:/" t:normalisePathWin
SecRule ARGS "\.\./" "t:normalisePathWin,id:99999,severity:4,msg:'Drive Access'"
SecRule ARGS "d:/" t:normalisePathWin

## -- phpBB attack --------------------
SecRule ARGS:highlight "(\x27|%27|\x2527|%2527)"

И сделать запрос
http://www.xxxxcom/?abc=../../

Вы должны получить на странице, сообщение о отказе доступа

Введение в язык правил доступа

Что доступно:
1. Указание правила
2. Доступ к серверным переменным
3. Доступ переменным из get и post
a. Загрузка файлов
4. Настройки аудита

Коротко по пунктам:
1. Используется ключевое слово SecRule для указания правил
Синтаксис SecRule VARIABLES OPERATOR [ACTIONS]
2. Доступ к серверным переменным осуществляется через ключевые слова, к примеру
REQUEST_LINE, REQUEST_PROTOCOL, REQUEST_METHOD и тд
3. Доступ к переменным из запроса, осуществляется через ключевые слова, к примеру
QUERY_STRING, а так же к массиву переменных ARGS.
ARGS:username или ARGS:password, получаем данные из поста, к примеру
Что бы установить ограничения на загрузку файлов, можно использовать
SecUploadDir /tmp/dir
SecTmpDir /tmp/dir
SecDataDir /tmp

Так же что бы указать максимальный размер загружаемого файла
SecRule FILES_SIZES "@gt 2097152" "phase:2,t:none,deny,log,auditlog,status:403,msg:'Uploaded file size too large',id:'960342',severity:'4'"

И если не обходимо указать проверяющий скрипт(антивирус)
#SecRule FILES_TMPNAMES "@inspectFile /opt/apache/bin/inspect_script.pl" \ "t:none"

Для настройки аудита, можно использовать такие директивы
#For logging
SecAuditEngine RelevantOnly
SecAuditLogType Serial
SecAuditLog logs/mod_security2.log

# Debug log
SecDebugLog logs/modsec_debug.log
SecDebugLogLevel 0

Самый лучший пример, что демонстрирует возможности описания правил

SecDefaultAction "log,deny,t:lowercase"
SecRule REQUEST_METHOD !POST
SecRule ARGS:destination " URL" "t:urlDecode"
SecRule ARGS:flags "[0-9]{1,2}"
SecRule ARGS:username "[0-9a-zA-Z].{256,}"
SecRule ARGS:password ".{256,}"
SecRule ARGS:SubmitCreds "!Log.On"
SecRule ARGS:trusted "!(0|4)"


Более подробно, по правилам можно прочитать по ссылке
http://www.modsecurity.org/documentation/ModSecurity2_Rule_Language.pdf

2 комментария:

Анонимный комментирует...

zx cv vb nm as sd fg gh hj jk kl lq qw er rt ty yu ui io op po oi iu uy yt tr re ew wq qa ql lk kj jh hg gf fd ds sa am mn nb bv vc cx xz zz xx di

gigabyte71 комментирует...

имею всегда обновляемый огромный список anonymous HTTP прокси и
high anonymous HTTP прокси . Из выдаваемого списка работают все 100% . Даю всегда тест для проверки) все вопросы о цене и количеству прошу в асю 4071два98ноль8