Архив метки: apache

Apache & Fail2ban: защита веб-сервера от слепых атак перебором

Задача: защитить веб-сервер Apache2 от атак слепого перебора багов возможной CMS сайта типа такого:

surdoserver.ru:80 127.0.0.1 - - [23/Dec/2011:07:20:11 +0000] "GET /install.php?phpbb_root_di r=../../../../../../../proc/self/environ%00 HTTP/1.0" 404 3449 "-" "<?php system(\"id\"); ?>"<br />
surdoserver.ru:80 127.0.0.1 - - [23/Dec/2011:07:20:11 +0000] "GET /mantis/login_page.php?g_meta_inc _dir=../../../../../../../proc/self/environ%00 HTTP/1.0" 404 3449 "-" "<?php system(\"id\"); ?>"<br />
surdoserver.ru:80 127.0.0.1 - - [23/Dec/2011:07:20:11 +0000] "GET /page.php?template=../../../../../../../proc/self/environ%00 HTTP/1.0" 404 3449 "-" "<?php system(\"id\"); ?>"<br />
surdoserver.ru:80 127.0.0.1 - - [23/Dec/2011:07:20:11 +0000] "GET /phorum/admin/actions/del.php?include_path=../../../../../../../proc/self/environ%00 HTTP/1.0" 404 3449 "-" "<?php system(\"id\"); ?>"<br />
surdoserver.ru:80 127.0.0.1 - - [23/Dec/2011:07:20:11 +0000] "GET /pollensondage.inc.php?app _path=../../../../../../../proc/self/environ%00 HTTP/1.0" 404 3449 "-" "<?php system(\"id\"); ?>"<br />
surdoserver.ru:80 127.0.0.1 - - [23/Dec/2011:07:20:40 +0000] "GET /joomla/index.php?option=com_sbsfile&controller= ../../../../../../../proc/self/environ%00 HTTP/1.0" 404 3449 "-" "<?php system(\"id\"); ?>"surdoserver.ru:80 127.0.0.1 - - [23/Dec/2011:07:20:41 +0000] "GET /joomla/index.php?option=com_rokdownloads&controller= ../../../../../../../proc/self/environ%00 HTTP/1.0" 404 3449 "-" "<?php system(\"id\"); ?>"surdoserver.ru:80 127.0.0.1 - - [23/Dec/2011:07:20:41 +0000] "GET /joomla/index.php?option=com_sectionex&controller= ../../../../../../../proc/self/environ%00 HTTP/1.0" 404 3449 "-" "<?php system(\"id\"); ?>"surdoserver.ru:80 127.0.0.1 - - [23/Dec/2011:07:20:41 +0000] "GET /joomla/index.php?option=com_ganalytics&controller= ../../../../../../../proc/self/environ%00 HTTP/1.0" 404 3449 "-" "<?php system(\"id\"); ?>"surdoserver.ru:80 127.0.0.1 - - [23/Dec/2011:07:20:41 +0000] "GET /joomla/index.php?option=com_janews&controller= ../../../../../../../proc/self/environ%00 HTTP/1.0" 404 3449 "-" "<?php system(\"id\"); ?>"surdoserver.ru:80 127.0.0.1 - - [23/Dec/2011:07:20:41 +0000] "GET /joomla/index.php?option=com_linkr&controller= ../../../../../../../proc/self/environ%00 HTTP/1.0" 404 3449 "-" "<?php system(\"id\"); ?>"

Решение: использовать opensource фильтр-монитор атак Fail2ban для различных сервисов (vsftp, ssh, Apache и пр.). Для этого:

  1. Создаем файл /etc/fail2ban/filter.d/apache-404.conf
  2. Вписываем в него следующее:
    [Definition]
    failregex = (?P<host>[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}) .+ 404 [0-9]+ "
    ignoreregex = favicon\.ico
    
  3. В файл /etc/fail2ban/jail.local добавляем:
    [apache-404]
    
    enabled = true
    port = http,https
    filter = apache-404
    logpath = /var/log/apache*/*access.log
    bantime = 3600
    findtime = 600
    maxretry = 5
    
  4. Перезагружаем fail2ban командой в консоли:
    /etc/init.d/fail2ban restart

Apache: Разгоняем сайт

Цель: максимальная скорость работы веб-приложения.
Задача: включение кеширования на Apache сервере.
Решение:

  1. Создаем в корне сайта файл .htaccess
  2. Проверяем, какой модуль включен на хостинге (mod_headers или mod_expires):
    1. Вставляем код:
      ExpiresActive On
      ExpiresDefault A0
      
      # 1 YEAR
      <FilesMatch "\.(ico)$">
      ExpiresDefault A9030400
      </FilesMatch>
      
      # 6 month
      <FilesMatch "\.(flv|jpg|jpeg|png|gif|swf)$">
      ExpiresDefault A14515200
      </FilesMatch>
      
      # 3 HOUR
      <FilesMatch "\.(txt|xml|js|css)$">
      ExpiresDefault A10800"
      </FilesMatch>
      

      Если при загрузке сайта вылетает ошибка сервера, значит не включен mod_expires.

    2. Вставляем код
      <FilesMatch "\.(ico|gif|jpg|jpeg|png|flv|pdf)$">
        Header set Cache-Control "max-age=29030400"
      </FilesMatch>
      # WEEK
      <FilesMatch "\.(js|css|swf)$">
        Header set Cache-Control "max-age=604800"
      </FilesMatch>
      # 45 MIN
      <FilesMatch "\.(html|htm|txt)$">
        Header set Cache-Control "max-age=2700"
      </FilesMatch>
      

      Если при загрузке сайта вылетает ошибка сервера — не включен mod_headers.

  3. Если оба модуля подключены — оставляем вариант для mod_expires. Как утверждает Google, заголовок expires поддерживается бОльшим количеством браузеров.
  4. Если ни один модуль не включен и есть рутовски доступ к серверу по ssh — включаем модуль mod_exparies с помощью командной строки (создаем символическую ссылку и перезагружаем веб-сервер):
    ln -s /etc/apache2/mods-available/expires.load /etc/apache2/mods-enabled/expires.load
    /etc/init.d/apache2 restart
    

Вот и всё, довольно просто, правда?) Зато сколько пользы,)

Пояснение

И все-таки стоит пояснить, почему кеширование так важно сегодня.

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

Чтобы проверить скорость работы своего сайта удобней всего пользоваться фирменным дополнением к Firebug от Google— PageSpeed.

Скриншон работы PageSpeed

Скриншот работы PageSpeed

Проведя быстрый тест, PageSpeed сообщит о проблемах производительности сайта и порекомендует пути их решения. Хорошая штука.)

Также есть аналогичный инструмент от Yahoo! — YSlow. Очень удобная программка, я ей тоже пользуюсь — бывает, он замечает то, что PageSpeed упустил.

Ссылки в записи

Теперь буду добавлять к статьям этот блок со ссылками на используемые ресурсы в записи. Такая штука более академична что ли.)

  • Рекомендации Google по включению механизмов кеширования
  • Подробная справочная статья по включению кеширования в Apache
  • Заявление Google о включении учета скорости работы сайта в поисковом ранжировании
  • Firebug — один из удобнейших инструментов веб-разработчика, расширение для FireFox
  • PageSpeed — дополнение к Firebug от Google для выявления проблем производительности сайта
  • YSlow — дополнение к Firebug от Yahoo!  для выявления проблем производительности сайта