Nginx

В предыдущей статье я затрагивал тему nginx.
А значит нужно его установить.
nginx [engine x] — это HTTP-сервер и почтовый прокси-сервер. Я начал разрабатывать nginx весной 2002 года, а осенью 2004 года вышел первый публично доступный релиз. В декабре 2009 года nginx использовался на 4% самых посещаемых сайтов в мире.
Я буду рассматривать установку в привычной и используемой мной системе Ubuntu Server 10.04 LTS, хотя думаю установка будет мало чем отличаться в любых Ubuntu-подобных системах, и возможно на Debian и его клонах.
Итак поехали.
Установка сводится к банальному
sudo aptitude install nginx
Готово. Теперь нужно немного подкорректировать конфиги , как самого nginx так и apache.
Начнем с apache :
Открываем /etc/apache2/ports.conf

NameVirtualHost *:80
Listen 80

меняем на :

NameVirtualHost *:88
Listen 88

Так как на 80 порту у нас теперь будет nginx.
Если у Вас уже было куча Виртуалхостов смените у них порты с 80 на 88 (хотя и это только для примера, — использовать можете любой).
И теперь коснемся самого nginx.
Редактировать мы будем секцию

http {
upstream backend
{
server 127.0.0.1:88;
}
server {
listen 80;
location ~/\.ht {
deny all;
}
location / {
proxy_pass http://backend/;
proxy_set_header Range "";
proxy_set_header Request-Range "";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}

Перезапускаем сервисы :

/etc/init.d/apache2 restart
/etc/init.d/nginx restart

Опасная уязвимость для серверов с apache

Недавно наткнулся на статью про найденную уязвимость в веб-сервере apache.

Пять дней назад в листе рассылки Full Disclosure появился скрипт, по заявлению автора, убивающий Apache начиная от самых старых версий до самых новых.

Работает скрипт очень просто : запускает простой запрос в несколько десятков потоков.

HEAD / HTTP/1.1
Host: www.example.com
Range: bytes=0-,5-0,5-1,5-2,5-3,5-4,<...>,5-1299,5-1300
Accept-Encoding: gzip
Connection: close

В ответ на такой запрос Apache для подсчета Content-Length собирает в памяти длинный ответ из перекрывающихся кусков запрошенного файла, который может занять и занимает значительный объём памяти. При этом потребление памяти Apache начинает резко расти, как на том графике в начале, что при должном, совсем небольшом, количестве запросов приводит к DoS даже на приличных серверах.

Проверить, уязвим ли ваш сервер к этой атаке легко:

curl -I -H "Range: bytes=0-1,0-2" -s www.example.com/robots.txt | grep Partial

Если Вы увидели ответ :

206 Partial Content

То Ваш сервер 100% уязвим для такой атаки.

Что же делать и как поставить защиту ?

Самым простым способомбудет прописать для nginx запрет для проксирования пустых запросов :

proxy_set_header Range "";
proxy_set_header Request-Range "";

А вот если nginx у Вас нет, то рекомендую его установить. Или по сообщениям сайта  cybersecurity.ru :

Разработчики web-сервера Apache сообщают об исправлении опасной уязвимости CVE-2011-3192 , которая использовалась злоумышленниками для проведения атак на отказ в обслуживании web-серверов. Стоит отметить, что web-сервер Apache обеспечивает работу двух третей всех сайтов в мире.

Напомним, что опасная уязвимость была обнаружена независимыми специалистами в области информационной безопасности 20 августа. В тот же день в сети Интернет появился эксплоит, который позволял вывести из строя любой сайт, который использует Apache HTTP Server.

Уязвимость в Apache HTTP Server позволяла злоумышленникам аварийно завершать работу web-серверов, используя простую вредоносную программу. Ошибка заключалась в способе обработки большого количества Range запросов в HTTPD, что приводило к исчерпанию ресурсов удаленной системы. Ошибка была исправлена в новой версии Apache HTTP Server 2.2.20. Однако для того, чтобы предотвратить атаку, все администраторы сайтов, которые используют Apache HTTP Server, должны самостоятельно установить обновление.