IPTABLES: блокировка самых распространенных атак

Зачастую хостеры отдают в распоряжение пользователей не настроенные серверы. Тем не менее, не будет лишним сбросить все правила фаервола при помощи следующей команды:

iptables -F

Кроме того, существует несколько простых команды, которые способны “отразить” некоторые виды атак. Во-первых, заблокируйте нулевые пакеты:

iptables -A INPUT -p tcp –tcp-flags ALL NONE -j DROP

Данная мера необходима для того, чтобы фаервол не принимал входящие пакеты с tcp-флагами. По большому счету нулевые пакеты используются для выяснения настроек сервера и выявления его уязвимостей.

Команда для отражения атак syn-flood:

iptables -A INPUT -p tcp ! –syn -m state –state NEW -j DROP

В ходе атаки syn-flood создается новое соединение без каких-либо флагов (SYN, ACK и пр.). Делается это лишь с одной целью 一 отнять ресурсы сервера.

Команда для защиты от разведывательных пакетов XMAS:

iptables -A INPUT -p tcp –tcp-flags ALL ALL -j DROP

Для того, чтобы правила были доступны и после перезагрузки IPTABLES или httpd, выполните следующую команду:

service iptables save

 

https://shneider-host.ru/blog/iptables-blokirovka-samyh-rasprostranennyh-atak.html

 

 

Сбор информации о сетевых соединениях

Просмотр открытых соединений

netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n

Количество подключений к 80 порту

netstat -na | grep ":80\ " | wc -l

TCP-дамп подключений (на какой домен чаще всего идут запросы)

tcpdump -npi eth0 port domain

SYN-флуд можно проверить через подсчет числа полуоткрытых TCP-соединений

netstat -na | grep ":80 " | grep SYN_RCVD

Защита от разных видов флуда.

ICMP-флуд. Очень примитивный метод забивания полосы пропускания и создания нагрузок на сетевой стек через монотонную посылку запросов ICMP ECHO (пинг). Легко обнаруживается с помощью анализа потока трафика в обе стороны: во время атаки типа ICMP-флуд они практически идентичны. Почти безболезненный способ абсолютной защиты основан на отключении ответов на запросы ICMP ECHO:

sysctl net.ipv4.icmp_echo_ignore_all=1

Или с помощью iptabels:

iptables -A INPUT -p icmp -j DROP --icmp-type 8

SYN-флуд. Один из распространенных способов не только забить канал связи, но и ввести сетевой стек операционной системы в такое состояние, когда он уже не сможет принимать новые запросы на подключение. Основан на попытке инициализации большого числа одновременных TCP-соединений через посылку SYN-пакета с несуществующим обратным адресом. После нескольких попыток отослать ответный ACK-пакет на недоступный адрес большинство ОС ставят неустановленное соединение в очередь. И только после n-ой попытки закрывают соединение. Так как поток ACK-пакетов очень велик, вскоре очередь оказывается заполненной, и ядро дает отказ на попытки открыть новое соединение. Наиболее умные DoS-боты еще и анализируют систему перед началом атаки, чтобы слать запросы только на открытые жизненно важные порты. Идентифицировать такую атаку просто: достаточно попробовать подключиться к одному из сервисов.

Оборонительные мероприятия обычно включают в себя:

Увеличение очереди “полуоткрытых” TCP-соединений:

sysctl -w net.ipv4.tcp_max_syn_backlog=1024

Уменьшение времени удержания “полуоткрытых” соединений:

sysctl -w net.ipv4.tcp_synack_retries=1

Включение механизма TCP syncookies:

sysctl -w net.ipv4.tcp_syncookies=1

Ограничение максимального числа “полуоткрытых” соединений с одного IP к конкретному порту:

iptables -I INPUT -p tcp --syn --dport 80 -m iplimit --iplimit-above 10 -j DROP

UDP-флуд. Типичный метод захламления полосы пропускания. Основан на бесконечной посылке UDP-пакетов на порты различных UDP-сервисов. Легко устраняется за счет отрезания таких сервисов от внешнего мира и установки лимита на количество соединений в единицу времени к DNS-серверу на стороне шлюза:

iptables -I INPUT -p udp --dport 53 -j DROP -m iplimit --iplimit-above 1

HTTP-флуд. Один из самых распространенных на сегодняшний день способов флуда. Основан на бесконечной посылке HTTP-сообщений GET на 80-ый порт с целью загрузить web-сервер настолько, чтобы он оказался не в состоянии обрабатывать все остальные запросы. Часто целью флуда становится не корень web-сервера, а один из скриптов, выполняющих ресурсоемкие задачи или работающий с базой данных. В любом случае, индикатором начавшейся атаки будет служить аномально быстрый рост логов web-сервера.

Определившись с IP виновника начинаем дропать по IP-адресам

iptables -A INPUT -s xxx.xxx.xxx.xxx -p tcp --destination-port http -j DROP

Или сразу по подсетям:

iptables -A INPUT -s xxx.xxx.0.0/16 -p tcp --destination-port http -j DROP

Для ограничения количества одновременных подключений к серверу для клиента по IP используется модуль connlimit. Ограничим количество параллельных подключений по SSH до трех, для одного клиента

iptables -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 3 -j REJECT

Ограничим количество параллельных подключений по HTTP до трех, для одного клиента

iptables -p tcp --syn --dport 80 -m connlimit --connlimit-above 20 --connlimit-mask 24 -j DROP

где

  • --connlimit-above 10 – условие для проверки одновременных подключенийне более 10;
  • --connlimit-mask 24 – группировка хостов по длине префикса (для IPv4 это число должно быть 0 и 32;

Также ограничить количество подключений в единицу времени можно с помощью модуля limit.

iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT

где

  • -m limit – подключаем модуль limit;
  • –limit 25/minute – порог в 25 подключений в минуту;
  • –limit-burst 100 – условие включения порога: после достижения 100 подключений;

Полезные советы

Добавь в /etc/sysctl.conf следующие строки:

# vim /etc/sysctl.conf

# Защита от спуфинга
net.ipv4.conf.default.rp_filter = 1

# Проверять TCP-соединение каждую минуту. Если на другой стороне - легальная машина, она сразу ответит. Дефолтовое значение - 2 часа.
net.ipv4.tcp_keepalive_time = 60

# Повторить пробу через десять секунд
net.ipv4.tcp_keepalive_intvl = 10

# Количество проверок перед закрытием соединения
net.ipv4.tcp_keepalive_probes = 5

Интересный материал по теме – Доступные методы борьбы с DDoS-атаками для владельцев vds/dedicated серверов с Linux.

http://proft.me/2013/06/15/iptables-setevaya-bezopasnost-i-filtraciya-paketov/

Leave a Comment

Your email address will not be published. Required fields are marked *

Shares