Как значительно улучшить Apache безопасности?


Я настройка веб-сервера с помощью Apache. Мой вопрос заключается в следующем:

Какие модули я использую для повышения безопасности от атак и допуска вредоносных страниц, опубликованных на мой сервер?

я Знаю, что есть несколько модулей, но, какое решение лучше?

Author: anderson, 2014-02-25

2 answers

Необходимо иметь знания из модулей, что ваша система будет использовать. Пусть активирован только минимальное, необходимое, чтобы ваша система работала, не оставляйте концы с концами.

Вы также должны быть в курсе новостей уязвимостей и ошибок в модулях, за которые вы выбрали. Например, модуль rewrite, один из наиболее часто используемых в дружественных url-адресов и других целей, была уязвимость VU#395412 несколько лет назад.

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

Кроме того, некоторые вещи базовые, которые помогают в apache безопасности.

- Спрячьте версии apache и сообщения об ошибках.

Cracker узнать версию программы эквивалентен знать, какие уязвимости и атаки эта программа регулируется настоящим. Сообщения об ошибках обычно для передачи информации, компрометирующих, как порты, используемые и системные папки. Отключите это в httpd.conf.

ServerSignature Off
ServerTokens Prod 

- Отключить список каталогов

Заходя На-mos каталог система, браузер, мы можем получить список файлов в этой папке. Это известный страницу "Index of/". Необходимо, в httpd.конференции, что-то вроде следующего, чтобы избежать этого листинг:

<Directory /var/www/html>
    Options -Indexes
</Directory>

- разрешения root для apache

Apache не нужно иметь разрешение на доступ и изменение всех уголках системы. имейте это в более жесткой можно только необходимое для работы.

- Использовать Allow и Deny, чтобы ограничить доступ к каталогам

, Вероятно, в некоторых местах эти правила должны быть afrouxadas но обеспечьте доступ только где он необходимый.

 <Directory />
   Options None
   Order deny,allow
   Deny from all
</Directory>

-Модуль Security

Mod_security работает в качестве брандмауэра и позволяет нам отслеживать трафик в режиме реального времени. Также помогает защитить от атак грубой силы. Был создан Ivan Ristic в 2002 году и был в курсе компанией Trustwave, и это полностью с открытым исходным кодом.

Mod_evasive

Боевых DDOS-атак. По описанию самого автора module:

"mod_evasive-это модуль для Apache маневры уклончиво, обеспечивая отклонение в случае, если Из HTTP-DDoS-атаки, или атаки грубой силы. Он также разработан, чтобы быть средством обнаружения и управления сетью, которые могут быть легко настроена, чтобы общаться с ipchains, межсетевые экраны, маршрутизаторы, etc."

Abilite модуль Журнала

, Журналы предоставляют информацию valiosíssimas о том, что происходит в системе с точки зрения безопасности и другие проблемы.

Соображения Финал

Основное правило-это держать все проще и "жесткой" возможно, если программы и модули сервера incharem очень администрирования может стать очень сложным, отслеживания ошибок и вредоносных программ, может стать чем-то epopeico, уязвимостей, также будет отображаться таким образом, прямо пропорциональна это отек. Следуйте принципам "KISS" (Keep это глупо просто) и "YAGNI" (Вам не будет нужно).

 9
Author: raonibs, 2014-02-25 13:50:27

Принося ответ более последовательной и обновляется по этому вопросу, однако, без отбросить все, что @raonibs сказал, в настоящее время mod_security достаточно, чтобы защитить вас от атак От Brute force. Так что вы можете сэкономить больше модуль и избавиться от mod_evasive, что сегодня-это модуль устаревшей.

Ratelimit и Защита

После многих испытаний, контроля и исследований, создал правило ниже, эксплуатации, просто, во-первых ограничивает 1 секунду, когда доступ передает 1000 подключений в минуту (это более высокое значение, чтобы избежать false/положительный, но вы можете изменить в соответствии с вашей инфраструктуры), посылает ошибка 429 Retry-After, чтобы предупредить боты для поиска, и сообщить, чтобы попытаться еще раз через 10 секунд. Если нападения продолжаться, наклоняет соединение за 60 секунд.

Короче говоря, этот код ratelimit с защитой от DoS.

Работает очень хорошо, была протестирована с помощью инструментов стресс-самых известных. Но не влияет на DDoS атак, и может иметь негативное влияние в некоторых случаях атак на крупномасштабных (но это тема для другой темы).

# Ratelimit - DoS Protection
SecAction initcol:ip=%{REMOTE_ADDR},pass,nolog,id:'5000750'
# conta requisições por segundo por ip
SecAction "phase:5,id:'5000751',deprecatevar:ip.rlimit=1/1,pass,nolog"

