Борьба с ARP штормом

Linux, безопасность, сети и все что с этим связано
dr.Wermut
Заглянувший
Сообщения: 29
Зарегистрирован: 05 май 2005, 23:18

Борьба с ARP штормом

Сообщение dr.Wermut »

Борьба с ARP штормом

- Домашняя сеть на 2000 компьютеров (192.168.255.255)
- На большинстве установлены NetView и NetLook.
- Имеются 3 программных моста под LINUX.

Когда десятки пользователей начинают одновременно сканировать сеть с помощью NetView и NetLook в несколько 100 потоков сеть напросто ложится, т.к. переполняются MAC-таблицы на свитчах. ARP – пакеты шлются широковещательно ff:ff:ff:ff:ff:ff опрашивая каждый раз весь диапазон IP по маске 192.168.255.255.

Нужно как-то ограничить этот поток с помощью bridge не ущемляя условий функционирование сервисов ЛВС. Т.е. нужно как-то не давать сканерам вылазить за пределы своего сигмента.

Как я понимаю это можно сделать с помощью iptables или ebtables.

Вопрос только как?

Аватара пользователя
Llama
Неотъемлемая часть форума
Сообщения: 9749
Зарегистрирован: 06 фев 2002, 11:40
Откуда: Менск

Сообщение Llama »

А никак. 2000 сетей в сегменте на говносвичах - это идиотизм.
Рассекать надо сегмент.
Рассекать надо маршрутизаторами, что подразумеват настройку маршрутизации на клиентах.
Все остальное - неэффективные костыли.
Так что либо вы сможите организовать реорганизацию сети и поставить роутеры в узлах дерева, либо ваша сеть нормально работать не будет.
Можно попробовать выключить мост и настроить arp proxy, это в некотором смысле спасет от сканирования, н овсе что работает на основе широковсчательных запросыв - работать не будет. Кроме того, оно не самообучающееся - надо будет прописывать IP которые доступны через каждый из интерфейсов. К счастью, можно подсети.

Сканерам нельзя не дать "вылезти" за пределы своего сегмента - ибо они используют сеть совершенно корректным образом. Т.к. у вас все равно пользуют эти сканеры, можно забить на сетеовое окружение и делать маршрутизацию...
Опыт растет прямо пропорционально выведенному из строя оборудованию

dr.Wermut
Заглянувший
Сообщения: 29
Зарегистрирован: 05 май 2005, 23:18

Сообщение dr.Wermut »

Основной целью было уменьшить широковещательную нагрузку на сеть генерированную сканерами сети.
Пришлось воспользоваться методом тыка, а не мнением некоторых скептиков.
Оказалось всё намного проще. Я просто ограничил число одновременных попыток подключится через мосты до 20 попыток за 10 сек. И вуаля, все сканеры, помимо ARP трафика, постоянно генерируют пакеты ping icmp (если я не ошибаюсь). Вся подлость сканеров в том, что они их посылают более 20 раз за 10 сек. Это элементарно было пресечено с помощью правила iptables.

Код: Выделить всё

iptables -I FORWARD -m state --state NEW -m recent --set
iptables -I FORWARD -m state --state NEW -m recent --update --seconds 10 --hitcount 20 -j DROP
С учётом использования 2-х мостов пропускная способность сети значительно возросла. Вместо 2 до 10 mbps. Жалоб за 2 дня тестирования от пользователей не поступало. Все были предупреждены, что сканеры вне закона.

Вот конфиг моего моста. Кому надо, тот может его подправить.

Код: Выделить всё

#!/bin/sh
#####################
# Переменные
#####################

NETIF0="eth0"
NETIF1="eth1"
NETIF2="eth2"
NETIF3="eth3" # дополнительный интерфейс

IFTTL="128"

BRIF="br0" # интерфейс моста
BRIP="192.168.11.25"
BRMASK="255.255.0.0"
BRBCAST="192.168.255.255"

#####################
# Запуск моста
#####################

# BRIDGE
ifconfig $BRIF down
ifconfig $NETIF0 down
ifconfig $NETIF1 down
ifconfig $NETIF2 down
brctl delbr $BRIF

brctl addbr $BRIF
brctl addif $BRIF $NETIF0
brctl addif $BRIF $NETIF1
brctl addif $BRIF $NETIF2

brctl stp $BRIF on

brctl setfd $BRIF 5
brctl setageing $BRIF 3600
brctl setbridgeprio $BRIF 15
brctl setpathcost $BRIF $NETIF0 19
brctl setpathcost $BRIF $NETIF1 19
brctl setpathcost $BRIF $NETIF2 19

#####################
# Настройки сети
#####################

