Защита от DoS атак в Linux

09.04.2003 12:41

Иван Песин перевел статью, которая повествует о том как минимизировать причиненные убытки и оперативно отреагировать на 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