Назад | Перейти на главную страницу

Блокирование недопустимых HTTP-запросов к приложению PHP

Впервые за несколько лет я частично отвечаю за помощь в администрировании сервера веб-приложения PHP (обслуживаемого с помощью Apache).

Мы видим ряд запросов на недействительные URL-адреса, которые, как я полагаю, связаны с вредоносными программами / эксплойтами. Вещи как

r/www/cache/static/home/img/logos/nuomi_ade5465d.png
cgi-bin/test.sh
cgi-sys/entropysearch.cgi

и т.п.

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

  1. Будет ли вообще работать блокировка по IP-адресу? Я знаю, что прошло много времени с тех пор, как «IP-адрес == уникальное устройство в Интернете», но мне интересно, поступают ли подобные зонды из тех сетей, в которых для меня было бы безопасно просто заблокировать их.

  2. Если я не могу заблокировать по IP-адресу, поддерживает ли кто-нибудь список URL-адресов, которые злоумышленники обычно проверяют, чтобы я мог заблокировать по URL-адресу?

  3. Re: № 2 - Если бы я собирался обрабатывать эту блокировку на уровне сервера, какой модуль apache подходит для такого рода вещей? (MOD_REWRITE, MOD_SECURITY)

  4. Есть ли лучший способ заблокировать эти запросы, кроме IP или URL?

  5. Кроме того, система размещена на EC2 - предлагает ли Amazon какую-либо помощь с подобными вещами?

  1. Блокировка IP-адресов - это гонка, в которой невозможно выиграть. Эти запросы обычно поступают от ботнетов или взломанных систем. Я бы посоветовал заблокировать IP-адрес как временное решение конкретного инцидента, когда запросы вызывают проблемы на вашей стороне.

  2. Я не знаю такого списка

  3. Оба будут работать. Но я предполагаю (не проверено), что простое игнорирование запросов на самом деле будет менее интенсивным для процессора.

  4. Используйте обратный прокси-сервер (например, varnish или даже mod_cache) для кеширования отрицательных попаданий (404). Таким образом, запросы к одним и тем же (несуществующим) URL-адресам могут обрабатываться очень быстро и не требуют постоянной проверки файловой системы.

  5. Не подозревая

Fail2ban разработан, чтобы делать именно то, что вы описываете. Например. видеть http://linuxaria.com/howto/how-to-protect-apache-with-fail2ban

Вы можете настроить его так, чтобы он был чувствителен (например) к ответам 404. Или вы даже можете настроить приманки на URL-адресах, чтобы немедленно поднять черные флаги для работы fail2ban.

По конкретным вопросам:

  1. да, это сработает, но будьте осторожны, если вы сами не DOS, имея плохие ссылки

  2. Такой список быстро устареет, поэтому в качестве источника данных следует использовать сам трафик. Но / ^ / cgi-bin / и /.asp(x+)$/ - это то, что вы, возможно, захотите пометить черным флагом

  3. Никаких модулей не требуется, если вы не хотите перенаправить URL-адреса, помеченные черным флажком, на более сложный обработчик

  4. Вы платите Amazon за услугу и спрашиваете нас, за что вы платите?

Насколько я понимаю, идеального документированного способа решения таких проблем не существует. Вы можете только минимизировать подозрительные попытки в вашем веб-приложении.

Да, IP-адреса можно заблокировать на Apache.Проверьте документы Apache здесь . Оно использует mod_rewrite и дает 403 код ответа клиенту, если IP находится в черном списке. Это болезненная работа - следить за журналами и поддерживать hosts.deny

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

RewriteMap hosts-deny txt:/path/to/hosts.deny
RewriteCond ${hosts-deny:%{REMOTE_ADDR}|NOT-FOUND} !=NOT-FOUND [OR]
RewriteCond ${hosts-deny:%{REMOTE_HOST}|NOT-FOUND} !=NOT-FOUND [OR]
RewriteCond %{QUERY_STRING} <any suspicious keyword/pattern> [NC,OR]
RewriteCond %{REQUEST_URI} <any suspicious keyword/pattern> [NC] 
RewriteRule ^ - [F] 

Добавьте разные правила в зависимости от того, что делает ваш сайт. Скажите, обслуживает ли ваш сайт только .php файлы просто добавляют еще одно условие к приведенному выше коду. RewriteCond %{REQUEST_URI} !.php$ [NC]

  1. Будет ли вообще работать блокировка по IP-адресу? Я знаю, что прошло много времени с тех пор, как «IP-адрес == уникальное устройство в Интернете», но мне интересно, поступают ли подобные зонды из тех сетей, в которых для меня было бы безопасно просто заблокировать их.