ifconfig $BRIF $BRIP netmask $BRMASK broadcast $BRBCAST
ifconfig $NETIF0 0.0.0.0
ifconfig $NETIF1 0.0.0.0
ifconfig $NETIF2 0.0.0.0
ifconfig $NETIF0 up
ifconfig $NETIF1 up
ifconfig $NETIF2 up
ifconfig $BRIF up
# MAC mask
arp -s $BRBCAST ff:ff:ff:ff:ff:ff
# Clear iptables
iptables -F
# TTL
iptables -t mangle -A POSTROUTING -o $BRIF -j TTL --ttl-set $IFTTL
iptables -t mangle -A POSTROUTING -o $NETIF3 -j TTL --ttl-set $IFTTL

#####################
# Безопасность
#####################

# Разрешаем производить только 10 коннектов в течении 20 секунд
iptables -I FORWARD -m state --state NEW -m recent --set
iptables -I FORWARD -m state --state NEW -m recent --update --seconds 10 --hitcount 20 -j DROP

# Прекрываем запрещённые порты
iptables -A FORWARD -p UDP -i $BRIF -d 0/0 -j DROP --dport 137
iptables -A FORWARD -p UDP -i $BRIF -d 0/0 -j DROP --dport 138
iptables -A FORWARD -p UDP -i $BRIF -d 0/0 -j DROP --dport 139
iptables -A FORWARD -p TCP -i $BRIF -d 0/0 -j DROP --dport 445
iptables -A FORWARD -p UDP -i $BRIF -d 0/0 -j DROP --dport 445
iptables -A FORWARD -p UDP -i $BRIF -d 0/0 -j DROP --dport 1025
iptables -A FORWARD -p UDP -i $BRIF -d 0/0 -j DROP --dport 1026
iptables -A FORWARD -p UDP -i $BRIF -d 0/0 -j DROP --dport 1029
iptables -A FORWARD -p UDP -i $BRIF -d 0/0 -j DROP --dport 1445
iptables -A FORWARD -p UDP -i $BRIF -d 0/0 -j DROP --dport 7550

# Дропаем хулиганов по IP
iptables -A FORWARD -s 192.168.6.12/32 -j DROP
iptables -A FORWARD -s 192.168.91.75/32 -j DROP # 04.03.08 за ARP флуд
iptables -A FORWARD -s 192.168.250.5/32 -j DROP
iptables -A FORWARD -s 80.94.225.242/32 -j DROP

# Дропаем ARP флудеров по MAC
iptables -A FORWARD -j DROP -m mac --mac-source 00:19:21:33:82:59
iptables -A FORWARD -j DROP -m mac --mac-source 04:4B:80:80:80:03
iptables -A FORWARD -j DROP -m mac --mac-source 00:04:61:5A:7C:93
iptables -A FORWARD -j DROP -m mac --mac-source 00:13:8F:BC:AA:1F
iptables -A FORWARD -j DROP -m mac --mac-source 00:E0:4D:16:82:86
iptables -A FORWARD -j DROP -m mac --mac-source 00:E0:4C:15:60:78
iptables -A FORWARD -j DROP -m mac --mac-source 00:11:09:7F:FC:06

# Servers list NO DROP!!!!
iptables -A FORWARD -i $BRIF -d 192.168.117.250/32 -j ACCEPT
iptables -A FORWARD -i $BRIF -d 192.168.117.251/32 -j ACCEPT
iptables -A FORWARD -i $BRIF -d 192.168.107.1/32 -j ACCEPT
iptables -A FORWARD -i $BRIF -d 192.168.119.222/32 -j ACCEPT
iptables -A FORWARD -i $BRIF -d 192.168.119.250/32 -j ACCEPT

brctl showmacs $BRIF
iptables -L -x -n -v
Вот листинг его эффективности, для скептиков.

Код: Выделить всё

$ iptables -L -vxn
Chain INPUT (policy ACCEPT 166442 packets, 16556681 bytes)
    pkts      bytes target     prot opt in     out     source               destination

