|
|
ru.unix.bsd- RU.UNIX.BSD ------------------------------------------------------------------ From : Alexander Kolesnikoff 2:5020/400 21 Oct 2005 16:48:59 To : Valentin Davydov Subject : Re: discard server -------------------------------------------------------------------------------- Valentin Davydov <val@sqdp.trc-net.co.jp> wrote: > Спасибо всем за интересное обсуждение, задача решена. Была написана такая > программа: > #include <stdio.h> > #include <sys/types.h> > #include <unistd.h> > #include <sys/uio.h> > #include <sys/pipe.h> > main(){ > unsigned char buffer[PAGE_SIZE]; > while(read(STDIN_FILENO,buffer,sizeof(buffer))>0); > }, > а в портах нашёлся onenetd (у которого, обращаю внимание, в selectе > последним аргументом стоит NULL, а не отфонарное число, лишённое > физсмысла). Из этих двух частей был собран сабж, способный одновременно > держать десятки тысяч соединений. > > А теперь самое любопытное - результаты: паразитный трафик практически > ИСЧЕЗ! Вирусы сели на свои ограничения по максимальному количеству > одновременных коннектов, у меня в свопе валяется несколько тысяч этих > discardов - и всё. Hикакой тебе загрузки сети, заражённые машины, хоть и > не вылечились, работают спокойно, не отвлекаясь на рассылку вируса, > трафикосчиталка лениво нащёлкивает качаемые по http ISO-образы ;-) > > Отсюда вывод: когда к вам явится коммивояжёр, ни в коем случае не гоните > его прочь, а то он пойдёт к соседу. Hадо этого коммивояжёра принять и > внимательнейшим образом выслушивать, не сообщая в ответ ничего определённого > и занимаясь тем временем своими делами. Под коммивояжёрами я понимаю, > разумеется, не только tcp-вирусы, но и, например, спам. > Хм, если работает, то как бы и ладно. Hо решение через IPFW мне всё же кажется более элегантным. Идея собственно заключается в том, чтобы на соответствующий tcp пакет с флагом SYN ядро ответило SYN,ACK, т.е как бы открылся сокет но с win==0. Всё остальное дропается, для начала. В ответ на win==0 запрашивающая сторона должна ждать, пока принимающая не объявит окно нормального размера для передачи данных. Т.к в ответ запрашивающая сторона не получит вообще пакета с нормальным win, то соедининение она закроет сама по таймауту. Ресурсов для этого принимающей стороне не требуется вообще никаких. Для интереса сегодня сделал пробный патч к IPFW. После этого для теста просто закрыл на фряшной машине 21 порт и попытался соединится с виндовой машины с помощью консольного ftp. Виндюк увидел, что соединение установилось но не получив дальше ни одного пакета в ответ на свои - закрыл соединение через 1 мин 9 сек не посылая всё это время ни одного пакета. Реально подобная схема должна значительно снизить вирусную активность в сети. Всё это является ничем иным как дальнейшим развитием идей LaBrea реализованных в виде патча к линуховому iptables пару лет назад (автора не помню). Alexander --- ifmail v.2.15dev5.3 * Origin: UKU (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.unix.bsd/7525f42ec34e.html, оценка из 5, голосов 10
|