Вы можете довольно легко заблокировать многие запросы, используя простой файл .htaccess. Там вы можете заблокировать IP-адреса, URL-адреса и многое другое. Но я не уверен, что является источником ваших «плохих запросов». Что я точно знаю, так это то, что вам следует начать с остановки известного нам плохого трафика. И это можно сделать, если вы немного увеличите свою цель и остановите атаки отказа в обслуживании, в то же время ограничив плохие запросы! Все, что вам нужно, есть в этом очень полезный ресурс. Однако они на самом деле не говорят, какие модули устанавливать. Я рекомендую: mod_antiloris, mod_evasive но вы можете найти гораздо больше Вот.

Я бы лично посмотрел на настройку некоторых из них, прежде чем перейти к жесткой блокировке определенных URL-адресов или IP-адресов. Однако, если вы хотите начать ограничивать определенные шаблоны, это может быть проще с помощью PHP scrict. Т.е. Направьте все параметры в index.php и проанализируйте их там. Это по-прежнему потребует изменения маршрута с использованием файла .htaccess. Drupal делает что-то вроде этого:

# Pass all requests not referring directly to files in the filesystem to
# index.php. Clean URLs are handled in drupal_environment_initialize().
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteRule ^ index.php [L]

Делая это, вы можете "перехватить" каждый вводимый URL. Drupal действительно имеет эту встроенную функцию и сообщит вам, что человек X искал файл Y. И в Drupal снова есть модули, которые могут блокировать определенный доступ с помощью определенных правил. Если это возможно, я уверен, что подключение к PHP откроет вам множество различных опций, которые вы можете использовать, чтобы блокировать или не блокировать доступ из ips.

Думаю, я предложил решение, но мне нужно больше информации для дальнейших советов. Если вы сделаете это выше, вы сможете собрать больше информации, чтобы, возможно, определить точный источник проблем с неверным запросом. Используя эти инструменты, вы сможете увидеть закономерности и, по крайней мере, научиться лучше настраивать правила для блокировки злоумышленников.

  1. Если я не могу заблокировать по IP-адресу, поддерживает ли кто-нибудь список URL-адресов, которые злоумышленники обычно проверяют, чтобы я мог заблокировать по URL-адресу?

Существуют модули apache, которые делают это и используют собственные библиотеки. Существуют также библиотеки для PHP, которые делают это, и различные сети, которые отслеживают «плохих парней», будь то спамеры, использующие IP-адреса, или рассылающие спам с использованием адресов электронной почты и т. Д. Вот полный список людей, отслеживающих серверы, попавшие в черный список. по целому ряду причин. Попробуйте, введя www.google.com.

  1. К вопросу № 2. Если бы я собирался обрабатывать эту блокировку на уровне сервера, какой модуль apache подходит для такого рода вещей? (MOD_REWRITE, MOD_SECURITY)

MOD_REWRITE будет работать, чтобы получить запрос к файлу PHP, после чего вы можете решить проблему в PHP. Но это немного накладные расходы. Вам лучше использовать MOD_SECURITY и, возможно, MOD_EVASIVE

  1. Есть ли лучший способ заблокировать эти запросы, кроме IP или URL?

Это действительно зависит от обстоятельств. Вы должны изучить возникающие закономерности и определить причину. Я был очень разочарован тем, что мы продолжали получать запросы на «transparent.png» (или что-то в этом роде), которые оказались новым стандартным запросом для многих мобильных телефонов. Мы думали, что это плохо, это хорошо. Не делай этого.

  1. Кроме того, система размещена на EC2 - предлагает ли Amazon какую-либо помощь с подобными вещами?

Я не знаю. Исходя из моего личного опыта, который больше касался использования его для ОТПРАВКИ информации, мы довольно быстро попали в черный список даже при отправке менее 2500 писем. Но если вы размещаете у них хостинг и хотите, чтобы они блокировали входящие «плохие запросы», они уже должны это делать до некоторой степени. Если у вас нет массовой армии ботов, атакующих ваш сервер каждые несколько дней, стоит ли вам попросить их вмешаться. Возможно, попросите их помочь вам определить источник или провести собственное расследование и принять решение оттуда.