# ignora requisição de localhost ou algum outro ip
SecRule REMOTE_ADDR "^123\.45\.67\.89$" "phase:1,id:'5000740',nolog,allow"

# se as requisições passarem de 100 (var dos>100), derruba a conexão (útil se você usa algum proxy, tipo cloudflare)
SecRule ip:dos "@gt 100" "phase:2,id:'5000752',pause:300,drop,setenv:RATELIMITED,skip:2,log,msg:'IP address blocked - DoS Attack'"

# se as requisições passarem de 1000 (var rlimit>1000), nega a conexão e retorna http 429, e aumenta a var dos em um (expira em 60 segundos)
SecRule ip:rlimit "@gt 1000" "phase:2,id:'5000753',pause:300,deny,setvar:ip.dos=+1,expirevar:ip.dos=60,status:429,setenv:RATELIMITED,skip:1,nolog"

# aumenta a var rlimit em um (expira em 30 segundos)
SecAction "phase:2,id:'5000754',pass,setvar:ip.rlimit=+1,expirevar:ip.rlimit=30,nolog"

Header always set Retry-After "30" env=RATELIMITED

ErrorDocument 429 "Too Many Requests. Calm down!"

Brute Force

Ниже приведен пример правила для защиты от Brute force Wordpress, есть много примеров, разбросаны по всему интернету, я сделал некоторые изменения в код, чтобы работать на более новых версиях mod_security и многочисленные тесты, в том числе с известным инструмент WPscan. Также работает очень хорошо.

<Locationmatch "/wp-login.php">

    # Setup brute force detection.
    # React if block flag has been set.
    SecRule user:bf_block "@gt 0" "deny,status:401,log,id:5000135,msg:'ip address blocked for 5 minutes, more than 15 login attempts in 3 minutes.'"

    # Setup Tracking.  On a successful login, a 302 redirect is performed, a 200 indicates login failed.
    SecRule RESPONSE_STATUS "^302" "phase:5,t:none,nolog,pass,setvar:ip.bf_counter=0,id:5000136"
    SecRule RESPONSE_STATUS "^200" "phase:5,chain,t:none,nolog,pass,setvar:ip.bf_counter=+1,deprecatevar:ip.bf_counter=1/180,id:5000137"
    SecRule ip:bf_counter "@gt 15" "t:none,setvar:user.bf_block=1,expirevar:user.bf_block=300,setvar:ip.bf_counter=0"

</locationmatch>

Вы можете изменить /wp-login.php для любой страницы, которые вы хотите защитить.

SYN-Flood

Я Также создал защиты от SYN Flood и apache, используя iptables, совместимые с WHM и, особенно, для тех, кто использует CSF.

#!/bin/sh
/sbin/iptables -N BLOCK_IP
/sbin/iptables -N SYN_CHECK
/sbin/iptables -N DOS_CHECK
/sbin/iptables -N SYN_ATTACK
/sbin/iptables -N DOS_ATTACK
#
# primeiro verifica se o IP esta bloqueado
/sbin/iptables -A INPUT -j BLOCK_IP
# derruba se estiver bloqueado
/sbin/iptables -A BLOCK_IP -p tcp -m multiport --dport 80,443 -m recent --name BlockedIP --rcheck --seconds 30 -j DROP
/sbin/iptables -A BLOCK_IP -p udp -m multiport --dport 80,443 -m recent --name BlockedIP --rcheck --seconds 30 -j DROP
# se passou o tempo desbloqueia
/sbin/iptables -A BLOCK_IP -p tcp -m multiport --dport 80,443 -m recent --name BlockedIP --remove -j RETURN
/sbin/iptables -A BLOCK_IP -p udp -m multiport --dport 80,443 -m recent --name BlockedIP --remove -j RETURN
#
# verifica: se existe mais de 100 conexões simultâneas com status SYN - ignora IP do gateway
/sbin/iptables -A INPUT -p tcp -m multiport --dport 80,443 --syn ! -s 123.45.67.89 -m connlimit --connlimit-above 100 -j SYN_CHECK
# verifica: conexão feita e posteriormente a frequencia - ignora IP do gateway
/sbin/iptables -A INPUT -p tcp -m multiport --dport 80,443 ! -s 123.45.67.89 -m state --state NEW -j DOS_CHECK
/sbin/iptables -A INPUT -p udp -m multiport --dport 80,443 ! -s 123.45.67.89 -m state --state NEW -j DOS_CHECK
#
# verifica se o ataque é frequente (no caso de erro: --hitcount não pode ser maior que 100 - aumente o limite de pacotes em ip_pkt_list_tot.conf)
/sbin/iptables -A SYN_CHECK -m recent --update --seconds 1 --hitcount 70 --name RATE -j SYN_ATTACK
/sbin/iptables -A DOS_CHECK -m recent --update --seconds 1 --hitcount 70 --name RATE -j DOS_ATTACK
# caso o ataque seja frequente, bloqueia por 30 segundos e gera log
/sbin/iptables -A SYN_ATTACK -j LOG --log-prefix "BLOCK SYN ATTACK: " --log-level 6
/sbin/iptables -A SYN_ATTACK -m recent --set --name BlockedIP -j DROP
/sbin/iptables -A DOS_ATTACK -j LOG --log-prefix "BLOCK DOS ATTACK: " --log-level 6
/sbin/iptables -A DOS_ATTACK -m recent --set --name BlockedIP -j DROP
#
# se o ataque não é frequente, libera
/sbin/iptables -A SYN_CHECK -m recent --set --name RATE -j ACCEPT
/sbin/iptables -A DOS_CHECK -m recent --set --name RATE -j ACCEPT
#