Chain FORWARD (policy ACCEPT 31016898 packets, 42425458785 bytes)
    pkts      bytes target     prot opt in     out     source               destination
   94003  8266286 DROP       0    --  *      *       0.0.0.0/0            0.0.0.0/0           state NEW recent: UPDATE seconds: 10 hit_count: 20 name: DEFAULT side: source
  189843 19937426            0    --  *      *       0.0.0.0/0            0.0.0.0/0           state NEW recent: SET name: DEFAULT side: source
   95143  7788279 DROP       udp  --  br0    *       0.0.0.0/0            0.0.0.0/0           udp dpt:137
   24234  5322483 DROP       udp  --  br0    *       0.0.0.0/0            0.0.0.0/0           udp dpt:138
       0        0 DROP       udp  --  br0    *       0.0.0.0/0            0.0.0.0/0           udp dpt:139
     225    17646 DROP       tcp  --  br0    *       0.0.0.0/0            0.0.0.0/0           tcp dpt:445
       0        0 DROP       udp  --  br0    *       0.0.0.0/0            0.0.0.0/0           udp dpt:445
     954   390972 DROP       udp  --  br0    *       0.0.0.0/0            0.0.0.0/0           udp dpt:1025
       4     2146 DROP       udp  --  br0    *       0.0.0.0/0            0.0.0.0/0           udp dpt:1026
       3     1158 DROP       udp  --  br0    *       0.0.0.0/0            0.0.0.0/0           udp dpt:1029
       0        0 DROP       udp  --  br0    *       0.0.0.0/0            0.0.0.0/0           udp dpt:1445
      36     3888 DROP       udp  --  br0    *       0.0.0.0/0            0.0.0.0/0           udp dpt:7550
      80     2632 DROP       0    --  *      *       192.168.6.12         0.0.0.0/0
    3019   286588 DROP       0    --  *      *       192.168.6.100        0.0.0.0/0
      44     7084 DROP       0    --  *      *       192.168.6.79         0.0.0.0/0
       8      804 DROP       0    --  *      *       192.168.91.75        0.0.0.0/0
       0        0 DROP       0    --  *      *       192.168.6.205        0.0.0.0/0
    4560   259768 DROP       0    --  *      *       192.168.95.100       0.0.0.0/0
      929    29844 DROP       0    --  *      *       192.168.250.2        0.0.0.0/0
       0        0 DROP       0    --  *      *       192.168.250.3        0.0.0.0/0
       0        0 DROP       0    --  *      *       192.168.250.4        0.0.0.0/0
       0        0 DROP       0    --  *      *       192.168.250.5        0.0.0.0/0
      40     2240 DROP       0    --  *      *       80.94.225.242        0.0.0.0/0
      20      672 DROP       0    --  *      *       0.0.0.0/0            0.0.0.0/0           MAC 00:19:21:33:82:59
       7      260 DROP       0    --  *      *       0.0.0.0/0            0.0.0.0/0           MAC 04:4B:80:80:80:03
     146    16620 DROP       0    --  *      *       0.0.0.0/0            0.0.0.0/0           MAC 00:04:61:5A:7C:93
       0        0 DROP       0    --  *      *       0.0.0.0/0            0.0.0.0/0           MAC 00:13:8F:BC:AA:1F
      32     1120 DROP       0    --  *      *       0.0.0.0/0            0.0.0.0/0           MAC 00:E0:4D:16:82:86
     269    17756 DROP       0    --  *      *       0.0.0.0/0            0.0.0.0/0           MAC 00:E0:4C:15:60:78
      23      936 DROP       0    --  *      *       0.0.0.0/0            0.0.0.0/0           MAC 00:11:09:7F:FC:06
   17103   945960 ACCEPT     0    --  br0    *       0.0.0.0/0            192.168.117.250
     192     8648 ACCEPT     0    --  br0    *       0.0.0.0/0            192.168.117.251
 7692794 318902028 ACCEPT     0    --  br0    *       0.0.0.0/0            192.168.107.1
   11579  3230626 ACCEPT     0    --  br0    *       0.0.0.0/0            192.168.119.222
 2694380 107783596 ACCEPT     0    --  br0    *       0.0.0.0/0            192.168.119.250

Chain OUTPUT (policy ACCEPT 36366 packets, 6111681 bytes)
    pkts      bytes target     prot opt in     out     source               destination
Совершенно не спорю, что оборудования для такой сети нужно получше, но приходится работать с таким какое имеется. Вот я и ищу способы его использовать максимально, без ущерба функциональным возможностям сети.

Аватара пользователя
Llama
Неотъемлемая часть форума
Сообщения: 9749
Зарегистрирован: 06 фев 2002, 11:40
Откуда: Менск

Сообщение Llama »

dr.Wermut, простите, а сканеры после этого вообще еще работают?
Опыт растет прямо пропорционально выведенному из строя оборудованию

dr.Wermut
Заглянувший
Сообщения: 29
Зарегистрирован: 05 май 2005, 23:18

Сообщение dr.Wermut »

Активность сканеров наблюдается.

dr.Wermut
Заглянувший
Сообщения: 29
Зарегистрирован: 05 май 2005, 23:18

Сообщение dr.Wermut »

NetView - работает нормально, как и работал...
NetLook – отшибается на подходах к мосту, т.е. мосты его блокируют, следовательно, сеть валил именно он.

Ответить