Как отбрасывать «пустые» HTTP-пакеты с помощью iptables? [дубликат]

На этот вопрос уже есть ответ:

У меня есть сайт с 1 ГБ VPS, работающий на Ubuntu 10.04 LTS. Я использую nginx в качестве веб-сервера. Сайт работает в относительно стабильной конфигурации в течение трех лет и обрабатывает около 4 миллионов просмотров страниц в месяц.

В течение последних 16 часов я наблюдал, как мне кажется, «умеренную» DDoS-атаку. Исходящий трафик увеличился в 5 раз, а загрузка ЦП увеличилась примерно втрое. Я вижу в своих журналах nginx один или два IP-адреса, которые каждую секунду отправляют несколько запросов одновременно (1-10 каждый). Эти запросы, похоже, идут не на мой URL-адрес, а напрямую на мой IP-адрес. Поскольку мне нравится nginx.conf, я установил там отдельный серверный блок "по умолчанию", чтобы улавливать этот трафик и регистрировать его. Я настроил его для регистрации этого трафика и возврата ему кода ошибки 444. Я также установил limit_req_zone и limit_conn_zone для этого трафика, хотя, поскольку это разные IP-адреса, отправляющие запросы, это мало влияет. Вот соответствующий раздел nginx.conf:

limit_req_zone  $binary_remote_addr  zone=ddos:25m   rate=1r/m;
limit_conn_zone $binary_remote_addr zone=blockedfuckers:20m;    
server {
    listen 80 default_server;
    server_name _;
    access_log /var/log/nginx/a2.log hackers;
    limit_req zone=ddos nodelay;
    limit_conn blockedfrakers 1;
    return 444;
}

Это снизило загрузку ЦП примерно на 30%, но исходящий трафик по-прежнему высок, а ЦП по-прежнему в два раза больше нормы. По какой-то причине в журнале на отправляемые запросы отображается ответ 400, а не 444, которые я пытаюсь отправить. Например:

109.198.195.28 [12/Mar/2013:22:49:24 -0400], REQLENGTH: 0, STATUS: 400, HTTPHEADER: -
107.199.204.111 [12/Mar/2013:22:49:36 -0400], REQLENGTH: 0, STATUS: 400, HTTPHEADER: -
107.199.204.111 [12/Mar/2013:22:49:36 -0400], REQLENGTH: 0, STATUS: 400, HTTPHEADER: -
107.199.204.111 [12/Mar/2013:22:49:36 -0400], REQLENGTH: 0, STATUS: 400, HTTPHEADER: -
107.199.204.111 [12/Mar/2013:22:49:36 -0400], REQLENGTH: 0, STATUS: 400, HTTPHEADER: -
107.199.204.111 [12/Mar/2013:22:49:36 -0400], REQLENGTH: 0, STATUS: 400, HTTPHEADER: -

Мне они кажутся «пустыми», поэтому я пытаюсь настроить iptables так, чтобы они просто отбрасывались, но кое-что из того, что я пробовал, не сработало. Есть идеи, как настроить таргетинг и сбросить этот трафик?

2
задан 13 March 2013 в 04:54
1 ответ

Если вы уверены, что полезная нагрузка TCP равна 0, вы можете попробовать с параметром --length iptables. Эти параметры соответствуют полезной нагрузке уровня 3. Это правило должно работать:

iptables -I INPUT -p tcp --dport 80 -m length --length 20 -j DROP

Размер заголовка TCP обычно равен 20 (может быть больше, но попробуйте с 20 и посмотрите результаты). Итак, это правило отбрасывает пакеты, которые содержат только пакет с заголовком TCP и без полезной нагрузки.

1
ответ дан 3 December 2019 в 13:01

Теги

Похожие вопросы