Контроль за обращением определенного процесса к сети (фаэрволлинг)
Модератор: Модераторы разделов
-
scoder
- Сообщения: 45
Контроль за обращением определенного процесса к сети
Каким образом в Linux можно контролировать обращения процессов к сети, чтобы написать простенький фаэрволл с режимом обучения?
Как, например, запретить определенному процессу доступ к сети?
Как, например, запретить определенному процессу доступ к сети?
-
deadhead
- Сообщения: 1913
- Статус: zzz..z
-
scoder
- Сообщения: 45
Re: Контроль за обращением определенного процесса к сети
По вашей ссылке:
lsof (от англ. LiSt of Open Files) — утилита, служащая для вывода информации о том, какие файлы используются теми или иными процессами.
Я в тему программирование написал или куда-то еще?
Хотя был бы рад услышать о том как с помощью средств администрирования можно сделать фаэрволл, работающий в режиме обучения и не позволяющий без разрешения ни одному процессу лезть в сеть.
Есть iptables(netfilter), но там нет работы с конкретным процессом. Вообще есть в каком-нибудь Linux фаэрволл, работающий в режиме обучения(например, аналог в Windows - Agnitum Outpost), чтобы можно было глянуть на его исходники?
-
watashiwa_daredeska
- Бывший модератор
- Сообщения: 4038
- Статус: Искусственный интеллект (pre-alpha)
- ОС: Debian GNU/Linux
Re: Контроль за обращением определенного процесса к сети
Что такое «режим обучения»?
По какому критерию Вы собираетесь определять процессы?
По какому критерию Вы собираетесь определять процессы?
Мои розовые очки
-
scoder
- Сообщения: 45
Re: Контроль за обращением определенного процесса к сети
watashiwa_darede... писал(а): ↑13.04.2010 10:32Что такое «режим обучения»?
По какому критерию Вы собираетесь определять процессы?
С iptables я погорячился. Там есть возможность определять к какому приложению(процессу) принадлежит пакет.
watashiwa_darede...,(ник у вас интересный
Когда какой-нибудь процесс обращается к сети, необходимо поймать этот момент, посмотреть к какому адресу и на какой порт идет запрос и на основаниии этого дать возможность пользователю разрешить эти действия, запретить или создать правило.
Как это сделать?
-
watashiwa_daredeska
- Бывший модератор
- Сообщения: 4038
- Статус: Искусственный интеллект (pre-alpha)
- ОС: Debian GNU/Linux
Re: Контроль за обращением определенного процесса к сети
Вроде ж убрали. Или нет?
Ну, это «легко» — надо написать свой модуль для iptables, который сможет обращаться к процессу в userspace и спрашивать у него, пускать или нет. Ну, или воспользоваться таргетами QUEUE или NFQUEUE.
Но вот про критерий определения процесса мне всё-равно интересно :)
Мои розовые очки
-
Doublespace
- Сообщения: 275
- ОС: Debian Lenny,Squeeze,Centos
Re: Контроль за обращением определенного процесса к сети
Человек хочет написать, видно, что-то наподобие виндового atguard, где он выкидывал окошко- такой-то процесс ломится по такому-то адресу в такой-то порт- разрешить?создать правило? Кстати, похожую функциональность уже имеет firestarter
-
watashiwa_daredeska
- Бывший модератор
- Сообщения: 4038
- Статус: Искусственный интеллект (pre-alpha)
- ОС: Debian GNU/Linux
Re: Контроль за обращением определенного процесса к сети
Так вот как определить «такой-то процесс»? PID, естественно, меняется — не годится. В /proc/<pid>/cmdline может быть лабуда всякая, типа «hald-addon-input: Listening on /dev/input/event2 /dev/input/event1...» — не годится. /proc/<pid>/exe указывает на бинарь, для скриптов — на интерпретатор, т.е. по этому признаку питоньи или шелловские скрипты не отличимы друг от друга — не годится. Более того, если программа — шелл-скрипт, то сетевое взаимодействие за неё, как правило, делают другие программы: nc, ssh, ... Те же программы осуществляют взаимодействие и для других скриптов-программ. Ну, и стандартная юниксовая схема с дочерними worker-процессами, а-ля apache: вроде как апач-то один, а процессов 20.
В общем, мне интересно, как можно перманентно идентифицировать «приложение». Не на каждый же пакет пользователя терзать :)
Мои розовые очки
-
scoder
- Сообщения: 45
Re: Контроль за обращением определенного процесса к сети
watashiwa_darede... писал(а): ↑13.04.2010 13:34В общем, мне интересно, как можно перманентно идентифицировать «приложение». Не на каждый же пакет пользователя терзать
В терминологии iptables, apache со всеми своими процессами вот так, например идентифицируется:
Код: Выделить всё
SID=`ps -eo sid,args |grep httpd |head -n 1 |cut -b 1-5`
/usr/local/sbin/iptables -A OUTPUT -p TCP -m owner --sid-owner $SID -j ACCEPTDoublespace писал(а): ↑13.04.2010 13:14Человек хочет написать, видно, что-то наподобие виндового atguard
Нет, наподобие Outpost Firewall для Windows. За упоминание о firestarter спасибо, посмотрю обязательно, может это именно то что надо.
-
watashiwa_daredeska
- Бывший модератор
- Сообщения: 4038
- Статус: Искусственный интеллект (pre-alpha)
- ОС: Debian GNU/Linux
Re: Контроль за обращением определенного процесса к сети
В моём man iptables уже нет --sid-owner для -m owner — убрали. Да и вообще, такую городуху сложно поддерживать, ибо сломается после /etc/init.d/apache restart. Да и проблему со скриптами всё равно не решает.
Мои розовые очки
-
scoder
- Сообщения: 45
Re: Контроль за обращением определенного процесса к сети
watashiwa_darede... писал(а): ↑13.04.2010 15:04В моём man iptables уже нет --sid-owner для -m owner — убрали.
Можете сказать какая у вас версия iptables?
watashiwa_darede... писал(а): ↑13.04.2010 12:32Ну, это «легко» — надо написать свой модуль для iptables, который сможет обращаться к процессу в userspace и спрашивать у него, пускать или нет. Ну, или воспользоваться таргетами QUEUE или NFQUEUE.
И можешь поподробнее рассказать о QUEUE или NFQUEUE. Что это и как им пользоваться?
Вообще давно хотел спросить у опытного linuxera: вот для программирования в Windows есть хорошо документированный WinAPI, где дана наглядная справка о функциях, объектах, классах как писать хуки и т.д. Есть ли какое-либо подобное справочное руководство для Linux, типа LinuxAPI? Вот у меня есть, например задача написать программу мониторинга использования памяти и процессора, разобраться с хуками(если они есть в linux). Куда мне ткнуться, где искать? В MSDN-library, например, все это есть. А где подобное искать для Linux?
-
watashiwa_daredeska
- Бывший модератор
- Сообщения: 4038
- Статус: Искусственный интеллект (pre-alpha)
- ОС: Debian GNU/Linux
Re: Контроль за обращением определенного процесса к сети
Нет. Не пользовался. Знаю только возможности в общих чертах, по документации. http://www.netfilter.org/ Вам в руки, там есть документация.
*&^%^%$(*&^ Ладно, промолчу.
Нет, ибо нет LinuxAPI. Есть ядро — по нему есть куча документации и литературы: по интерфейсам, по внутренностям и т.п. Но оно очень часто меняется, напрямую с ним работают очень немногие (в Win таким людям обычно приходится пользоваться хорошо недокументированными возможностями). Есть стандартная библиотека C — ближайший кандидат на роль LinuxAPI (и не только Linux) и важнейшая обёртка вокруг ядра для программиста. Есть стандарты POSIX, Single Unix Specification, Open Group, которые реализуются одной (glibc) или несколькими библиотеками (по сути, в некоторой ОС, основанной на ядре Linux, некоторые/все эти стандарты вполне могут и не поддерживаться). Остальное — сборная солянка различных библиотек, приложений и пр.
Операционной системы Linux не существует.
1.4.6 (пакет iptables 1.4.6-2 из Debian Sid).
Мои розовые очки
-
scoder
- Сообщения: 45
Re: Контроль за обращением определенного процесса к сети
Спасибо вам за ответы. Есть еще пара вопросов.
Можете дать пару ссылок на документацию по ядру. Может посмотреть на сайте kernel.org в самом дистрибутиве ядра?
Стандартная библиотека C - это glibc и она вхдит в состав GNU C++ Compiler. Верно?
И что такое обёртка вокруг ядра для программиста?
watashiwa_darede... писал(а): ↑13.04.2010 23:03Есть ядро — по нему есть куча документации и литературы: по интерфейсам, по внутренностям и т.п.
Можете дать пару ссылок на документацию по ядру. Может посмотреть на сайте kernel.org в самом дистрибутиве ядра?
watashiwa_darede... писал(а): ↑13.04.2010 23:03Есть стандартная библиотека C — ближайший кандидат на роль LinuxAPI (и не только Linux) и важнейшая обёртка вокруг ядра для программиста.
Стандартная библиотека C - это glibc и она вхдит в состав GNU C++ Compiler. Верно?
И что такое обёртка вокруг ядра для программиста?
-
watashiwa_daredeska
- Бывший модератор
- Сообщения: 4038
- Статус: Искусственный интеллект (pre-alpha)
- ОС: Debian GNU/Linux
Re: Контроль за обращением определенного процесса к сети
Мне хватает man'ов: http://linux.die.net/man/2/syscalls
И это тоже.
Стандартная библиотека C — это библиотека, описанная в стандарте. ISO, например. glibc — одна из реализаций.
Ядер много всяких, кроме Linux. Если следовать стандарту на C и его библиотеку, то программа соберётся не только в Linux, но и в других системах, например, *BSD. Да даже хотя бы в Linux с ядром другой версии.
Мои розовые очки
-
scoder
- Сообщения: 45
Re: Контроль за обращением определенного процесса к сети
watashiwa_darede..., спасибо. Могли бы вы еще новичку подсказать где можно почитать про структуру и назначение папок в Linux, то есть где, что находится, куда копируются файлы программ, библиотеки и файлы компилятора gnu, где находятся спец. системные файлы, а то иногда очень долго приходится искать то что необходимо. Может посоветуете книгу по администрированию Linux?
Может это быть из-за того у вас, что ядро не собрано с небходимыми дополнительными ключами?
watashiwa_darede... писал(а): ↑13.04.2010 23:03В моём man iptables уже нет --sid-owner для -m owner — убрали.
1.4.6 (пакет iptables 1.4.6-2 из Debian Sid).
Может это быть из-за того у вас, что ядро не собрано с небходимыми дополнительными ключами?
-
watashiwa_daredeska
- Бывший модератор
- Сообщения: 4038
- Статус: Искусственный интеллект (pre-alpha)
- ОС: Debian GNU/Linux
Re: Контроль за обращением определенного процесса к сети
Смотрим исходники.
http://git.netfilter.org/cgi-bin/gitweb.cg...f02;hb=HEAD#l99
owner_mt_help() про --sid-owner не пишет.
http://git.netfilter.org/cgi-bin/gitweb.cg...02;hb=HEAD#l294
owner_mt_parse() --sid-owner не парсит.
http://git.netfilter.org/cgi-bin/gitweb.cg...02;hb=HEAD#l566
Эти функции зарегистрированы для revision=1. Для revision=0 зарегистрированы функции с суффиксом _v0, которые пишут и парсят.
Это крайняя версия. В версии от 20.01.2008 то же самое. Дальше в глубину времён истории в этом репозитории нет. Т.е. уже минимум 2 года как --sid-owner прибили.
Мои розовые очки
-
watashiwa_daredeska
- Бывший модератор
- Сообщения: 4038
- Статус: Искусственный интеллект (pre-alpha)
- ОС: Debian GNU/Linux
Re: Контроль за обращением определенного процесса к сети
Ищу описание структуры каталогов Linux
Книги и Документация Сам я книги не советую, ибо не читал ни одной.
P.S. Вообще, на форуме правило: «Одна тема — один вопрос», прошу соблюдать, пожалуйста.
Мои розовые очки
-
scoder
- Сообщения: 45
Re: Контроль за обращением определенного процесса к сети
watashiwa_darede... писал(а): ↑14.04.2010 12:36P.S. Вообще, на форуме правило: «Одна тема — один вопрос», прошу соблюдать, пожалуйста.
Ok. Согласен. Обязуюсь выполнять в будущем.
-
scoder
- Сообщения: 45
Re: Контроль за обращением определенного процесса к сети
watashiwa_darede... писал(а): ↑14.04.2010 12:27Смотрим исходники.
http://git.netfilter.org/cgi-bin/gitweb.cg...f02;hb=HEAD#l99
owner_mt_help() про --sid-owner не пишет.
По вашей ссылке чуть выше строка 68 #ifdef IPT_OWNER_COMM.
В руководстве по iptables пишется, что может понадобиться включить в ядро следующие опции. В частности опция CONFIG_IP_NF_MATCH_OWNER может как раз та самая и есть?
-
watashiwa_daredeska
- Бывший модератор
- Сообщения: 4038
- Статус: Искусственный интеллект (pre-alpha)
- ОС: Debian GNU/Linux
Re: Контроль за обращением определенного процесса к сети
Если посмотреть внимательнее, то этот дефайн добавляет --cmd-owner, и только в _v0.
Честно говоря, лень рыть подробное описание, но исключительно по названию, эта опция просто целиком включает или выключает сборку match extension'а owner.
Мои розовые очки