Буквально пять дней назад в листе рассылки Full Disclosure появился скрипт, по заявлению автора, убивающий Apache начиная от самых старых версий до самых новых.
И он действительно работает. Скрипт killapache.pl запускает в несколько десятков потоков простой запроc:
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 даже на приличных серверах.
Решение:
1) Как заявляют авторы, если у Вас стоит кеширующих nginx перед Apache - ничего плохого не произойдет.
2) Если у Вас Apache глядит наружу сам, сразу и только он.
Выполняем команду:
$ sudo a2enmod headers
После чего идем в конфиг Апача и прописываем в удобном месте глобальной конфигурации следующие строки:
RequestHeader unset Range
RequestHeader unset Request-Range
Т.е. в месте, где определены общие для всех виртуальных хостов директивы. Вот пример куска такого файла:
...
#
# The following directives define some format nicknames for use with
# a CustomLog directive (see below).
# If you are behind a reverse proxy, you might want to change %h into %{X-Forwarded-For}i
#
LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %O" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
#
# Define an access log for VirtualHosts that don't define their own logfile
CustomLog /var/log/apache2/other_vhosts_access.log vhost_combined
# Disabling hacked headers (which can be used to DoS the Apache)
RequestHeader unset Range
RequestHeader unset Request-Range
...
После этого перезапустите Апач.
Либо, если эти заголовки Вам нужны - есть метода обхода через Rewrite Engine или другие методы по mod_headers
Актуально для: Apache2 любых версий по 2.2.17 включительно
Комментарии
Оставить комментарий
Выполнение скриптов на стороне сервера PHP (LAMP) NodeJS (Backend)
Термины: Выполнение скриптов на стороне сервера PHP (LAMP) NodeJS (Backend)