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

Можно ли заставить Apache не отправлять ответы на определенные запросы?

Пытаясь укрепить общедоступный веб-сервер, мой коллега и я разработали план, который включает в себя выполнение Apache определенных запросов "черной дыры". Например, запросы phpmyadmin (который не запущен) или другие очевидные попытки взлома / злонамеренных действий, мы хотим, чтобы apache даже не отвечал.

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

Крупные сайты, которым необходимо защищать свое приложение, используют так называемую Network IDS (систему обнаружения вторжений, также известную как IPS (система предотвращения вторжений), которая может отклонять пакеты на основе определенных критериев (исходный IP-адрес, поведение, отпечаток и т. Д.). Многие IDS позволит вам сбросить пакет на пол (например, без ответа), немедленно завершить сеанс TCP / UDP, добавить вас в черный список, направить сеанс в приманку и т. д. Эта тема может быть чрезвычайно сложной и очень интересно: Cisco и другие продают для вас дорогие устройства, некоторые администраторы безопасности проводят на этом свою карьеру и т. д. Крупные сайты, такие как Facebook, Twitter и Google, имеют чрезвычайно сложные IDS, которые делают очень интересные вещи.

IDS - это устройство на уровне сети, а не на уровне приложения. IDS на уровне приложений по-прежнему подвержена ряду других атак, таких как DDOS, атаки на уровне TCP и IP и т. Д.

Однако не все могут реализовать сетевую IDS. На уровне Apache многие люди используют mod_security как IDS уровня приложения. По умолчанию mod_security уже имеет возможность защитить сайт от ряда распространенных атак и может быть настроен для выполнения определенных действий по вашему желанию. mod_security можно запустить в «разрешающем режиме», когда он будет предупреждать об атаках и печатать то, что, по его мнению, должен делать, и «режим блокировки», где он будет активно блокировать предполагаемые атаки. Из их FAQ:

https://github.com/SpiderLabs/ModSecurity/wiki/ModSecurity-Frequent-Asked-Questions-%28FAQ%29#wiki-What_exactly_is_ModSecurity

ModSecurity ™ - это бесплатный модуль Apache брандмауэра веб-приложений (WAF) с открытым исходным кодом. Поскольку более 70% всех атак в настоящее время осуществляется на уровне веб-приложений, организациям необходима любая помощь, которую они могут получить для обеспечения безопасности своих систем. WAF развертываются для создания внешнего уровня безопасности, который повышает безопасность, обнаруживает и предотвращает атаки до того, как они достигнут веб-приложений. Он обеспечивает защиту от ряда атак на веб-приложения и позволяет отслеживать и анализировать HTTP-трафик в реальном времени с небольшими изменениями существующей инфраструктуры или вообще без них.

Удаление сеанса на этом уровне в стеке OSI немного неуклюже, но некоторые люди делают что-то близкое. Видеть Как отбросить все запросы с помощью mod_security

mod_security - не всегда простая перспектива, но mod_rewrite также может быть очень сложным. mod_security имеет много документации и опытное сообщество пользователей, из которых можно почерпнуть.

Чего вы здесь пытаетесь достичь? Неудобство людям, которые могут атаковать ваш сервер или защитить ваш сервер? 2 несовместимы.

Apache не может вмешиваться в работу сетевого стека, чтобы не отвечать; это означает, что вам нужно держать соединение открытым, а это значит, что вы искусственно поддерживаете вращение процесса намного дольше, чем требуется. Таким образом, это становится действительно эффективным активом для всех, кто хочет реализовать DOS на вашем сайте - они просто бьют вас примерно 500 запросами на phpmyadmin, и каждый слот на вашем сервере привязан.

Вы можете перенаправить их на адрес черной дыры, но тогда у вас есть расходы на поддержание статического IP-адреса, который ничего не делает.

Кроме того, вы верите, что «детишки сценариев» знают, как настроить короткий тайм-аут на своих клиентах? Вы отразили только один запрос, выполнив это.

Лучшее решение - перехватить и зарегистрировать эти запросы и использовать журнал (или просто отфильтровать error_log) для подачи fail2ban. Таким образом, вы можете установить блокировку в брандмауэре, которая будет препятствовать им до того, как они смогут определить, какое программное обеспечение у вас установлено.