white_crow Posted October 12, 2010 Posted October 12, 2010 (edited) Юзеры задалбливают 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 October 12, 2010 by white_crow Вставить ник Quote
Oleg Gawriloff Posted October 12, 2010 Posted October 12, 2010 Указывайте винде что бы не просила выдавать. Точнее выдавайте нулевой. option wpad code 252 = text; option wpad "\n\000"; Вставить ник Quote
white_crow Posted October 12, 2010 Author Posted October 12, 2010 (edited) Указывайте винде что бы не просила выдавать. Точнее выдавайте нулевой.option wpad code 252 = text; option wpad "\n\000"; 1. Это мне в конфиг DHCP добавить ? 2. Ну а вообще по iptables правило из первого поста от DDoS на DHCP - нормально? (просто еще бывает, что некоторые шмаляют DHCPDISCOVER сто раз подряд) Edited October 12, 2010 by white_crow Вставить ник Quote
s.lobanov Posted October 12, 2010 Posted October 12, 2010 >2. Ну а вообще по iptables правило из первого поста от DDoS на DHCP - нормально? (просто еще бывает, что некоторые шмаляют DHCPDISCOVER сто раз подряд) ИМХО лучше использовать fail2ban для таких деятелей. Вставить ник Quote
white_crow Posted October 12, 2010 Author Posted October 12, 2010 (edited) >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 October 12, 2010 by white_crow Вставить ник Quote
s.lobanov Posted October 12, 2010 Posted October 12, 2010 У вас dhcp сервер напрямую видет абонентов или на него шлёт запросы dhcp relay Вставить ник Quote
vitalyb Posted October 12, 2010 Posted October 12, 2010 об iptables можете забыть сразу. http://www.mail-archive.com/netfilter@list...g/msg03189.html Вставить ник Quote
white_crow Posted October 12, 2010 Author Posted October 12, 2010 У вас dhcp сервер напрямую видет абонентов или на него шлёт запросы dhcp relay все через релэй Вставить ник Quote
white_crow Posted October 12, 2010 Author Posted October 12, 2010 об iptables можете забыть сразу. http://www.mail-archive.com/netfilter@list...g/msg03189.html жесть. Т.е. ICS DHCP юзает не обычные сокеты, а raw сокеты ? Спрашивается нафига это ? Но с другой стороны - я же блокирую запросы ОТ клиентов на сервер (вернее от релеев), а они то уж наверное шлют через стандартные UDP сокеты ? Вставить ник Quote
s.lobanov Posted October 12, 2010 Posted October 12, 2010 Ну так если у Вас relay, то вам не кажется, что с помощью iptables Вы заблокируете relay-agent'а ? Вставить ник Quote
s.lobanov Posted October 12, 2010 Posted October 12, 2010 (edited) >жесть. Т.е. 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 October 12, 2010 by s.lobanov Вставить ник Quote
white_crow Posted October 12, 2010 Author Posted October 12, 2010 1. понятно теперь нафига (про raw сокеты) 2. Но т.к. действительно - юзаются dhcp-relay, то широковещательных запросов - нет. А вот по-поводу того, что тогда дропаются IP агента - оно может и не плохо - зачем ему чаще, чем 3 пакета в сек слать (тоггда надо опять мне убрать ограниченрие 10/min и вернуть на 10/sec). Хотя лучше может действительно забыть в данном случаен про iptables и рулить на ближнем конце с помощью ограничений в DHCP-snooping - благо - все свичи - умные... Много новых тонкостей узнал - не зря запостил - ВСЕМ СПАСИБО! Вставить ник Quote
s.lobanov Posted October 12, 2010 Posted October 12, 2010 Если вы будете дропать пакеты с src_ip=IP_агента, то из-за одного абонента будут страдать соседи по коммутатору, ставьте dhcp packet rate на абоненсткому порту, раз говорите, что есть такая фича на свитчах Вставить ник Quote
white_crow Posted October 12, 2010 Author Posted October 12, 2010 да, это лучший вариант. Спасибо за помощь Вставить ник Quote
white_crow Posted October 13, 2010 Author Posted October 13, 2010 (edited) Вроде настроил ограничения на свичах (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 October 13, 2010 by white_crow Вставить ник Quote
s.lobanov Posted October 13, 2010 Posted October 13, 2010 >логи нереально потом читать. Если dhcpd умеет логироваться через syslog, то проблема с мусором решается просто: установка syslog-ng и настройка фильтров с использование рег. выражений. Вставить ник Quote
white_crow Posted October 13, 2010 Author Posted October 13, 2010 >логи нереально потом читать. Если dhcpd умеет логироваться через syslog, то проблема с мусором решается просто: установка syslog-ng и настройка фильтров с использование рег. выражений. это хорошая мысль. И все интересно: Почему и зачем так ведут себя клиенты? Что им еще прописать в конфиге dhcp сервака - чтобы они не шмаляли пакетами DHCPINFORM У кого-нить есть такая же ситуация с постоянными DHCPINFORM ? Вставить ник Quote
disappointed Posted October 13, 2010 Posted October 13, 2010 Можно ещё так фильтровать. -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 Пока будут попытки первышающие критерий - всё будет подропано. Вставить ник Quote
shicoy Posted October 13, 2010 Posted October 13, 2010 (edited) Винь просит что бы ей 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 October 13, 2010 by shicoy Вставить ник Quote
white_crow Posted October 15, 2010 Author Posted October 15, 2010 Винь просит что бы ей 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 адрес. Вставить ник Quote
white_crow Posted October 16, 2010 Author Posted October 16, 2010 Согласно вот этой ссылки 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 серва.... Пока точно не ясно - где именно ошибка - в конфигурации свичей или в прошивках или еще что-то, послал запрос в саппорт - жду Вставить ник Quote
white_crow Posted October 16, 2010 Author Posted October 16, 2010 Кстати, по-поводу первого способа - тупо добавить в конфиг dhcp в глобальном разделе option wpad code 252 = text; option wpad "\n\000"; По-моему - не помогло - как шли информы, так и идут от тех же самых клиентов - в чем прикол? Вставить ник Quote
white_crow Posted October 17, 2010 Author Posted October 17, 2010 (edited) Я вставил в конфиг в глобальную секцию вот это: 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 October 17, 2010 by white_crow Вставить ник Quote
Ivan_83 Posted October 17, 2010 Posted October 17, 2010 Лучше бы изучили как заставить винду их слать :) А потом проапгрейдили дхцп чтобы не замечал такие пустяки. Есть другой вариант: переложить нагрузку на днс. Пропишите у себя в днс: 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% гарантии что сработает не даю, возможно МС занесла эти домены в чёрный список. Вставить ник Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.