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

Как предотвратить DDOS-атаки на AWS?

У меня есть веб-приложение (NodeJS), и я планирую развернуть его на AWS. Чтобы минимизировать затраты, он будет работать на одном экземпляре EC2. Однако я беспокоюсь о том, что произойдет, если кто-то решит благословить меня с помощью DDOS-атаки и, следовательно, у меня будет несколько вопросов. Я провел довольно много исследований, но, поскольку моего понимания явно не хватает, я прошу прощения, если некоторые из вопросов являются просто глупыми:

  1. Я хочу, чтобы люди не наводняли мой сайт атаками уровня 4. Достаточно ли настроить мою группу безопасности для приема трафика (в дополнение к SSH-порту 22) от:

    Тип HTTP

    Протокол TCP

    Диапазон портов 80

Будет ли выше остановлено UDP-флуд и другие атаки на мой экземпляр EC2?

  1. Через группу безопасности я бы разрешил SSH-подключения к порту 22 только со своего статического IP-адреса. Сможет ли это удержать злоумышленников от попыток полностью атаковать порт 22?

  2. Мой экземпляр EC2 будет работать под управлением Ubuntu. Я хочу избежать атак на уровне приложений (уровень 7) и планировал делать это непосредственно из моего приложения, поэтому каким-то образом определяю, не наводняет ли определенные IP-адреса определенные URL-адреса, и при необходимости блокирует их. Однако это кажется немного запоздалым, поскольку трафик уже попадает на мой веб-сервер, и мой сервер все равно должен делать эту работу. Поэтому вместо того, чтобы делать это непосредственно из моего приложения, я подумал, можно ли использовать IP-таблицы для блокировки любого подозрительного трафика, прежде чем он попадет на мой веб-сервер. Есть ли набор общих настроек, с помощью которых можно распознать мошенническое поведение и заблокировать нарушителей? Я планировал изучить fail2ban в надежде, что это упростит процесс. Теперь я понимаю, что если он зайдет так далеко, он все равно поразит мой экземпляр EC2, но я хочу защитить свое приложение, например, от атаки методом грубой силы.

  3. Сможет ли AWS CloudFront отразить большинство атак DDOS уровня 4? Если нет, то с помощью бесплатного CloudFlare будет иметь значение?

  4. Допустим, кто-то все равно наводняет мой сайт, и это приводит к большему трафику, чем я ожидал. Есть ли способ остановить зарядку в какой-то момент? Есть предупреждения о выставлении счетов, но я не вижу способа установить жесткие ограничения для AWS и сказать, что экземпляр будет отключен, если пропускная способность превышена.

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

1) Настройка группы безопасности - это простой и важный уровень безопасности. Если вы запускаете какое-либо веб-приложение, то порт 80/443 должен быть открыт для всего мира, а порт 22 для удаленного доступа к серверу через ssh должен быть разрешен только с определенного IP-адреса. За исключением этих 3 портов весь трафик будет заблокирован. Вы можете протестировать с помощью инструмента сканирования портов или NMAP.

2) Ограничьте доступ для SSH только своим статическим IP-адресом, а также для доступа к экземпляру EC2 через ssh вам понадобится ключ. Если злоумышленник каким-то образом узнает ваш IP-адрес, он / она не сможет получить доступ к вашему серверу без ключа.

Примечание. - Если вы используете CDN (CloudFlare), ваш статический IP-адрес EC2 уже скрыт.

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

Для этого вы можете использовать правила брандмауэра Linux: -

iptables -I INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --set
iptables -I INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --update --seconds 60 --hitcount 10 -j DROP
iptables-save >/etc/iptables.up.rules

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

Чтобы проверить количество одновременных подключений от всех клиентов, подключенных к вашему серверу: -

 netstat -tn 2>/dev/null | grep :80 | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr | head 

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

12  10.1.1.1
160 162.19.17.93

В приведенном выше примере первое число - это количество подключений, за которым следует исходный IP-адрес.

Примечание: - На сильно загруженном сервере количество подключений может быть больше 100, но во время DDOS-атаки количество будет еще больше. Для среднего хоста, если у вас более 30 подключений с одного IP-адреса, скорее всего, вы подверглись атаке. Если более 5 таких IP / хостов подключены к одной сети, это явный признак DDOS-атаки.

Выход lsof,netstat и tcpdump очень полезны при обнаружении таких проблем.

Теперь вы получаете IP-адрес клиента, который вы можете использовать IPtables для блокировки этого IP-адреса или команду tcpkill для этого. TCPKILL является частью пакета dsniff.

apt-get install dsniff

Затем выдайте: -

tcpkill host x.x.x.x

Вышеупомянутый метод хорош, и при правильном применении он поможет вам смягчить небольшую DDOS-атаку. Теперь, если вы используете CDN (CloudFlare), вы можете заблокировать злоумышленника только на этом уровне. Вы можете использовать CloudFlare API, чтобы заблокировать IP-адрес. При этом трафик к вам на сервер не пойдет.

Узнать больше на Документ CloudFlare API

Обратитесь к описанному выше методу и создайте сценарий, который поможет вам в автоматизации.

4) На мой взгляд CloudFlare лучше CloudFront. CloudFlare прост в настройке, и с одной панели управления вы можете управлять всем. Даже если вы обнаружите большой объем ненужного трафика, режим Cloudflare «Я под атакой» уменьшит его менее чем за 5-10 секунд.

Узнайте больше о DDOS и режиме атаки на меня в блогах Cloudflare.

5) Вы можете настроить AWS Alarms для остановки / завершения инстанса EC2, если ваша пропускная способность сети превышает лимит.

Пример сигналов тревоги AWS

Редактировать:- Одна из важных вещей - попытаться настроить инструмент мониторинга (например, Nagios) и инструмент управления журналами доступа к веб-приложениям. Это поможет вам найти узкое место.

От DDOS-атак можно справиться разными способами:

  1. Изменяя архитектуру (ресурсы AWS)
  2. Используя инструменты и утилиты (встроенные инструменты в экземплярах ec2)

Теперь, когда у вас есть сложная архитектура для вашего веб-сервера, я бы предложил пойти путем изменения вашей архитектуры. Я написал подробный блог о том, какие услуги вам следует использовать для смягчить DDOS-атаки на AWS

Если у вас возникла такая проблема с одним экземпляром, и вы не хотите много тратить на другие ресурсы AWS, тогда я написал другой блог, в котором будут продемонстрированы способы предотвратить DDOS на инстансе EC2 без использования сторонних инструментов.

Надеюсь, это поможет, дайте мне знать, если вам нужно больше информации по той же теме.