Презерватив для Windows Фленов Михаил Xakep, номер #068, стр. 068-098-4 После этого создается новый интерфейс PfCreateInterface, и к нему добавляются фильтры с помощью функции AddFilter. Эта функция достаточно универсальная (и достаточно большая), поэтому не буду приводить ее на страницах ][. Если заинтересован, то посмотришь в исходнике на диске. Принцип ее работы сводится к подготовке параметров и вызову рассмотренной ранее функции PfAddFiltersToInterface. Обрати внимание, что фильтры можно устанавливать на определенную машину и не указывая порт: AddFilter(true, '192.168.1.1', ptTcp, nil); В этом случае любые обращения на любой порт с адреса 192.168.1.1 будут закрыты. А можно запретить и обращение на определенный порт с любого компьютера с помощью следующей записи: AddFilter(true, nil, ptTcp, '21'); Таким образом, можно соорудить правила любой сложности и превратить свой компьютер в настоящую крепость. Единственное, что надо подправить в программе, – правильно указать маску сети. В примере зашита нулевая маска 0.0.0.0, а нужно поставить реальное значение. Итог Как видишь, создать собственный сетевой экран не так уж и сложно. Только вот в качестве движка будет использован встроенный в систему сервис Packet Filtering от MS. Для решения простых задач этого достаточно, а для вещей покруче придется устанавливать что-то более профессиональное. Данный пример описывает создание сетевого экрана на основе правил. Более мощные системы имеют возможность определения основных атак, защиту от сканирования, проверку правильности приходящих данных и т.д. Листинг 1. Пример использования фильтров var wsaData: TWSAData; begin //Загрузка библиотеки Winsock версии 1.1 if (WSAStartup(MakeWord(1, 1), wsaData) >< 0) then begin ShowMessage('Ошибка Winsock'); exit; end; // Определение локального адреса, // на который будем ставить фильтр GetLocalIPAddr(@ipLocal); //Создание интерфейса PfCreateInterface(0, PF_ACTION_FORWARD, PF_ACTION_FORWARD, False, True, hIF); // Добавление нескольких фильтров AddFilter(true, '192.168.1.1', ptTcp, nil); AddFilter(trye, '192.168.8.57', ptTcp, '21'); AddFilter(false, '192.168.1.3', ptAny, '7'); AddFilter(true, '192.168.1.4', ptUdp, '1024'); // Блокировка любых исходящих обращений к 80-му порту AddFilter(false, nil, ptTcp, '21'); // Привязать интерфейс к локальному адресу PfBindInterfaceToIPAddress(hIF, PF_IPV4, @ipLocal); StopButton.Enabled:=true; end; CD На компакт-диске ты найдешь исходный код программы и заголовочный файл fltdefs.pas. WWW Дополнительная инфа по фильтрации пакетов в Windows - http://msdn.microsoft.com/library/default.asp?url=/library/en-us/rras/rras/packet_filtering_reference.asp |