Ярлыки

Memories ( 25 ) Unix ( 14 ) FreeBSD ( 8 ) www ( 4 ) Scripts ( 3 ) GEOM ( 2 ) PART ( 2 ) smtp ( 2 ) Cacti ( 1 ) Jabber ( 1 ) KVM ( 1 ) Kohana ( 1 ) RAID ( 1 ) Sip ( 1 ) Ubuntu ( 1 ) Zyxel ( 1 ) nginx ( 1 ) php-fpm ( 1 ) portwfd ( 1 ) rewrite ( 1 ) security ( 1 )

Поиск по этому блогу

вторник, 23 ноября 2010 г.

Защита от SIP Bruteforce при помощи iptables на CentOS

В один прекрасный момент наблюдаю картину в логе SIP сервера:

[Nov 23 04:04:00] NOTICE[2930] chan_sip.c: Registration from '"529" ' failed for 'xxx.xxx.xxx.xxx' - No matching peer found
[Nov 23 04:04:00] NOTICE[2930] chan_sip.c: Registration from '"529" ' failed for 'xxx.xxx.xxx.xxx' - No matching peer found
[Nov 23 04:04:00] NOTICE[2930] chan_sip.c: Registration from '"529" ' failed for 'xxx.xxx.xxx.xxx' - No matching peer found
[Nov 23 04:04:00] NOTICE[2930] chan_sip.c: Registration from '"529" ' failed for 'xxx.xxx.xxx.xxx' - No matching peer found
[Nov 23 04:04:00] NOTICE[2930] chan_sip.c: Registration from '"529" ' failed for 'xxx.xxx.xxx.xxx' - No matching peer found
[Nov 23 04:04:00] NOTICE[2930] chan_sip.c: Registration from '"529" ' failed for 'xxx.xxx.xxx.xxx' - No matching peer found
[Nov 23 04:04:00] NOTICE[2930] chan_sip.c: Registration from '"529" ' failed for 'xxx.xxx.xxx.xxx' - No matching peer found
....... около 50 строк в секунду .......................................
Защитимся динамическим правилом в фаерволе, создаем файл /etc/iptables.rules:


# Generated by iptables-save v1.3.5 on Tue Nov 23 09:47:33 2010
*filter
:INPUT ACCEPT [751509:115729779]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [867438:174074250]
:sip_brut - [0:0]
-A INPUT -i eth0 -p udp -m udp --dport 5060 -s 10.0.0.0/8 -j ACCEPT
-A INPUT -i eth0 -p udp -m udp --dport 5060 -s 123.123.123.0/22 -j ACCEPT
-A INPUT -m recent --update --seconds 1200 --name bad_hosts --rsource -j DROP 
-A INPUT -i eth0 -p udp -m udp --dport 5060 -j sip_brut 
-A sip_brut -m limit --limit 6/sec --limit-burst 150 -j RETURN 
-A sip_brut -j LOG --log-prefix "SIP flood: " 
-A sip_brut -m recent --set --name bad_hosts --rsource -j DROP 
COMMIT
# Completed on Tue Nov 23 09:47:33 2010

где:
  • 10.0.0.0/8, 123.123.123.0/22 - свои пулы
  • -limit 6/sec --limit-burst 150 - шесть соединений в секунду не больше 150 раз подряд
  • -seconds 1200 - блокируем на 20 минут
Добавляем в /etc/rc.local:
/sbin/iptables-restore < /etc/iptables.rules
Список попавших в бан:

cat /proc/net/ipt_recent/bad_hosts
src=133.133.133.134 ttl: 50 last_seen: 1074288758 oldest_pkt: 0 1074288730, 1074288733, 1074288735, 1074288738, 1074288738, 1074288740, 1074288743, 1074288745, 1074288745, 1074288748, 1074288750, 1074288750, 1074288753, 1074288753, 1074288755, 1074288758, 1074288760, 1074288760, 1074288763, 1074288765
Очистка списка:
echo / > /proc/net/ipt_recent/bad_hosts
Если не очищается сбрасываем правила очищаем и опять запускаем:
iptables -F
echo / > /proc/net/ipt_recent/bad_hosts
iptables-restore < iptables.rules

Комментариев нет :

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