Jump to content
Калькуляторы

DHCP inform - сотни запросов в секунду с одного IP

Юзеры задалбливают DHCP сервак пакетами DHCPINFORM.

 

Посмотрел DHCP дампом - похоже, какая-то служба венды просит постоянно выдать параметр 252: MSFT - WinSock Proxy Auto Detect

 

Вопрос №1 - зачем же так часто? (или это вирусня пытается задрючить серв?)

 

Вопрос №2 - а) каким правилом в iptables грамотно ограничить к-во пакетов в секунуд с одного IP на порт DHCP (67), с учётом, что UDP.

б) Есть ли варианты просто дропать лишние?

в) Есть ли варианты блокировать на время этот IP источника?

г) Есть ли вариант настроить время блокировки?

д) Какой вариант pps , который достаточен для нормального получения DHCP параметров для клиента

 

 

P.S. Такие правила подойдут? :

 

iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT # Пропускаем все, что идет по уже установленным соединениям

 

iptables -A INPUT -m conntrack --ctstate NEW -p udp --dport 67 -m hashlimit --hashlimit-upto 3/sec --hashlimit-burst 3 --hashlimit-mode srcip --hashlimit-name dhcpHash -j ACCEPT

#Разрешаем 3 пакета в секунду с каждого src IP на порт 67 для новых соединений (с учетом, что это UDP, а не TCP - корректно ли говорить о соединениях, может и не имеет смылса для UDP -m conntrack --ctstate NEW ?

 

#все, что не попало в правила для этого порта - дропаем

iptables -A INPUT -p udp --dport 67 -j DROP

Edited by white_crow

Share this post


Link to post
Share on other sites

Указывайте винде что бы не просила выдавать. Точнее выдавайте нулевой.

option wpad code 252 = text;

option wpad "\n\000";

 

Share this post


Link to post
Share on other sites
Указывайте винде что бы не просила выдавать. Точнее выдавайте нулевой.

option wpad code 252 = text;

option wpad "\n\000";

1. Это мне в конфиг DHCP добавить ?

2. Ну а вообще по iptables правило из первого поста от DDoS на DHCP - нормально? (просто еще бывает, что некоторые шмаляют DHCPDISCOVER сто раз подряд)

Edited by white_crow

Share this post


Link to post
Share on other sites

>2. Ну а вообще по iptables правило из первого поста от DDoS на DHCP - нормально? (просто еще бывает, что некоторые шмаляют DHCPDISCOVER сто раз подряд)

 

ИМХО лучше использовать fail2ban для таких деятелей.

Share this post


Link to post
Share on other sites
>2. Ну а вообще по iptables правило из первого поста от DDoS на DHCP - нормально? (просто еще бывает, что некоторые шмаляют DHCPDISCOVER сто раз подряд)

 

ИМХО лучше использовать fail2ban для таких деятелей.

Как вариант - да, вроде софтина неплохая. Но работает на основе анализа логов.

Но Хотелось бы и вариант с iptables рассмотреть и осознать.

 

Из первого поста - iptables не съел --hashlimit-upto (староватая система)

 

Прокатило просто --hashlimit

 

А также убрал -m conntrack --ctstate NEW

 

И поставил не 3 пакета в секунду, а 10 в минуту, ибо 3 в секунду - тоже много - за минуту более сотни записей в логе...

 

Вроде работает.

 

Еще на свичах поставил в DHCP-снупинг - limit DHCP pps - на каждый юзерский порт - не более 3 DHCP запросв в секунуд. Короче - прекрылся со всех сторон.

 

Только вопрос - какое значение параметра --hashlimit-burst - грамотно ставить в iptables ?

Edited by white_crow

Share this post


Link to post
Share on other sites

У вас dhcp сервер напрямую видет абонентов или на него шлёт запросы dhcp relay

Share this post


Link to post
Share on other sites
У вас dhcp сервер напрямую видет абонентов или на него шлёт запросы dhcp relay

все через релэй

Share this post


Link to post
Share on other sites
об iptables можете забыть сразу.

 

http://www.mail-archive.com/netfilter@list...g/msg03189.html

жесть. Т.е. ICS DHCP юзает не обычные сокеты, а raw сокеты ? Спрашивается нафига это ?

Но с другой стороны - я же блокирую запросы ОТ клиентов на сервер (вернее от релеев), а они то уж наверное шлют через стандартные UDP сокеты ?

 

Share this post


Link to post
Share on other sites

Ну так если у Вас relay, то вам не кажется, что с помощью iptables Вы заблокируете relay-agent'а ?

Share this post


