Обмен технологиями

[HBZ Sharing] Как избежать TCP-флуд-атак

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Принцип обычной атаки наводнением

  1. Когда второе рукопожатие TCP устанавливает полусоединение, в это время можно запустить флуд-атаку.
  2. То есть большое количество запросов инициируют TCP-соединения. Во время второго рукопожатия сервер помещает эти запросы в очередь полуподключений. Поскольку эти злонамеренные атакующие клиенты не подтвердят третье рукопожатие, эти полуподключения не могут быть обработаны. Отпустите, сервер будет ждать истечения времени ожидания. В это время очередь полуподключений будет заполнена, и на обычные запросы невозможно будет ответить. Это способ флуд-атаки.

Как бороться с флуд-атаками в целом

  1. Когда режим syncookies включен, сервер вычисляет хеш-значение (SHA1) на основе (адреса источника, порта источника, адреса назначения, порта назначения и т. д.) и случайного числа во время первого рукопожатия, а затем второго рукопожатия. будет использовать это. Сгенерированные файлы синхронизации возвращаются клиенту. Когда клиент подтвердит третье рукопожатие, он отправит файлы синхронизации на сервер. Сервер проверит, соответствует ли файл синхронизации предыдущему. Если он соответствует, будет установлено TCP-соединение. учредил.
  2. Преимущество этого подхода: если сервер не получает или полученные синхронизирующие файлы не совпадают, TCP-соединение не будет установлено. А при использовании syncookies сервер не будет поддерживать очередь полусоединения, то есть состояние полусоединения отсутствует. Поскольку при использовании syncookies для сравнения нет необходимости в полуподключении, он позволяет избежать очереди полуподключения. заполняется и препятствует получению новых соединений.

Сценарии, которые Syncookies не может решить

  1. При запуске большого количества DDOS-атак метод syncookies также будет парализован. Причина паралича заключается в том, что процессору приходится вычислять большое количество syncookies, что приводит к его остановке. Поскольку вычисление синкуков также снижает производительность ЦП, он не может справиться с огромным количеством DDOS. В настоящее время единственным вариантом является увеличение пропускной способности и настройка жесткого ограничения.

Другие решения

  1. Увеличьте очередь полусоединения и очередь полного соединения (этот метод в принципе неэффективен для массовых атак)
  2. Уменьшите количество повторных передач SYN+ACK (TCP полагается на повторные передачи для поддержания стабильного соединения), то есть, когда он получает флуд-атаку из большого количества запросов синхронизации, сервер будет продолжать повторять попытки, если он не сможет получить ответ до тех пор, пока максимальное количество раз. Уменьшите это максимальное количество раз. Это принесет вам некоторое облегчение.

Как проверить, подверглись ли вы нападению потопа

1. 先进行流量查看:
sar -n DEV 1 -h

然后只看eth0即可-->用rxkb/s 和 rxpck/s 这两列相除-->如果得出的包就50-60几字节,
那就说明是小包搞鬼,有可能遭受洪水攻击了,一般来说最大MTU = 1460

2. 如果发现是小包搞鬼,那就再进行网络抓包, 输入如下命令
tcpdump -i eth0 -n tcp port 80

3. 看有多少个[S], 这个表示发起TCP请求阶段,如果[S]过多,那就说明是洪水攻击,这是洪水攻击的特征


4. 进一步确认是洪水攻击,查询半连接的池子大小,以及当前半连接数量
半连接总大小: cat /proc/sys/net/ipv4/tcp_max_syn_backlog
当前半连接数: ss -s 或 netstat -n -p | grep SYN_RECV | wc -1



[S]: SYN,开始连接
[P]: PSH, 推送数据
[F]: FIN, 结束连接
[R]: RST, 重置连接
[.]: 没有Flag,可能是ACK 也可能是URG

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24