Docs/SysAdmin/Server/ApacheLogs
Материал из Mandriva Russian Community Wiki
При возникновении проблем, когда переполнение буфера из-за атак, нацеленных на WinIIS серверы, имеют свойство создавать очень большие одиночные записи в комбинированном логе (/var/logs/httpd/access.log), которые webalizer и другие программы для учета логов не моггли обработать из-за размеров URI. Также было замечено расхождение в достоверности данных между настоящими хитами и накрученными. Итак я принял решение взглянуть, что я должен сделать, чтобы быть уверенным что я учитываю только соответствующие хиты на сайте. Хотя это и не остановит "атаки", другого варианта нет. Это должно остановить запись фальшивых данных в системы учета статистики. Все что нужно будет сделать, делается при помощи MDK 9.2 и MDK 10 и снова 10.1 это работает на обоих версиях Apache 1.3.x и 2.x, на которых я проводил тестирование.
Содержание |
Замедляем "атакующего"
Для первого шага использовалось Redirect Match. Взято с домашней страницы Jack Coates' по адресу http://www.monkeynoodle.org/lrp/deworming.html#tux . Главная мысль в снижении атак это установка адекватного таймаута для сервера, удерживающего червя до выпуска. Блокировка IP адреса 192.0.2.0/24 является немаршрутизируемой блокировкой IP, оставленной для использования в документации поэтому мы не будем беспокоиться по поводу возможных проблем в локальной сети. Начинаем редактировть httpd.conf.
[копировать снизу] # Редирект позволит сообщить клиентам об документах, которые используются в существующем именном пространстве вашего сервера, но больше ничего не делает. # Также сообщит, где искать перемещенный документ. # Формат: Редирект старый-URI новый-URL RedirectMatch ^.*\.(exe|dll|ida).* http://192.0.2.1 [копировать сверху]
Коментарии в конфиге помогут вам найти где и что я заменил. Раскоментированная строка, единственное что можно взять из конфига, при условии что ваш сервер обслуживает один домен. Если используются VHosts, прочтите Jack's документацию для подробностей.
Держим червей подальше от логов
[копировать снизу] #удостоверяемся, что мы логируем нужные запросы SetEnvIf Request_Method "(GET)|(POST)|(PUT)|(DELETE)|(HEAD)" log # SEARCH не есть верный запрос для Apache и указывает на присутствие червя. # Поэтому я собираюсь отправить его в забвение. Если не сделаю этого # - получу битый лог SetEnvIf Request_Method "(SEARCH)" worm # Используем регулярные выражения для обнаружения известных червей. # Складываем их всех в отдельный лог. SetEnvIf Request_URI "_vti_inf\.html$" worm !log SetEnvIf Request_URI "^/_mem_bin/" worm !log SetEnvIf Request_URI "^/_vti_bin/" worm !log SetEnvIf Request_URI "^/c/" worm !log SetEnvIf Request_URI "^/d/" worm !log SetEnvIf Request_URI ^/scripts/ worm !log SetEnvIfNoCase Request_URI "^/msadc/" worm !log #Code Red SetEnvIf Request_URI "default\.ida" worm !log SetEnvIfNoCase Request_URI "null\.ida" worm !log #NIMDA SetEnvIf Request_URI "cmd\.exe" worm !log SetEnvIf Request_URI "root\.exe" worm !log SetEnvIf Request_URI "Admin\.dll" worm !log # Выборочные строки. # Устанавливает отсутствие записи в лог при запросе картинок и т.п. SetEnvIf Request_URI "(\.gif|\.jpe?g|\.png|\.css|\.js)$" !log # Отделяем запросы из домашней сети. SetEnvIf Remote_Addr "^192\.168\." !log # С локала. SetEnvIf Remote_Addr "^127\.0\." !log # Пример как не записывать определенного рефера. SetEnvIf referer "somedangsite\.com" !log # Теперь устанавливаем директорию для логов. Я отправляю червей в /dev/null, # но можно в любую папку. CustomLog /var/log/httpd/access_log combined env=log CustomLog /dev/null combined env=worm [копировать сверху]
Правим конфиг httpd для последующего использования
Последний шаг - редактирование http.conf или httpd2.conf (зависит от версии апача) для подключения директив выше, так чтобы не получилось два набора команд для логирования. По этой причине нежелательное логирование не будет убрано, как хотелось.
Под Global Configuration (почти наверху файла) добавьте строку:
Include conf/wormlog.conf
Потом найдите и закоментируйте следующее (в противном случае обе директивы логирования будут запущены, неуспешно естественно, и в логи запишется как будто ничего не происходит):
CustomLog logs/access_log combined env=!VLOG
Проверяем установку
Перезапустим httpd и проверим. Если ваш результат совпадает с моим, черви больше не будут наращивать логи. Преимущество здесь в том, что при использовании любого отслеживания, которое вы будете делать, не будет засоряться вирусами, заражающими windows-машины и ищущими место, где можно сделать дамп. Вы можете отсылать червиный трафик в отдельный лог для дальнейших действий вместо моего решения отправлять их в /dev/null.
перевод --Alexander Volkov_5 20:47, 19 февраля 2009 (CET)