Link to post
Share on other sites

>жесть. Т.е. ICS DHCP юзает не обычные сокеты, а raw сокеты ? Спрашивается нафига это ?

 

Приходит кадр src_mac=что-то dst_mac=FFFF-FFFF-FFFF, на L3 src_ip=0.0.0.0 dst_ip=255.255.255.255, он не дойдёт до приложения, которое просто слушает на 0.0.0.0:port, поэтому и приходится вытаскивать его с помощью raw socket'ов

Edited by s.lobanov

Share this post


Link to post
Share on other sites

1. понятно теперь нафига (про raw сокеты)

2. Но т.к. действительно - юзаются dhcp-relay, то широковещательных запросов - нет.

А вот по-поводу того, что тогда дропаются IP агента - оно может и не плохо - зачем ему чаще, чем 3 пакета в сек слать (тоггда надо опять мне убрать ограниченрие 10/min и вернуть на 10/sec). Хотя лучше может действительно забыть в данном случаен про iptables и рулить на ближнем конце с помощью ограничений в DHCP-snooping - благо - все свичи - умные...

 

Много новых тонкостей узнал - не зря запостил - ВСЕМ СПАСИБО!

Share this post


Link to post
Share on other sites

Если вы будете дропать пакеты с src_ip=IP_агента, то из-за одного абонента будут страдать соседи по коммутатору, ставьте dhcp packet rate на абоненсткому порту, раз говорите, что есть такая фича на свитчах

Share this post


Link to post
Share on other sites

Вроде настроил ограничения на свичах (DHCP pps на каждом порту). Но иногда прорывает....

 

И все же интерсно, почему множество клиентов постоянно шлют DHCPINFORM, логи нереально потом читать.

Т.е. это какое-то ненорамльное поведение клиентской машины - десятки и сотни пакетов в секунуду.

 

Вот дамп запросов DHCPINFORM от клиента:

 

TIME: 10:01:07.902531

IP: > (40:4a:03:09:f1:bf) > (00:1c:c4:fa:ef:39)

OP: 1 (BOOTPREQUEST)

HTYPE: 1 (Ethernet)

HLEN: 6

HOPS: 1

XID: 00007835

SECS: 1024

FLAGS: 0

CIADDR: 10.204.7.28

YIADDR: 0.0.0.0

SIADDR: 0.0.0.0

GIADDR: 10.204.0.1

CHADDR: 00:01:6c:ba:0d:ff:00:00:00:00:00:00:00:00:00:00

SNAME: .

FNAME: .

OPTION: 53 ( 1) DHCP message type 8 (DHCPINFORM)

OPTION: 61 ( 7) Client-identifier 01:00:01:6c:ba:0d:ff

OPTION: 12 ( 4) Host name home

OPTION: 60 ( 8) Vendor class identifier MSFT 5.0

OPTION: 55 ( 12) Parameter Request List 1 (Subnet mask)

15 (Domainname)

3 (Routers)

6 (DNS server)

44 (NetBIOS name server)

46 (NetBIOS node type)

47 (NetBIOS scope)

31 (Perform router discovery)

33 (Static route)

249 (MSFT - Classless route)

43 (Vendor specific info)

252 (MSFT - WinSock Proxy Auto Detect)

 

OPTION: 43 ( 3) Vendor specific info dc0100 ...

OPTION: 82 ( 10) Relay Agent Information

Circuit-ID 00:17:03:84:48:30:31:33

 

______________________________________

 

Вот кусок конфига DHCP сервера

 

 

ddns-update-style none;

ignore client-updates;

authoritative;

option ms-classes-static-routes code 249 = array of unsigned integer 8;

option rfc3442-classes-static-routes code 121 = array of unsigned integer 8;

ddns-updates off;

allow leasequery;

option netbios-node-type = uint2;

option wpad code 252 = text;

option wpad "\n\000";

option netbios-name-servers 127.0.0.1;

option netbios-scope "localhost";

option router-discovery off;

 

