d do s survival guide
TRANSCRIPT
DDoS: Практическое руководство к выживанию
Лямин Александр
Экономика DDoS:
• Доступность - высокая
• Cтоимость аренды ботнета – низкая
• Эффективность - высокая
Смотрим врагу в лицоИсчерпание канальной емкости 1 0 0 . 0 0 0 +
Инфраструктура сети 10.000+
Сетевой стек системы 1.000+
Приложение 100+
Cвойства ботнета:• конечность/самосохраняемость• жадность• инертность• ущербность• транснациональность
DDoS - он пришел…
1. Не паникуем2. Удаляем http сервер из автостарта3. Что в top?4. Интересные сообщение в dmesg5. Содержимое netstat6. Анализируем access. Log
Инструментарий1. Linux 2.62. iptables3. ipset4. nginx
HTTP Flood. FrontendМинимизируем размеры буферовlarge_client_header_buffersclient_header_buffer_sizeclient_body_buffer_sizeclient_max_body_size
Минимизируем ожидание клиентаreset_timedout_connection on;client_header_timeoutclient_body_timeoutkeepalive_timeoutsend_timeout
HTTP Flood. FrontendИ ожидаем попавшихся ботов на default vhost server { listen 80; server_name noname; return 444; }
Ограничиваем количество одновременных соединений с одного iplimit_zone conlim $binary_remote_addr XXm;limit_conn conlim XX;
HTTP Flood. BackendБюджетирование нагрузки на скриптовый бэкенд через
limit_req_zone $binary_remote_addr zone=qulim:Xm rate=Yr/s;limit_req zone=qulim burst=Z;
HTTP Flood. Отфильтровать в один запросlog_format $http_accept $http_accept_language $http_accept_encoding;+grep --line-buffered= tail -f /var/log/nginx/myserver.access_log | \grep --line-buffered \-F '*/* en-us -' | \grep --line-buffered -oE "\BOINK [0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3} " | sed -u "s/^BOINK//" | xargs -n1 ipset -A myserv
и вариации на тему из myserv.error_log по ключевому слову limiting
HTTP Flood. Кого фильтровать не нужноВаши собственные ajax скрипты (вставляем заголовки-маркеры)Полезных ботов, например поисковики: 77.88.0.0/18 Yandex 87.250.224.0/19 Yandex 93.158.128.0/18 Yandex 213.180.192.0/19 Yandex 95.108.128.0/17 Yandex 65.52.0.0/14 Microsoft 209.85.128.0/17 Google 81.19.64.0/19 Rambler*
рамблер - это телеком, и там иногда живут боты.
Conntrack abuseip_conntrack: table full, dropping packet ?
Conntrack хранит соединения в hashtable и небесплатен.
При больших размерах таблицы можно:net.ipv4.netfilter.ip_conntrack_tcp_timeout_*
но проще выключить:iptables -t RAW -A PREROUTING -d $PUBLISHED_IP -j NOTRACKiptables -t RAW -A OUTPUT -d $PUBLISHED_IP -j NOTRACK
Большой обьем отфильрованых ботов?
ipsetего чудесные b-tree для плохих ботовipset -N myserv iptree --timeout XXipset -A myserv $OFFENDING_IP
и -N goodbots nethash --hashsize 512 --probes 4 --resize 50для хороших
SYN Flood
syn-cookies!
net.ipv4.tcp_syncookies = 1
Просто много трафика и складывается инфраструктура провайдера?
Домашнее задание
1. Настроенные nginx/ipset на сервере
2. Выключенный conntrack
3. Выделенный ip для публикуемых сервисов
4. Представление о связности хостера