Многие люди используют fail2ban для защиты от SYN Flood, однако, не всегда использовать fail2ban-это что-то простое, особенно для тех, кто уже использует CSF. Этот скрипт был протестирован и до даты этой регистрации, работает очень хорошо. Он работает, чтобы дополнить SYN cookie-файлы, которые должны быть включены в вашей операционной системе.

Чтобы повернуть это очень просто, просто добавьте код в правила вашей iptables /etc/sysconfig/iptables, или, если вы используете CSF просто поместите /usr/local/csf/bin/csfpre.sh и ввести в терминале csf -r.

Анти-Slowloris

Защитить Apache против Слоу Из нападений, вы должны использовать плагин mod_reqtimeout, я использую ниже конфигурации, 10 секунд, 1 секунда плюс каждые 500 байт в ожидании подключения достаточно в большинстве случаев, и очень редко false/положительное:

<IfModule mod_reqtimeout.c>
   RequestReadTimeout header=10-40,MinRate=500 body=10,MinRate=500
</IfModule>

Правило ниже, чтобы mod_security была взята с интернет (опционально, только mod_reqtimeout уже достаточно), но очень хорошо работает против атак этого типа, должен быть использован в сочетании с ModReqtimeout.

SecRule RESPONSE_STATUS "@streq 408" "phase:5,t:none,nolog,pass,
setvar:ip.slow_dos_counter=+1, expirevar:ip.slow_dos_counter=60, id:'5000770'"

SecRule IP:SLOW_DOS_COUNTER "@gt 5" "phase:1,t:none,log,drop,
msg:'Client Connection Dropped due to high number of slow DoS alerts', id:'5000771'"

Выше правилу определяет когда HTTP-сервер выдает код состояния 408 и отслеживает, сколько раз это произошло, пока сохраняет данные в постоянное хранилище на основе IP, чтобы он мог соотнести между запросами. Если это событие происходит более 5 раз в 60 секунд, последующие запросы на этот IP-адрес будет удален по mod_security в течение 1 минуты.

, Но, обратите внимание!

Balançadores, Varnish Cache, Nginx

Если инфраструктура имеет balançadores, Varnish Cache, Nginx или любой другой тип шлюза, вам нужно будет использовать mod_remoteip и настройке X-Forwarded-For правильно, на заголовок, чтобы apache удается видеть реальный IP пользователя, в противном случае, вышеуказанные правила не будут работать и могут в конечном итоге блокируя IP-адрес вашего шлюза.

Важно Также знать, что необходимо создать ratelimits для шлюзов, несмотря на то, что мое правило, чтобы сбить нежелательные соединения, в случае, если шлюз, если он будет проигнорировано правило (и это правильно), запрос будет проходить и только во время ответа сервера apache, что соединение будет отменено, не предотвращение DoS-атак (но экономит ресурсы обработке страницы, что хорошо в любом случае).

Cloudlare

, Если вы используете или планируете использовать Cloudflare, вы также можете настроить ваш реальный IP пользователя, с помощью mod_remoteip через заголовок CF-Connecting-IP, или использовать mod_cloudflare.

Firewall

Очень интересно, у вас есть Брандмауэр, чтобы работать с mod_security, я рекомендую CSF (Configserver Security & Firewall). С ним просто определить LF_MODSEC = в файле конфигурации.

Значение конфигурации LF_MODSEC - это число хиты, необходимых, чтобы добавить IP-наступление быть заблокирован брандмауэром. Установить LF_MODSEC 5 будет блокировать IP-адрес после блокировки 5 в mod_security в течение определенного периода времени определяется LF_INTERVAL, который определен в час (3600 секунд) по умолчанию.

 4
Author: Rodrigo Gomes, 2017-01-29 06:50:53