Использование .htaccess для смягчения атак типа «отказ в обслуживании»

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

Доступ к сайту возможен только через единую страницу входа.

Меня беспокоит DDOS, и я (спасибо друзьям здесь) смог написать скрипт, который распознает потенциальные DDOS-атаки и блокирует определенный IP-адрес, чтобы предотвратить доступ к сайту (также мера безопасности для предотвращения множественных догадок комбинации пароля/имени пользователя)

Есть ли смысл блокировать те IP-адреса, которые оскорбляют .htaccess. Я могу просто изменить файл, чтобы запретить моему серверу доступ к нарушающему IP-адресу в течение определенного периода времени, но принесет ли это пользу? Будут ли входящие запросы по-прежнему засорять систему, даже если .htaccess предотвращает их обслуживание, или это снизит нагрузку, разрешая подлинные запросы?

Стоит отметить, что большинство моих запросов будут исходить от ограниченного диапазона подлинных IP-адресов, поэтому реализация, которую я намереваюсь, выглядит следующим образом:

Если есть подозрение на DDOS-атаку, разрешите доступ только с тех IP-адресов, с которых ранее в течение заданного периода времени был успешный вход в систему. Навсегда заблокируйте все подозрительные IP-адреса, на которых не было успешного входа в систему, если только не был сделан ручной запрос на разблокировку.

Ваш мудрый совет будет принят с благодарностью. Если вы считаете, что это пустая трата времени, пожалуйста, дайте мне знать!

Реализация в значительной степени чистый PHP.


person Robert Seddon-Smith    schedule 13.06.2013    source источник
comment
Насколько реально ваш сайт станет целью DDOS-атаки?   -  person    schedule 13.06.2013
comment
Очень низкий риск, но он предоставляет услугу, где отсутствие услуги является проблемой высокого риска. Я просто хочу построить защиту, насколько это возможно, вместо того, чтобы быть по-настоящему параноиком.   -  person Robert Seddon-Smith    schedule 13.06.2013
comment
это vps или горячий сайт или? если позже я оставлю это хозяину.   -  person    schedule 13.06.2013
comment
В настоящее время размещенный сайт, но я был бы признателен за любое мнение относительно ЛУЧШЕГО способа сделать это. Я предполагаю пару арендованных машин в центре обработки данных.   -  person Robert Seddon-Smith    schedule 13.06.2013
comment
Я бы сам выбрал AWS для любого нового проекта   -  person    schedule 13.06.2013


Ответы (1)


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

Возьмем, к примеру, запрос, сделанный для сценария входа в систему, ваш сервер apache вызовет сценарий PHP, который (я предполагаю) выполнит поиск пользователя в какой-либо базе данных. Это нагрузка.

Request <---> Apache <---> PHP <---> MySQL (maybe)

Если вы заблокируете и ip (скажем, 1.2.3.4), ваш htacess будет иметь дополнительную строку, подобную этой:

Deny from 1.2.3.4

И запрос будет примерно таким:

Request <---> Apache <-x-> [Blocked]

И никаких PHP-скриптов или вызовов базы данных не будет, это меньше нагрузки, чем в предыдущем примере.

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

Межсетевой экран

Однако было бы лучше блокировать запросы с помощью брандмауэра, а не с помощью .htaccess. Таким образом, запрос никогда не попадает в apache, серверу достаточно просто отбросить пакет на основе правила IP-адреса.

Строка ниже представляет собой команду оболочки, которая (при запуске от имени пользователя root) добавит правило iptables для отбрасывания всех пакетов, исходящих с этого IP-адреса:

/sbin/iptables -I INPUT -s 1.2.3.4 -j DROP
person wjdp    schedule 13.06.2013
comment
никакая серьезная защита от DDOS не будет работать на таком высоком уровне, не все типы DDOS-атак приближаются к веб-серверу. уровень rotuer-switch-firewall-os — это место для начала - person ; 13.06.2013
comment
не совсем уверен, что вы говорите @Dagon, это правда, что иметь дело с брандмауэром (даже с программным брандмауэром, iptables и т.п.) было бы чище (опять же больше снизить нагрузку). Таким образом, пакет даже не попадет в apache. - person wjdp; 13.06.2013
comment
большинство DDOS-атак не нацелены на веб-сервер напрямую, поэтому ничто в .htacess не поможет. - person ; 13.06.2013
comment
Большое спасибо - хотелось бы других мнений. Я позабочусь о том, чтобы поговорить со службой хостинга, чтобы убедиться, что она работает. @will, возможно ли удалить правило iptables позже, скажем, если настоящему пользователю нужно войти в систему с заблокированного IP-адреса? - person Robert Seddon-Smith; 13.06.2013
comment
да, то же самое, что и выше, но с опцией -D для удаления этого правила - person wjdp; 14.06.2013