четверг, 10 мая 2018 г.

Защита от SIP флуда.

При получении более 20 SIP пакетов с одного адреса в течение секунды, генерируем событие флуда, которое ловит fail2ban. И блокируем трафик на следующую секунду.

# Пишем количество пакетов, соответствующих правилу, и IP-адрес их источника в список SIP.
-A INPUT -p udp --dport 5060 -i ens34 -m recent --set --name SIP
# Если за секунду поступило больше 20 пакетов, то пишем в лог и блокируем адрес.
-A INPUT -p udp --dport 5060 -i ens34 -m recent --update --seconds 1 --hitcount 20 --name SIP -j LOG --log-prefix "Iptables: SIP flood "
-A INPUT -p udp --dport 5060 -i ens34 -m recent --update --seconds 1 --hitcount 20 --name SIP -j REJECT

Правила нужно вставлять до общего разрешения RELATED,ESTABLISHED.

Далее отлавливаем событие с помощью fail2ban. Создаем новый джеил.
[sip_flood]
enabled = true
filter = sip_flood
port     = 5060,5061
action   = iptables-allports[name=SIP_FLOOD, protocol=all]
               sendmail[name=SIP_FLOOD, dest=admin@domain, sender=server@domain]
logpath  = /var/log/iptables.log
maxretry = 1
bantime  = 600 ; 10 min

В /etc/fail2ban/filter.d/sip_flood.conf.
[INCLUDES]
before = common.conf
[Definition]
failregex = ^(.*)Iptables: SIP flood(.*)SRC=<HOST>(.*)$
ignoreregex =