У меня есть сервер AWS, который в настоящее время находится под DDoS через усиление DNS. Я установил журналы CloudWatch для VPC ACL, и он регистрирует огромное количество отклоненного DNS-трафика. Несмотря на то, что этот трафик отклоняется, мой основной сервер недоступен.
У меня есть дополнительный сервер в том же VPC и подсети, к которому можно без проблем подключиться.
Почему я могу получить доступ к одному, но не к другому? ACL должен фильтровать трафик на уровне подсети. Поэтому, если один из них недоступен, они оба должны быть недоступны, но это не так.
И как смягчить атаку с усилением DNS на AWS? У AWS определенно достаточно большие трубы. Почему ACL не работает?
Я решил проблему.
На самом деле было несколько проблем. Я заблокировал только UDP-порт 53 (DNS), и, как оказалось, атаковались и другие порты. Поскольку мой сервер - это просто веб-сервер, я смог заблокировать весь UDP-трафик в ACL. Это разрешило одну сторону атаки.
Они также перегружали мой веб-сервер большими почтовыми запросами от скомпрометированных установок WordPress. Я смог добавить несколько строк в свою конфигурацию Nginx, которые отбрасывали запросы от пользовательских агентов WordPress, а также блокировали большие запросы на публикацию.
Это были настройки, которые я использовал в http
раздел конфигурации Nginx
client_max_body_size 10k;
client_body_buffer_size 10k;
client_header_buffer_size 1k;
large_client_header_buffers 2 1k;
client_body_timeout 6;
client_header_timeout 6;
keepalive_timeout 5;
send_timeout 10;
Тогда в server
раздел конфигурации Nginx Я настраиваю drop для запросов, инициированных WordPress и wget
if ($http_user_agent ~* (wordpress|wget)) {
return 403;
}
Эти настройки значительно усложнили выход из строя сервера.
Я также использовал iptables для ограничения скорости входящих HTTP-соединений.
# Rate limit new connections to port 80
-A INPUT -p tcp -m recent --dport 80 -m state --state NEW --set
-A INPUT -p tcp -m recent --dport 80 -m state --state NEW --update --seconds 20 --hitcount 20 -j DROP
Затем я использовал iptables, чтобы ограничить максимальное количество одновременных подключений к порту 80.
# Limit concurrent connections for a class B to port 80
-A INPUT -p tcp -m tcp --dport 80 --tcp-flags FIN,SYN,RST,ACK SYN -m connlimit --connlimit-above 10 --connlimit-mask 16 --connlimit-saddr -j REJECT --reject-with tcp-reset
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
Все это вместе сделало мои серверы намного более сложными для защиты от DDoS-атак. Сейчас я использую несколько серверов переднего плана для обратного обращения прокси-запросов к внутреннему серверу. Я настраиваю циклический перебор DNS, чтобы открыть несколько IP-адресов. Этот последний дополнительный шаг увеличил общую пропускную способность, с которой я мог справиться в атаке, которая преодолела все другие средства защиты.
Пока что оставшиеся атаки не смогли отключить мой сервер.
Я бы добавил в смесь уровень кеширования / защиты от DDOS, то есть Cloudflare. В прошлом они останавливали большинство DDOS-атак на мои сайты.