Как бороться с DDOS атаками на node?

Ребят подскажите как кидать в blacklist ip которые DDOS-ят сервер? или хоть скажите как получить количество конекшенов конкретной IP?
  • Вопрос задан
  • 3189 просмотров
Пригласить эксперта
Ответы на вопрос 5
bingo347
@bingo347 Куратор тега Node.js
Crazy on performance...
Примерно так:
var http = require('http');
var ipTables = {};

var server = http.createServer((req, res) => {
    //Ваш обработчик запроса или express/connect вместо него
});

server.on('connection', socket => {
    var ip = socket.address().address;
    var time = Date.now();
    if(ip in ipTables) {
        if(time - ipTables[ip].time > 3000) {
            ipTables[ip] = {
                count : 1,
                time
            };
            return;
        }
        ipTables[ip].count++;
        ipTables[ip].time = time;
        if(ipTables[ip].count > 100) {
            socket.end('HTTP/1.1 429 Too Many Requests\n\n');
            socket.destroy(); //Обрываем соеденение, так как ip ломится слишком часто
        }
        return;
    }
    ipTables[ip] = {
        count : 1,
        time
    };
});

server.listen(80);
Ответ написан
Комментировать
@Nc_Soft
Это не нодой нужно делать.
Ответ написан
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
BAN=5^T;
Trigger: 5 qps (5 (queries per second) запросов в секунду с одного адреса на один и тот же URI)

Сработал триггер 1-й раз: BAN+=5^1 (5 секунд бан к оставшемуся времени)
Сработал триггер 2-й раз: BAN+=5^2 (25 секунд бан к оставшемуся времени)
Сработал триггер 3-й раз: BAN+=5^3 ((~2мин) 125 секунд бан к оставшемуся времени)
и т.д.

Кол-во срабатываний (счётчик) триггера инкрементируется до тех пор, пока не истечёт время BAN'a. Как только время истекло - счётчик триггера сбрасывается.
Ответ написан
Комментировать
@netW0rm
  1. Проксировать трафик через nginx (инструкции в гугле)
  2. Настраивать защиту от DDOS (и еще много всего полезного) в nginx (инструкции в гугле)
  3. Профит)
Ответ написан
Комментировать
Animir
@Animir
Senior Web Dev
Если настроить защиту в proxy или load balancer не вариант по каким то причинам, придется делать это в node.js

Я использую пакет rate-limiter-flexible
Позволяет ограничивать трафик, настроить дополнительные правила, а также у него есть стратегии блокировки и страховки, если у вас node.js запущен в кластере или на нескольких серверах
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы