У меня есть веб-приложение (NodeJS), и я планирую развернуть его на AWS. Чтобы минимизировать затраты, он будет работать на одном экземпляре EC2. Однако я беспокоюсь о том, что произойдет, если кто-то решит благословить меня с помощью DDOS-атаки и, следовательно, у меня будет несколько вопросов. Я провел довольно много исследований, но, поскольку моего понимания явно не хватает, я прошу прощения, если некоторые из вопросов являются просто глупыми:
Я хочу, чтобы люди не наводняли мой сайт атаками уровня 4. Достаточно ли настроить мою группу безопасности для приема трафика (в дополнение к SSH-порту 22) от:
Тип HTTP
Протокол TCP
Диапазон портов 80
Будет ли выше остановлено UDP-флуд и другие атаки на мой экземпляр EC2?
Через группу безопасности я бы разрешил SSH-подключения к порту 22 только со своего статического IP-адреса. Сможет ли это удержать злоумышленников от попыток полностью атаковать порт 22?
Мой экземпляр EC2 будет работать под управлением Ubuntu. Я хочу избежать атак на уровне приложений (уровень 7) и планировал делать это непосредственно из моего приложения, поэтому каким-то образом определяю, не наводняет ли определенные IP-адреса определенные URL-адреса, и при необходимости блокирует их. Однако это кажется немного запоздалым, поскольку трафик уже попадает на мой веб-сервер, и мой сервер все равно должен делать эту работу. Поэтому вместо того, чтобы делать это непосредственно из моего приложения, я подумал, можно ли использовать IP-таблицы для блокировки любого подозрительного трафика, прежде чем он попадет на мой веб-сервер. Есть ли набор общих настроек, с помощью которых можно распознать мошенническое поведение и заблокировать нарушителей? Я планировал изучить fail2ban в надежде, что это упростит процесс. Теперь я понимаю, что если он зайдет так далеко, он все равно поразит мой экземпляр EC2, но я хочу защитить свое приложение, например, от атаки методом грубой силы.
Сможет ли AWS CloudFront отразить большинство атак DDOS уровня 4? Если нет, то с помощью бесплатного CloudFlare будет иметь значение?
Допустим, кто-то все равно наводняет мой сайт, и это приводит к большему трафику, чем я ожидал. Есть ли способ остановить зарядку в какой-то момент? Есть предупреждения о выставлении счетов, но я не вижу способа установить жесткие ограничения для 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, если ваша пропускная способность сети превышает лимит.
Редактировать:- Одна из важных вещей - попытаться настроить инструмент мониторинга (например, Nagios) и инструмент управления журналами доступа к веб-приложениям. Это поможет вам найти узкое место.
От DDOS-атак можно справиться разными способами:
Теперь, когда у вас есть сложная архитектура для вашего веб-сервера, я бы предложил пойти путем изменения вашей архитектуры. Я написал подробный блог о том, какие услуги вам следует использовать для смягчить DDOS-атаки на AWS
Если у вас возникла такая проблема с одним экземпляром, и вы не хотите много тратить на другие ресурсы AWS, тогда я написал другой блог, в котором будут продемонстрированы способы предотвратить DDOS на инстансе EC2 без использования сторонних инструментов.
Надеюсь, это поможет, дайте мне знать, если вам нужно больше информации по той же теме.