Иван Песин перевел статью, которая повествует о том как минимизировать причиненные убытки и оперативно отреагировать на DoS атаки (отказ в обслуживании, Denial of Service) в Linux.
Кратко:
"SYN-flood" - ограничение скорости поступающих пакетов с установленным флагом syn.
Организовывается очередь с ограниченной скоростью:
#!/bin/sh
# Входящий интерфейс
DEV=eth2
# маркируем все входящие SYN-пакеты
# на интерфейсе $DEV значением 1
ipchains -A input -i $DEV -p tcp -y -j MARK --set-mark 1
# устанавливаем дисциплину обработки очереди входящих пакетов
tc qdisc add dev $DEV handle ffff: ingress
# Длина пакетов с установленным флагом SYN
# равна 40 байтам (320 бит)
# потому три SYN-пакета равны 960 битам (или скорости 1кбит)
# Теперь ограничим скорость до 3 пакетов в секунду
tc filter add dev $DEV parent ffff: protocol ip \
prio 50 handle 1 fw police rate 1kbit burst 40 \
mtu 9k drop flowid :1
Ограничение скорость исходящих ICMP пакетов до приемлемой для нормальной работы и неприемлемой для атак:
# Внешний интерфейс
EXT_IF=eth2
# Локальный интерфейс
INT_IF=eth0
# Наша локальная сеть
LAN="10.1.1.0/24"
# блокируем все входящие пакеты на локальном интерфейсе
# с адресом источника не из локальной сети
ipchains -A input -i $INT_IF -s $LAN -j ACCEPT
ipchains -A input -i $INT_IF -j DENY -l
# назначаем дисциплину обработки очереди
tc qdisc add dev eth0 root handle 1: cbq bandwidth 10Mbit avpkt 1000
tc class add dev eth0 parent 1:0 classid 1:10 cbq \
bandwidth 10Mbit rate 10Mbit allot 1514 prio 5 \
maxburst 20 avpkt 1000
# выделяем класс для ICMP пакетов
tc class add dev eth0 parent 1:10 classid 10:100 \
cbq bandwidth 10Mbit rate 100Kbit allot 1514 \
weight 5 prio 5 maxburst 20 avpkt 250 bounded
# заворачиваем все ICMP пакеты в выделенный класс
tc filter add dev eth0 parent 10:0 protocol ip \
prio 100 u32 match ip protocol 1 0xFF flowid 10:100
|