Доброе время суток, уважаемые форумчане. Есть задача контроля трафика, в частности контроль отправки почты: smtp/http/https (в дальнейшем расширить до контроля icq), соответственно с возможностью разрешить\запретить\иметь копию отправленного. ОС интересуют WinXP и выше (х32\х64). Собственно задача ясна, дело за выбором архитектуры и методов исполнения. Почитав литературу, остановился на двух технологиях: LSP – из минусов большая трудоемкость в написании, глючность, мало документации, ну и трафик можно отправить мимо. Из плюсов: режим пользователя, хотя если будет кривая работа все равно весь сетевой стек рухнет и система не будет работоспособной TDI – плюсы: гораздо меньше кода по сравнению с первым методом, контроль всего трафика, стабильная работа (при наличии головы) минусы: не совсем понятно пока как реализовать запрет на основании содержимого письма(вложенных файлов). Как вариант перенаправлять все на локальный прокси-сервер и там уже разбирать, но опять же вопрос как антивирусы отнесутся к таким делам *опыт разработки драйверов имеется, так что ring0 не пугает Вопрос: какая технология для этой задачи предпочтительней, желательно с вескими аргументами?
я в свое время ndis писал для похожей задачи, но сейчас похоже это не совсем удачная идея в 7, например)
Да ладно? При желании нормальный LSP-фильтр пишется гораздо легче, проще и быстрей, нежели TDI-фильтр
Что нужно запрещать? Письмо можно пропустить, а приложенные файлы файлы нет, или нужно не пропускать письмо с приложенными файлами вообще? Что если приложенный файл зашифрован? Тоже не пропускать письмо? Не пропускать письма на определенный адрес? Короче говоря очень много вопросов. Если нужно автоматов задерживать письмо с вложенными файлами, то нужно курить протокол smtp, в нем есть инфа о том содержит ли письмо вложения. Поэтому промежуточный драйвер, может придерживать отправку письма, пока не станет понятно, есть ли вложенные файлы. Если хотите проверять вложенные файлы на вирусность, то это мне кажется скорее решать через фильтр файловой системы. В общем можно решать на разных уровнях, это можно делать в IM драйвере возможны фильтра более высокого уровня.
Я не претендую на полноту и правильность предположения. Я написал это судя по многочисленным топикам на эту тему, где люди очень много времени тратят на него и потом в конце концов меняют технологию. Например http://rsdn.ru/forum/network/3901740.aspx Запрещать на основании адресата, на основании содержания письма, на основании содержания вложения. Шифрование и заархивированные вложения с паролем опустим пока. Вирусы пусть ловят антивирусы
Marik "Network Programming for Microsoft Windows " (http://flylib.com/books/en/1.403.1.1/1/), там очень даже неплохо описано создание LSP-провайдеров. Вообще, по непонятной для меня причине, тема LSP покрыта неким "ореолом недоступности", мол бытует мнение, что создавать LSP-фильтры очень геморно. Не знаю, ничего сложного и таинственного в теме не увидел. По моему имху, написать качественный TDI-фильтр довольно сложно, там немало подводных камней. Если ранее с TDI не сталкивался, то с наскоку решить требуемые тебе задачи будет проблематично. И тем более что чтение https-трафика для TDI-фильтра будет недоступно.
steelfactor Можете порекомендовать рабочий пример LSP, который будет дружить с IE (если таковой имеется конечно)? Связка TDI фильтр(перенаправляет все на прокси) + локальный прокси, в котором уже проводить необходимую фильтрацию будет работать с антивирусами? есть ли у кого то подобный опыт реализации?!
Marik Лови - http://rghost.ru/17434051. Это наиболее полноценная реализация LSP, насколько я могу судить.
steelfactor Есть у меня такой пример. а так же куча других из инета. но ни один не работает с IE устанавливаю с помощью утилиты из примера SDK. install -i -a -n "Foobar" -d путь\lsp.dll после этого IE перестает открывать сайты. причем команда ping возвращает Обмен пакетами с www.ru [°я♠] по 32 байт: Ответ от 194.87.0.50: число байт=32 время=19мс TTL=55 Ответ от 194.87.0.50: число байт=32 время=19мс TTL=55 обратите внимание на кракозябру вместо ip адреса. Но надо отдать должное это единственный пример который в AVZ не выделяется красным цветом в списке LSP
после перезагрузки dns имена перестают еще разрешаться. т.е. nslookup не преобразует в ip адреса. dll сам не компилировал взял уже готовую из вашего архива ОС виртуальная WinXP SP2 далеко не со всеми обновлениями
Хз, ничего путного не могу сказать. LSP загружаю (и выгружаю) на живой системе через inst_lsp.exe из архива, сама lsp.dll лежит в папке system32, все нормально работает после перезагрузки, никаких видимых проблем.
steelfactor Заработало, скопировал dll в system32 и установил той утилитой что идет в комплекте, IE по крайней мере работает. При установке через утилиту от примера MS (instlsp) все перестает работать. Большое спасибо за пример
Ну а кроме прямого http\smtp соединения, может быть ещё различных видов VPN и proxy. Как их учитывать в LSP\TDI\WFP фильтрах?