Защита от DDoS атак с помощью ufw

Linux
Linux

Для начала давайте разберемся, что же всё таки такое DDoS-атака.

DDoS-атака — это распределённая атака на сервер или службу, которая создает повышенную нагрузку на сервер и приводит к частичному или полному отказу системы. В это время обычные пользователи как правило наблюдают либо очень медленный отклик сервиса, либо сервис полностью не доступен для пользователей.

Кстати DDoS расшифровывается как Distributed Denial of Service, если переводить дословно, получим — Распределенный Отказ в Обслуживании.

В данной статье я разберу как можно максимально обезопасить себя от подобных атак с помощью штатного фаервола на системах ubuntu, а именно ufw.

Для начала проверьте что ваш ufw выключен, с помощью команды:

ufw status

Команда должна вернуть ответ Status: inactive если это не так, то для начала желательно выключить ufw командой

ufw disable

Так же, настоятельно рекомендую, обязательно проверьте что у вас есть доступ к машине иными способами (кроме как ssh). Поскольку при настройке фаерволов всегда остается шанс потери доступа к серверу «из вне».

Теперь переходим к настройке, для начала разрешаем входящие ssh соединения:

## в случае если разрешаем ssh "отовсюду"
ufw allow 22
## если конкретных адресов или подсетей то используйте строку ниже:
## ufw allow from <ip addres or network> to any port 22

Теперь на всякий пожарный делаем бэкап текущей конфигурации командой:

cp /etc/ufw/before.rules /etc/ufw/before.rules.back

И редактируем оригинальный файл, добавляем новую цепочку в блоке *filter:

:ufw-http - [0:0]
:ufw-http-logdrop - [0:0]

И правила для неё, выше строчки COMMIT:

### DDoS Protect ###
# Enter rule
-A ufw-before-input -p tcp --dport 80 -j ufw-http
-A ufw-before-input -p tcp --dport 443 -j ufw-http

# Limit syn 
-A ufw-http -p tcp --syn -m connlimit --connlimit-above 50 --connlimit-mask 24 -j ufw-http-logdrop

# Limit connections per IP
-A ufw-http -m state --state NEW -m recent --name conn_per_ip --set
-A ufw-http -m state --state NEW -m recent --name conn_per_ip --update --seconds 10 --hitcount 20 -j ufw-http-logdrop

# Limit packets per IP
-A ufw-http -m recent --name pack_per_ip --set
-A ufw-http -m recent --name pack_per_ip --update --seconds 1 --hitcount 20 -j ufw-http-logdrop

# Finally accept
-A ufw-http -j ACCEPT

# Log
-A ufw-http-logdrop -m limit --limit 3/min --limit-burst 10 -j LOG --log-prefix "[UFW HTTP DROP] "
-A ufw-http-logdrop -j DROP
### DDoS Protect ###

Этими правилами мы ограничиваем:

  • Количество соединений — 20 шт. на каждый IP адрес в пределах 10 секунд
  • Количество пакетов — 20 пакетов в секунду с каждого адреса
  • Логируем превышение правил с префиксом UFW HTTP DROP

Осталось только включить и перезагрузить ufw:

ufw enable
ufw reload

Оставьте первый комментарий

Отправить ответ

Ваш e-mail не будет опубликован.


*