Борьба с ARP штормом
Борьба с ARP штормом
Борьба с 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.
Вопрос только как?
- Домашняя сеть на 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.
Вопрос только как?
А никак. 2000 сетей в сегменте на говносвичах - это идиотизм.
Рассекать надо сегмент.
Рассекать надо маршрутизаторами, что подразумеват настройку маршрутизации на клиентах.
Все остальное - неэффективные костыли.
Так что либо вы сможите организовать реорганизацию сети и поставить роутеры в узлах дерева, либо ваша сеть нормально работать не будет.
Можно попробовать выключить мост и настроить arp proxy, это в некотором смысле спасет от сканирования, н овсе что работает на основе широковсчательных запросыв - работать не будет. Кроме того, оно не самообучающееся - надо будет прописывать IP которые доступны через каждый из интерфейсов. К счастью, можно подсети.
Сканерам нельзя не дать "вылезти" за пределы своего сегмента - ибо они используют сеть совершенно корректным образом. Т.к. у вас все равно пользуют эти сканеры, можно забить на сетеовое окружение и делать маршрутизацию...
Рассекать надо сегмент.
Рассекать надо маршрутизаторами, что подразумеват настройку маршрутизации на клиентах.
Все остальное - неэффективные костыли.
Так что либо вы сможите организовать реорганизацию сети и поставить роутеры в узлах дерева, либо ваша сеть нормально работать не будет.
Можно попробовать выключить мост и настроить arp proxy, это в некотором смысле спасет от сканирования, н овсе что работает на основе широковсчательных запросыв - работать не будет. Кроме того, оно не самообучающееся - надо будет прописывать IP которые доступны через каждый из интерфейсов. К счастью, можно подсети.
Сканерам нельзя не дать "вылезти" за пределы своего сегмента - ибо они используют сеть совершенно корректным образом. Т.к. у вас все равно пользуют эти сканеры, можно забить на сетеовое окружение и делать маршрутизацию...
Опыт растет прямо пропорционально выведенному из строя оборудованию
Основной целью было уменьшить широковещательную нагрузку на сеть генерированную сканерами сети.
Пришлось воспользоваться методом тыка, а не мнением некоторых скептиков.
Оказалось всё намного проще. Я просто ограничил число одновременных попыток подключится через мосты до 20 попыток за 10 сек. И вуаля, все сканеры, помимо ARP трафика, постоянно генерируют пакеты ping icmp (если я не ошибаюсь). Вся подлость сканеров в том, что они их посылают более 20 раз за 10 сек. Это элементарно было пресечено с помощью правила iptables.
С учётом использования 2-х мостов пропускная способность сети значительно возросла. Вместо 2 до 10 mbps. Жалоб за 2 дня тестирования от пользователей не поступало. Все были предупреждены, что сканеры вне закона.
Вот конфиг моего моста. Кому надо, тот может его подправить.
Вот листинг его эффективности, для скептиков.
Совершенно не спорю, что оборудования для такой сети нужно получше, но приходится работать с таким какое имеется. Вот я и ищу способы его использовать максимально, без ущерба функциональным возможностям сети.
Пришлось воспользоваться методом тыка, а не мнением некоторых скептиков.
Оказалось всё намного проще. Я просто ограничил число одновременных попыток подключится через мосты до 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
Вот конфиг моего моста. Кому надо, тот может его подправить.
Код: Выделить всё
#!/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