nixp.ru v3.0

28 мая 2017,
воскресенье,
00:24:47 MSK

DevOps с компанией «Флант»
el написал 23 января 2005 года в 00:43 (555 просмотров) Ведет себя неопределенно; открыл 5 тем в форуме, оставил 32 комментария на сайте.

Есть задача — нужно разрешить конкретному приложению обращение по каким-то ip-адресам, по другим запретить…ну вобщем типичная задача для фаервола (фильтровать трафик для процесса с конкретным именем )…Не могу найти инфу как это сделать…В iptables есть критерий по pid процесса, если я не ошибаюсь, но это могло бы работать в случае ,если приложение не перезапускается после запуска фаервола iptables , там ядро назначит другой pid, вобщем — это не работает…

Genie


#chown ${uid_for_program} ${that_program}
#chmod u+s ${that_program}
#man iptables
/^ *owner

идея проста: для выбранноой программы завести пользователя, с именем и правами которого она будет запускаться. после этого, читаем man iptables около описания расширения owner и строим правила.

el

Спасибо за совет, че-то я не подумал про пользователя…Не совсем удобно…(скорее, совсем неудобно…): ), но работает, однако тоже не во всех случаях, например, если программа должна работать под root …(тогда под действие этого правила попадут и другие процессы, которые не должны…).

Можно еще сделать критерий по используемым портам, однако тоже не всегда получается..

Вообще не совсем понятно почему разработчики iptables не сделали критерий по имени процесса…Хотя вообще-то интерфейс iptables аккуратно выражаясь…недружелюбен (имхо, конечно), но бывает и хуже…):

Genie

нууу… если вниииииииИИИмательнее почитать man iptables, как раз, как я и говорил, около расширения owner, можно найти --cmd-owner

Matches if the packet was created by a process with the given command name. (this option is present only if iptables was compiled under a kernel supporting this feature)



$ /sbin/iptables --version
iptables v1.2.11
Genie

ииээх…

решил тут над ping-ом немного поиздеваться.

работает..

# iptables-save
# iptables -A OUTPUT -m owner --cmd-owner ping -p icmp -d 10.0.0.1 -j REJECT
# iptables-save
# Generated by iptables-save v1.2.11 on Sun Jan 23 22:48:56 2005
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A OUTPUT -d 10.0.0.1 -p icmp -m owner --cmd-owner ping -j REJECT --reject-with icmp-port-unreachable
COMMIT
# Completed on Sun Jan 23 22:48:56 2005
# ping 10.1
PING 10.1 (10.0.0.1) from 192.168.0.2 : 56(84) bytes of data.
From 192.168.0.2 icmp_seq=1 Destination Port Unreachable
From 192.168.0.2 icmp_seq=1 Destination Port Unreachable
From 192.168.0.2 icmp_seq=1 Destination Port Unreachable
From 192.168.0.2 icmp_seq=1 Destination Port Unreachable
From 192.168.0.2 icmp_seq=1 Destination Port Unreachable
From 192.168.0.2 icmp_seq=1 Destination Port Unreachable
ping: sendmsg: Operation not permitted
From 192.168.0.2 icmp_seq=2 Destination Port Unreachable
ping: sendmsg: Operation not permitted
From 192.168.0.2 icmp_seq=3 Destination Port Unreachable
ping: sendmsg: Operation not permitted
From 192.168.0.2 icmp_seq=4 Destination Port Unreachable
ping: sendmsg: Operation not permitted
From 192.168.0.2 icmp_seq=5 Destination Port Unreachable
ping: sendmsg: Operation not permitted
From 192.168.0.2 icmp_seq=6 Destination Port Unreachable
ping: sendmsg: Operation not permitted
--- 10.1 ping statistics ---
6 packets transmitted, 0 received, +11 errors, 100% loss, time 5080ms

мдя. icmp пакеты и port unreachable ответ… :D

а ведь хотель --reject-with icmp-host-unreachable добавить…

el

Да, время идет :( — я изучал iptables по русскому переводу статьи Oskar Andreasson (перевод Андрея Киселева ) , вроде не сильно старому, так там вот как раз этого критерия

--cmd-owner name не было…это похоже новая фича…А вот интересная выдержка из перевода -

6.4.3.5. Критерий Owner

Расширение owner предназначено для проверки «владельца» пакета. Изначально данное расширение было написано как пример демонстрации возможностей iptables. Допускается использовать этот критерий только в цепочке OUTPUT. Такое ограничение наложено потому, что на сегодняшний день нет реального механизма передачи информации о «владельце» по сети. Справедливости ради следует отметить, что для некоторых пакетов невозможно определить «владельца» в этой цепочке. К такого рода пакетам относятся различные ICMP responses. Поэтому не следует применять этот критерий к ICMP responses пакетам.

Только вот непонятно, что имеется в виду под командой — это имя процесса или полная команда — которая выдается по ps -aux, или имя процесса — ну похоже что имя, раз твой код работает…