« Отговор #5 -: Mar 20, 2007, 12:50 »
Значи проблемът е ясен - препълва ти се ARP таблицата. Очевидно или се намираш в голям етернет сегмент, или се намираш в етернет сегмент, където много (?) често интерфейсите взимат различен IP адрес, или някой идиот съвсем нарочно го прави - безкрайно лесно е да си напишеш един скрипт, който вдига интерфейса с различен phys/network адрес и ходиш да arping-ваш с новият си адрес "жертвата" докато му напълниш ARP кеша.
Принципно някъде беше написано - в kernelspace не се реализират големи ARP таблици, така или иначе non-pageable паметта е ценна. Има вариант с user-space ARP демон, който никога не съм пробвал и не знам доколко е решение.Ако някой го е правил може да каже повече.
Бързо подобрение на ситуацията - първо намали стойността на gc_interval, което е максималното време между две "зачиствания" на стари ARP записи в таблицата.
Второ, вдигането на gc_thresh1 не е вариант, когато проблемът се дължи на нечия малоумна шега. Накратко, gc_thresh2 е броят арп записа, при който задължително минава garbage collection механизъма за изхвърляне на "стари" стойности. Когато броят записи падне под gc_thresh1, тогава процесът на "изхвърляне" се прекратява. В момента в който това става, машината малко или много се товари да го прави постоянно.
Ако проблемът наистина се дължи на атака, това може до голяма степен да се разбере по това, което ти е в АРП таблицата - ако не можеш да си комуникираш с повечето хостове вътре в нея, значи е съмнителна работата.
Ако това се дължи на атака, нещата не се решават много ефективно с ръчкане на procfs entries. Единият вариянт е да си създадеш статични (permament) АРП ентрита за хостовете, с които искаш да си комуникираш - така никога няма да имаш проблем, поне с комуникацията с тях. Другият вариант: разиграваш се с iptables mac match-a или с arptables и набиваш ръчно правила с кои двоики ИП-МАК адреси да си комуникираш и с кои-не. В последният случай въобще няма да ти дреме за такива атаки, но пък е и неудобен, защото ако ти трябва да си говориш с повече хостове или пък им се назначават динамично адреси от някакъв pool, нещата загрозняват.
Препълването на АРП таблицата е лошо нещо, води до невъзможност в частни случаи да комуникираш с хостове от твоят етернет сегмент. Garbage collection-a на "стари" ентрита от таблицата пък както си забелязал, тормози машината.