d do s survival guide

17
DDoS: Практическое руководство к выживанию Лямин Александр

Upload: alexander-lyamin

Post on 27-May-2015

82 views

Category:

Documents


6 download

TRANSCRIPT

Page 1: D do s survival guide

DDoS: Практическое руководство к выживанию

Лямин Александр

Page 2: D do s survival guide

Экономика DDoS:

• Доступность - высокая

• Cтоимость аренды ботнета – низкая

• Эффективность - высокая

Page 3: D do s survival guide

Смотрим врагу в лицоИсчерпание канальной емкости 1 0 0 . 0 0 0 +

Инфраструктура сети 10.000+

Сетевой стек системы 1.000+

Приложение 100+

Page 4: D do s survival guide

Cвойства ботнета:• конечность/самосохраняемость• жадность• инертность• ущербность• транснациональность

Page 5: D do s survival guide

DDoS - он пришел…

1. Не паникуем2. Удаляем http сервер из автостарта3. Что в top?4. Интересные сообщение в dmesg5. Содержимое netstat6. Анализируем access. Log

Page 6: D do s survival guide

Инструментарий1. Linux 2.62. iptables3. ipset4. nginx

Page 7: D do s survival guide

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

Page 8: D do s survival guide

HTTP Flood. FrontendИ ожидаем попавшихся ботов на default vhost       server { listen 80; server_name noname; return 444; }

Ограничиваем количество одновременных соединений с одного iplimit_zone conlim $binary_remote_addr XXm;limit_conn conlim XX;

Page 9: D do s survival guide

HTTP Flood. BackendБюджетирование нагрузки на скриптовый бэкенд через

limit_req_zone $binary_remote_addr zone=qulim:Xm rate=Yr/s;limit_req zone=qulim burst=Z;

Page 10: D do s survival guide

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

Page 11: D do s survival guide

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*

рамблер - это телеком, и там иногда живут боты.

Page 12: D do s survival guide

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

Page 13: D do s survival guide

Большой обьем отфильрованых ботов?

ipsetего чудесные b-tree для плохих ботовipset -N myserv iptree --timeout XXipset -A myserv $OFFENDING_IP

и -N goodbots nethash --hashsize 512 --probes 4 --resize 50для хороших

Page 14: D do s survival guide

SYN Flood

syn-cookies!

net.ipv4.tcp_syncookies = 1

Page 15: D do s survival guide

Просто много трафика и складывается инфраструктура провайдера?

Page 16: D do s survival guide

Домашнее задание

1. Настроенные nginx/ipset на сервере

2. Выключенный conntrack

3. Выделенный ip для публикуемых сервисов

4. Представление о связности хостера

Page 17: D do s survival guide

Ничего не помоголо?

hll.msu.ru

[email protected]