ubnet 10.192.0.0 netmask 255.255.0.0 {

# HUB: ZyXel XGS-4728F HUB IP: 10.192.0.1

# Правды д.58-1 - Pravdi 58-1

 

 

option routers 10.192.0.1;

option subnet-mask 255.255.0.0;

option nis-domain "vgarant.lan";

option domain-name "vgarant.lan";

option domain-name-servers 192.168.10.1,212.98.160.50;

option time-offset 172800;

default-lease-time 86400;

option ms-classes-static-routes 24,192,168,254,10,192,0,1,10,10,192,10,192,0,1;

option rfc3442-classes-static-routes 24,192,168,254,10,192,0,1,10,10,192,10,192,0,1;

option ntp-servers 192.168.10.1;

option time-servers 192.168.10.1;

option netbios-node-type = uint2;

 

 

_________________________________

 

Что им надо, что они (клиенты еще хотят) и почему такое поведение - огромное количество одинаковых запросов в секунду?

 

Неужели тока у меня в сети так?

Edited by white_crow

Share this post


Link to post
Share on other sites

>логи нереально потом читать.

 

Если dhcpd умеет логироваться через syslog, то проблема с мусором решается просто: установка syslog-ng и настройка фильтров с использование рег. выражений.

Share this post


Link to post
Share on other sites
>логи нереально потом читать.

 

Если dhcpd умеет логироваться через syslog, то проблема с мусором решается просто: установка syslog-ng и настройка фильтров с использование рег. выражений.

это хорошая мысль.

 

И все интересно:

 

Почему и зачем так ведут себя клиенты?

Что им еще прописать в конфиге dhcp сервака - чтобы они не шмаляли пакетами DHCPINFORM

У кого-нить есть такая же ситуация с постоянными DHCPINFORM ?

Share this post


Link to post
Share on other sites

Можно ещё так фильтровать.

 

-A INPUT -m udp -p udp --dport 67 -m state --state NEW -m recent --set --name DHCP

-A INPUT -m udp -p udp --dport 67 -m state --state NEW -m recent --update --seconds 60 --hitcount 10 --name DHCP -j DROP

 

Пока будут попытки первышающие критерий - всё будет подропано.

Share this post


Link to post
Share on other sites

Винь просит что бы ей DHCP выдал WinSock.

Это баг (фича) в одной из сборок винды.

Лечится так (для dhcpd.conf)

class "MSFT" { 
match if substring(option vendor-class-identifier, 0, 4) = "MSFT"; 

# They put 252 on the DHCPINFORM's, but not on the DHCPREQUEST's 
# PRL. So we over-ride the PRL to include 252 = 0xFC, which will also 
# suppress the DHCPINFORMS! 
option dhcp-parameter-request-list = 
concat(option dhcp-parameter-request-list, fc); 
}

 

взято отсюда

http://www.mercenary.net/blog/index.php?/a...HOWTO-WPAD.html

Edited by shicoy

Share this post


Link to post
Share on other sites
Винь просит что бы ей DHCP выдал WinSock.

Это баг (фича) в одной из сборок винды.

Лечится так (для dhcpd.conf)

class "MSFT" { 
match if substring(option vendor-class-identifier, 0, 4) = "MSFT"; 

# They put 252 on the DHCPINFORM's, but not on the DHCPREQUEST's 
# PRL. So we over-ride the PRL to include 252 = 0xFC, which will also 
# suppress the DHCPINFORMS! 
option dhcp-parameter-request-list = 
concat(option dhcp-parameter-request-list, fc); 
}

 

взято отсюда

http://www.mercenary.net/blog/index.php?/a...HOWTO-WPAD.html

да, это интересно. Надо будет вдумчивей это почитать.

 

А пока выяснилось, что причной флуда являются не клиенты, ибо везде на доступе поставили ограничение pps = 3 - в DHCP-snooping, но это не помогло.

А вот отключаешь на свиче агрегации DHCP-relay - включаешь релеи на доступе - все ок. Т.е. свич Zyxel XGS 4728 - уходил в ступор под нагрузкой при включенном на нем - DHCP-relay и начинал флудить одними и теми же запросами сотни и тысяи раз в секунду. О баге сообщили в саппорт. А пока перенастраиваем релеи на свичи доступа - снимая нагрузку с агрегации.....

 

 

Можно ещё так фильтровать.

 

-A INPUT -m udp -p udp --dport 67 -m state --state NEW -m recent --set --name DHCP

-A INPUT -m udp -p udp --dport 67 -m state --state NEW -m recent --update --seconds 60 --hitcount 10 --name DHCP -j DROP

 

Пока будут попытки первышающие критерий - всё будет подропано.

Ну, во-первых:

 

такая конструкция уже устарела: -m state --state NEW

Так написано в мануале к свежим Iptables.

Рекомендуют юзать : -m conntrack --ctstate NEW

 

Во-вторых: почитайте посты чуть выше - этот метод уже обсуждали и пришли к выводу, что если на DHCP идут броадкасты от клиентов, то iptables в данном случае не поможет.

А если идут юникасты от DHCP релеев, то вы задропаете пакеты от релея, тем самым пострадают все абоны, которые через него пытаются в нормальном режиме получить Ip адрес.

Share this post


Link to post
Share on other sites

Согласно вот этой ссылки http://www.mercenary.net/blog/index.php?/a...HOWTO-WPAD.html

 

подавлять option 252 можно двумя способами, но тут какие-то тонкости перевода у меня возникли, не думаю что простой копикаст второго способа - будет правильно - там что-то надо править согласно каментов.

 

Кто хорошо аглийский знает, какие особенности между этими двумя способами:

 

(1) The way to stop all of these clients that implement WPAD from querying DNS at all is to give them a poison pill at DHCP time; ИЛИ (2)heck configure WPAD at DHCP time and start providing a caching proxy service. I'll show you how to do both below the cut.

In ISC DHCP's dhcpd.conf, enter:

# WPAD definition

option wpad code 252 = text;

# Suppress WPAD activity - no cache, no DNS.

option wpad "\n\000";

**************************************

 

(2)

# Configure a valid WPAD cache. The \n is required for Windows.

# All config below this line is optional.

#option wpad "http://www.example.com/wpad.pac\n";

# Special config for Windows ("MSFT 5.0") systems.

# Note this does not catch Windows CE.

class "MSFT" {

match if substring(option vendor-class-identifier, 0, 4) = "MSFT";

# They put 252 on the DHCPINFORM's, but not on the DHCPREQUEST's

# PRL. So we over-ride the PRL to include 252 = 0xFC, which will also

# suppress the DHCPINFORMS!

option dhcp-parameter-request-list =

concat(option dhcp-parameter-request-list, fc);

 

_________________

P.s. Кстати, проблема , описанная в заговоке темы - оказалось куда глубже, чем просто DHCPINFORM.

Возникили Грабли с коммутаторами Zyxel c включенной опцией DHCP relay и MVR и VLAN для ьультикаста.

Начинается какой-то шторм, пакеты по кругу ходят - вот отсюда побочный эффект с задрючиванием DHCP серва....

Пока точно не ясно - где именно ошибка - в конфигурации свичей или в прошивках или еще что-то, послал запрос в саппорт - жду

 

 

Share this post


Link to post
Share on other sites

Кстати, по-поводу первого способа - тупо добавить в конфиг dhcp в глобальном разделе

 

option wpad code 252 = text;

option wpad "\n\000";

 

По-моему - не помогло - как шли информы, так и идут от тех же самых клиентов - в чем прикол?

Share this post


Link to post
Share on other sites

Я вставил в конфиг в глобальную секцию вот это:

 

class "MSFT" {

match if substring(option vendor-class-identifier, 0, 4) = "MSFT";

 

# They put 252 on the DHCPINFORM's, but not on the DHCPREQUEST's

# PRL. So we over-ride the PRL to include 252 = 0xFC, which will also

# suppress the DHCPINFORMS!

option dhcp-parameter-request-list =

concat(option dhcp-parameter-request-list, fc);

}

 

Каков механизм? Это заставит венду не слать информы?

 

Edited by white_crow

Share this post


Link to post
Share on other sites

Лучше бы изучили как заставить винду их слать :)

А потом проапгрейдили дхцп чтобы не замечал такие пустяки.

 

 

Есть другой вариант: переложить нагрузку на днс.

Пропишите у себя в днс: wpad.ru, wpad.com, wpad.net, wpad.org можно и другие корневые домены.

Можете таймаут записи прописать на по больше, чтобы реже спрашивали. Файл сценария всё равно будут дёргать с хттп.

Должен указывать на ваш вебсервер, в корне которого лежит wpad.dat файл, в котором указано возвращать "DIRECT" на все адреса.

 

 

Тут по русски:

http://www.securitylab.ru/analytics/379619.php

 

Тут на английском:

http://en.wikipedia.org/wiki/Web_Proxy_Aut...covery_Protocol

http://homepage.ntlworld.com./jonathan.deb...figuration.html

http://wiki.squid-cache.org/Technology/WPAD/DNS

http://www.wrec.org/Drafts/draft-cooper-webi-wpad-00.txt

 

 

wpad.dat

function FindProxyForURL(url,host)
{
return "DIRECT";
}

 

 

Что нужно указать в веб сервере, чтобы клиенты поняли:

lighttpd: lighttpd.conf: ".dat" => "application/x-ns-proxy-autoconfig",

Apache: httpd.conf: AddType application/x-ns-proxy-autoconfig .dat

nginx: mime.types: application/x-ns-proxy-autoconfig dat;

 

 

100% гарантии что сработает не даю, возможно МС занесла эти домены в чёрный список.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this