Форум русскоязычного сообщества Ubuntu


Получить помощь и пообщаться с другими пользователями Ubuntu можно
на irc канале #ubuntu-ru в сети Freenode
и в Jabber конференции ubuntu@conference.jabber.ru

Автор Тема: Контроль за обращением определенного процесса к сети, фаэрволлинг  (Прочитано 923 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн scoder

  • Автор темы
  • Новичок
  • *
  • Сообщений: 12
    • Просмотр профиля
Каким образом в Linux можно контролировать обращения процессов к сети, чтобы написать простенький фаэрволл с режимом обучения?
Как, например, запретить определенному процессу доступ к сети?

Оффлайн wl

  • Старожил
  • *
  • Сообщений: 1393
    • Просмотр профиля
« Последнее редактирование: 12 Апрель 2010, 13:55:34 от wl »
На свете феньки есть такие, брат Горацио, которых лохи просто не секут. (Шекспир, "Гамлет", вольный перевод)

Оффлайн scoder

  • Автор темы
  • Новичок
  • *
  • Сообщений: 12
    • Просмотр профиля
http://ru.wikipedia.org/wiki/Netfilter
man netstat
cat /proc/$pid/net/*

В iptables(netfilter) нет возможности контролировать процесс, там идет работа на уровне ПАКЕТОВ(ip-адреса и порты). Потому и спрашиваю.

Оффлайн wl

  • Старожил
  • *
  • Сообщений: 1393
    • Просмотр профиля
Процессы можно контролировать через netstat и через /proc filesystem.
Но где-то я читал, деталей не упомню, поищите, что-то про то, что в юниксах пакеты от разных процессов объединяются в TCP/IP одну посылку и так отсылаются.
Поэтому есть, например, сложности с определением трафика от отдельного приложения.
На свете феньки есть такие, брат Горацио, которых лохи просто не секут. (Шекспир, "Гамлет", вольный перевод)

Оффлайн Yurror

  • Старожил
  • *
  • Сообщений: 1966
    • Просмотр профиля
в iptables есть возможность контролировать процессы
Модуль owner позволяет проверять пакеты по идентификаторам их владельцев. Для указания владельца можно использовать идентификатор процесса, сессии, группы или отдельного пользователя. Поскольку данные о владельце являются локальными, этот модуль можно использовать только в цепочках таблицы OUTPUT. Отметим, что и для локально сгенерированных пакетов информация о владельце доступна не всегда. Многие пакеты, среди которых отклики ICMP, не содержат сведений о владельце - для таких пакетов заданное условие никогда не будет выполняться.

Работая с модулем owner, не забывайте указывать в спецификации правила опцию

-m owner

Для использования этого модуля в ядре должна быть включена опция Owner match support. Если при компиляции ядра для опции было выбрано значение M, потребуется также загрузка модуля ipt_owner.

Идентификатор пользователя

Условие --uid-owner позволяет отбирать пакеты по идентификатору пользователя (ГШВ), запустившего приложение, которое сгенерировало данный пакет. Например правило

iptables -A OUTPUT -m owner --uid-owner 500
будет отбирать все пакеты, сгенерированные приложениями, которые работают от имени пользователя с идентификатором 500. Таким образом вы сможете заблокировать организацию исходящих соединений с брандмауэра от того или иного пользователя (например, разрешить такие соединения только для пользователя root).

Идентификатор группы

Условие --gid-owner позволяет отбирать пакеты по идентификатору группы (GID), к которой относится запустивший приложение пользователь. Например, условию

iptables -A OUTPUT -m owner --gid-owner 0
будут соответствовать только пакеты, сгенерированные приложениями пользователей из группы 0 (root). Это позволяет разрешать или запрещать организацию исходящих соединений с брандмауэра для отдельных групп пользователей.

Идентификатор процесса

Условие --pid-owner позволяет проверить принадлежность пакета к указанному идентификатором (PID) процессу. Правилу

iptables -A OUTPUT -m owner --pid-owner 73
будут соответствовать только пакеты, сгенерированные процессом с PID=73. Идентификаторы процессов могут достаточно часто меняться, что усложняет использование этого условия. Однако ничто не мешает собирать сведения об идентификаторах процессов в системе с помощью команды ps. Приведенный ниже пример обеспечивает беспрепятственную передачу пакетов, сгенерированных процессом xinetd.

PID=`ps aux |grep xinetd |head -n 1 |cut -b 10-14`
/usr/local/sbin/iptables -A OUTPUT -p TCP -m owner --pid-owner $PID -j ACCEPT

Идентификатор сессии

Условие --sid-owner позволяет проверить принадлежность пакета к указанной идентификатором (SID) сессии. Идентификатор сессии относится к процессу и всем порожденным им процессам, Правилу

iptables -A OUTPUT -m owner --pid-owner 120
будут соответствовать все пакеты, сгенерированные процессами с идентификатором сессии SID=120. Идентификаторы сессий могут достаточно часто меняться, что усложняет использование этого условия. Однако ничто не мешает собирать сведения об идентификаторах процессов в системе с помощью команды ps. Приведенный ниже пример обеспечивает беспрепятственную передачу пакетов, сгенерированных web-сервером 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 ACCEPT

Оффлайн scoder

  • Автор темы
  • Новичок
  • *
  • Сообщений: 12
    • Просмотр профиля
в iptables есть возможность контролировать процессы

Спасибо, действительно есть. Невнимательно читаю руководство.

Тогда еще такой вопрос подскажите, пожалуйста, каким образом можно поймать момент запроса приложения(процесса) к сети и в зависимости от того какой запрос либо разрешить, либо запретить? Т.е. своего рода firewall в режиме обучения.

Оффлайн wl

  • Старожил
  • *
  • Сообщений: 1393
    • Просмотр профиля
Тогда еще такой вопрос подскажите, пожалуйста, каким образом можно поймать момент запроса приложения(процесса) к сети

Это, вообще, через хуки (hook) делается.

http://en.wikipedia.org/wiki/Hooking#Netfilter_hook
На свете феньки есть такие, брат Горацио, которых лохи просто не секут. (Шекспир, "Гамлет", вольный перевод)

Оффлайн Yurror

  • Старожил
  • *
  • Сообщений: 1966
    • Просмотр профиля
флаги пакетов SYN, ACK? порты TCP/UDP? собственно вид протокола, адреса назначения и прочее прочее...
конкретезируй что значит "в зависимости от того какой запрос". этаи собственно фаервол и занимается. правила пишутся с помощью утилиты iptables

wl, человек понятия не имеет об iptables вообще (ну конечно слышал звон... но ни чего конкретного) а ты ему хуки писать предлагаешь =) вполне хватит штатного фаера.

Ну а вообще-то да...
Если задаться целью написать приложение которое будет мониторить все процессы и по дефолту лочить им сеть и запрашивать у юзера в графическом всплываюзем окошечке разрешать или нет то эта дока то что нужно.
хук вешать в конце цепочки
все что в него свалилось предлагать юзеру разгрести
по решению юзера добавлять в цепочку перед хуком правило.
соответсвенно такие соединения в хук не попадут и больше пользователя не побеспокоят
как то так...

Оффлайн scoder

  • Автор темы
  • Новичок
  • *
  • Сообщений: 12
    • Просмотр профиля
Это, вообще, через хуки (hook) делается.
http://en.wikipedia.org/wiki/Hooking#Netfilter_hook

Там только пример кода и все. Можете поподробнее рассказать где почитать о хуках и вообще о системном программировании для Linux? Вот для windows я знаю есть MSDN-library - там есть вся необходимая информация и документация. А где такое искать в Linux? Я знаю, что есть man, но это просто справка по конкретной команде и все, а мне необходима именно документация типа LinuxAPI о том как писать хуки и т.д. Чтобы было подробнее и желательно с примерами.

Пользователь решил продолжить мысль 13 Апрель 2010, 21:54:28:
wl, человек понятия не имеет об iptables вообще (ну конечно слышал звон... но ни чего конкретного) а ты ему хуки писать предлагаешь =) вполне хватит штатного фаера.
Знаю я что такое iptables.

Ну а вообще-то да...
Если задаться целью написать приложение которое будет мониторить все процессы и по дефолту лочить им сеть и запрашивать у юзера в графическом всплываюзем окошечке разрешать или нет то эта дока то что нужно.
хук вешать в конце цепочки
все что в него свалилось предлагать юзеру разгрести
по решению юзера добавлять в цепочку перед хуком правило.
соответсвенно такие соединения в хук не попадут и больше пользователя не побеспокоят
как то так...

Ну можно считать, что вы поняли что такое работа фаэрволла в режиме обучения. :)
« Последнее редактирование: 13 Апрель 2010, 21:54:28 от scoder »

Оффлайн wl

  • Старожил
  • *
  • Сообщений: 1393
    • Просмотр профиля
Это, вообще, через хуки (hook) делается.
http://en.wikipedia.org/wiki/Hooking#Netfilter_hook

Там только пример кода и все. Можете поподробнее рассказать где почитать о хуках и вообще о системном программировании для Linux? Вот для windows я знаю есть MSDN-library - там есть вся необходимая информация и документация. А где такое искать в Linux? Я знаю, что есть man, но это просто справка по конкретной команде и все, а мне необходима именно документация типа LinuxAPI о том как писать хуки и т.д. Чтобы было подробнее и желательно с примерами.
Не-а, не могу. Да, для винды есть MSDN, там все собрано в одном месте, а для линукса нет. Есть TLDP и Google.
В мане можно найти справки не только по командам, но и по библиотечным функциям.
На свете феньки есть такие, брат Горацио, которых лохи просто не секут. (Шекспир, "Гамлет", вольный перевод)

Оффлайн Yurror

  • Старожил
  • *
  • Сообщений: 1966
    • Просмотр профиля
wl, человек понятия не имеет об iptables вообще (ну конечно слышал звон... но ни чего конкретного) а ты ему хуки писать предлагаешь =) вполне хватит штатного фаера.
Знаю я что такое iptables.
Я так и написал что ты слышал про iptables, но понятия не имеешь о принципах работы и его сруктуре. Иначе зачем было бы задавать много очень простых (ну для тех кто знает о чем говорит) вопросов?
Документация конкретно по разработке iptables лежит на  http://www.netfilter.org/ (хм... тут еще начинают терзать подозрения что человек и с гуглом не знаком ибо этот сайт выдаётся первым по запросу iptables development)
Иии... коронный номер: у тебя с английским как? лады?
Если да, то в чем проблема?

Оффлайн scoder

  • Автор темы
  • Новичок
  • *
  • Сообщений: 12
    • Просмотр профиля
Я так и написал что ты слышал про iptables, но понятия не имеешь о принципах работы и его сруктуре. Иначе зачем было бы задавать много очень простых (ну для тех кто знает о чем говорит) вопросов?
Документация конкретно по разработке iptables лежит на  http://www.netfilter.org/ (хм... тут еще начинают терзать подозрения что человек и с гуглом не знаком ибо этот сайт выдаётся первым по запросу iptables development)
Иии... коронный номер: у тебя с английским как? лады?
Если да, то в чем проблема?

Зачем надо было задавать вопросы? А здесь вообще форум по программированию в linux, где можно задавать вопросы или посиделки "великих" ёриков?

Ты думаешь ты такой умный и остальные не знают адреса сайта iptables(netfilter)? :) Я тебя огорчу, я с него начал изучение iptables.
А по поводу ключей --pid-owner и --sid-owner, ну бывает невнимательно прочитал руководство. Кстати некоторые люди мне говорят, что в man по новым версиям iptables по этими ключам вообще нет справки, в частности в iptables 1.4.6 (Debian).

С английским средне. Иногда с некоторыми вопросами сложно разобраться, особенно там где нужно читать сплошником текст, потому как важны детали(например, как писать хуки). А банально пользоваться справочными данными по функции, программе - с этим проблем нет.
« Последнее редактирование: 14 Апрель 2010, 12:22:59 от scoder »

Оффлайн Yurror

  • Старожил
  • *
  • Сообщений: 1966
    • Просмотр профиля
Повторюсь: В чем тогда проблема?

 

Страница сгенерирована за 0.066 секунд. Запросов: 24.