URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 86151
[ Назад ]

Исходное сообщение
"iptables: динамические ACL (в виде файлов в /proc?)"

Отправлено lithium , 31-Июл-09 17:56 
Привет всем.

[Вводная часть]

Есть CentOS 5.3 с OpenVPN. Клиенты получают адреса динамически. Хочется вести acl в виде:

RDP (разрешить tcp-соединения на RDP-порт, ip-адрес z): ip-адрес1, ip-адрес2, ...
site1 (разрешить tcp-соединения на порт x, ip-адрес y): ip-адрес3, ip-адрес4, ...
и т.д.

Первое решение: создать в цепочке FORWARD правила типа:
-p tcp --dport 3389 --dst z -j ACL_RDP
-p tcp --dport x --dst y -j ACL_SITE1

и динамически добавлять/удалять ip-адреса в цепочки ACL_*
Но imho это не совсем эстетично, существуют проблемы синхронизации правил в /etc/sysconfig/iptables-save и в ядре (netfilter): добавили вручную правило в /etc/sysconfig/iptables-save, загрузили (iptables-restore), все ACL_* очистились, клиентам нужно переконекчиваться, сохранили правила из netfilter в /etc/sysconfig/iptables-save (iptables-save), теперь правила в ACL_* будут постоянными (запишутся на диск). Вообщем, выглядит хрупким и чревато сложностями.

[Основная часть]

Хотелось бы иметь какие-то файлы в /proc (RDP.txt, site1.txt), куда скриптами добавлять/удалять ip-адреса, а в iptables будут неизменные правила типа

-p tcp --dport 3389 --dst z --проверить_в_файле RDP.txt -j ACCEPT
-p tcp --dport x --dst y --проверить_в_файле site1.txt -j ACCEPT

Вроде пакет ipset это делает, но в CentOS 5.3 его нет, а патчить пакеты из дистибутива не хочется (imho некошерно). Может кто знает аналогичные модули iptables (полдня провел в гугле, не смог ничего найти) или аналогично красивое решение для изначальной задачи (вести динамические acl с помощью iptables)?


Содержание

Сообщения в этом обсуждении
"iptables: динамические ACL (в виде файлов в /proc?)"
Отправлено gennadys , 06-Авг-09 13:46 
>[оверквотинг удален]
>ip-адреса, а в iptables будут неизменные правила типа
>
>-p tcp --dport 3389 --dst z --проверить_в_файле RDP.txt -j ACCEPT
>-p tcp --dport x --dst y --проверить_в_файле site1.txt -j ACCEPT
>
>Вроде пакет ipset это делает, но в CentOS 5.3 его нет, а
>патчить пакеты из дистибутива не хочется (imho некошерно). Может кто знает
>аналогичные модули iptables (полдня провел в гугле, не смог ничего найти)
>или аналогично красивое решение для изначальной задачи (вести динамические acl с
>помощью iptables)?

А что есть еще клиенты какие-то, кроме тех, кто получает адреса динамически? Почему нельзя просто добавить такие правила для всей подсети?


"iptables: динамические ACL (в виде файлов в /proc?)"
Отправлено lithium , 06-Авг-09 13:56 
правила разные, бОльшая часть клиентов с минимальным правами, нескольким клиентам нужен доступ к RDP-серверу, к нескольким сайтам, ssh, и выход наружу. Все эти права могут сочетаться в произвольном порядке.

"iptables: динамические ACL (в виде файлов в /proc?)"
Отправлено ze6ra , 06-Авг-09 14:16 
>правила разные, бОльшая часть клиентов с минимальным правами, нескольким клиентам нужен доступ
>к RDP-серверу, к нескольким сайтам, ssh, и выход наружу. Все эти
>права могут сочетаться в произвольном порядке.

OpenVPN Позволяет запускать скрипты при подключениях отключениях клиентов в качестве аргументов передаются различные параметры клиента. Почему бы от туда и не менять правила.


"iptables: динамические ACL (в виде файлов в /proc?)"
Отправлено lithium , 06-Авг-09 14:23 
>OpenVPN Позволяет запускать скрипты при подключениях отключениях клиентов в качестве аргументов передаются
>различные параметры клиента. Почему бы от туда и не менять правила.

мне казалось что это само собой разумеется когда писал
"динамически добавлять/удалять ip-адреса в цепочки ACL_*",
но если неудачно выразился, то расшифровываю -- использую learn-address, ну и дальше в соответствии с написанным ранее.

Вопрос не как запускать iptables, а как это организовать правила/цепочки просто и надежно.



"iptables: динамические ACL (в виде файлов в /proc?)"
Отправлено ze6ra , 06-Авг-09 15:56 
>>OpenVPN Позволяет запускать скрипты при подключениях отключениях клиентов в качестве аргументов передаются
>>различные параметры клиента. Почему бы от туда и не менять правила.
>
>мне казалось что это само собой разумеется когда писал
>"динамически добавлять/удалять ip-адреса в цепочки ACL_*",
>но если неудачно выразился, то расшифровываю -- использую learn-address, ну и дальше
>в соответствии с написанным ранее.
>
>Вопрос не как запускать iptables, а как это организовать правила/цепочки просто и
>надежно.

iptables-restore предназначен для запуска при загрузке системы для начальной установки iptables. iptables-save для сохранения того что будет загружено потом при старте. Ничего красивого организовать с их помощью не выйдет. Как вариант загружать основу при запуске системы, а openVPN будет через скрипт из learn-address управлять своими цепочками ДИНАМИЧЕСКИ. При старте например можно также запустить скрипт который почистит цепочки от openvpn тут насколько фантазии хватит. Запуск iptables-restore на работающей системе это не нормально. Правда есть ещё iptables-restore ключик -n (--noflush)


"iptables: динамические ACL (в виде файлов в /proc?)"
Отправлено lithium , 06-Авг-09 16:58 
можно привести другой пример: добавили правило
--src x --dport y -j ACCEPT
после этого vpn сбойнул (или по каким-то другим причинам не отработал скрипт удаления правила для ip x)
после запуска openvpn кто-то другой получает ip-адрес x, и для него уже есть правило (осталось от предыдущего клиента). В iptables к сожалению нет возможности просто выполнить
iptables -D FOWRAWD --src x *
(wildcards не поддерживаются)
нужно четко задавать правила, а парсить вывод iptables -nv, а потом на основе полученного генерировать параметры для iptables -D ... чревато один лишний параметр не подхватил и правило не удалилось. Надо что-то простое как молоток.

"iptables: динамические ACL (в виде файлов в /proc?)"
Отправлено ze6ra , 06-Авг-09 17:26 
>можно привести другой пример: добавили правило
>--src x --dport y -j ACCEPT
>после этого vpn сбойнул (или по каким-то другим причинам не отработал скрипт
>удаления правила для ip x)

А если при старте vpn он будет чистить свои цепочки. Ну если vpn "сбойнул" то при рестарте
vpn он почистит цепочки, а клиенты при переподключении автоматом добавятся в цепочки (смысл хранить привила при рестарте vpn клиентам всё равно переподключаться). Скрипт не завист от работы vpn, демон либо работает и скрипт пускается и работает не зависимо от него, либо vpn не работает.    
>после запуска openvpn кто-то другой получает ip-адрес x, и для него уже
>есть правило (осталось от предыдущего клиента). В iptables к сожалению нет
>возможности просто выполнить
>iptables -D FOWRAWD --src x *
>(wildcards не поддерживаются)
>нужно четко задавать правила, а парсить вывод iptables -nv, а потом на
>основе полученного генерировать параметры для iptables -D ... чревато один лишний
>параметр не подхватил и правило не удалилось. Надо что-то простое как
>молоток.

Чистка цепочек при запуске которыми будет управлять vpn, с последующим добавлением и удалением правил при подключении и отключении клиентов разве не достаточно молоткообразное решение. А так "по каким-то другим причинам" может не отработать что угодно. Сомневаюсь что openvpn при нормальной работе будет пускать соответствующие скрипты через раз при добавлении или отключении клиента, ну да скрипт придётся скорей всего писать самому, вот внём конечно надо будет учитывать нюансы.



"iptables: динамические ACL (в виде файлов в /proc?)"
Отправлено lithium , 06-Авг-09 17:41 
>А если при старте vpn он будет чистить свои цепочки. Ну если
>vpn "сбойнул" то при рестарте
>vpn он почистит цепочки, а клиенты при переподключении автоматом добавятся в цепочки
>(смысл хранить привила при рестарте vpn клиентам всё равно переподключаться).

Я думал над этим, но в сборке под RHEL (из epel) нет возможности привязать запуск скриптов к старту конкретного openvpn-процесса (у меня два openvpn-демона). На выходных пришла мысль создавать цепочку имени ip-адреса (например, для ip a.b.c.d цепочку a-b-c-d) и при подключении клиента делать iptabless -F a-b-c-d, но что-то в этой идее не понравилось (сейчас не могу вспомнить что конкретно, попробую еще подумать).


"iptables: динамические ACL (в виде файлов в /proc?)"
Отправлено ze6ra , 06-Авг-09 21:20 
>[оверквотинг удален]
>>vpn "сбойнул" то при рестарте
>>vpn он почистит цепочки, а клиенты при переподключении автоматом добавятся в цепочки
>>(смысл хранить привила при рестарте vpn клиентам всё равно переподключаться).
>
>Я думал над этим, но в сборке под RHEL (из epel) нет
>возможности привязать запуск скриптов к старту конкретного openvpn-процесса (у меня два
>openvpn-демона). На выходных пришла мысль создавать цепочку имени ip-адреса (например, для
>ip a.b.c.d цепочку a-b-c-d) и при подключении клиента делать iptabless -F
>a-b-c-d, но что-то в этой идее не понравилось (сейчас не могу
>вспомнить что конкретно, попробую еще подумать).

а если задействовать параметры up и down. Поскольку каждый демон на своём интерфейсе то при поднтии интерфейса чистка цепочки соответствующего демона с дальнейшим заполнением при подключении клиентов.


"iptables: динамические ACL (в виде файлов в /proc?)"
Отправлено lithium , 07-Авг-09 10:48 

>а если задействовать параметры up и down. Поскольку каждый демон на своём
>интерфейсе то при поднтии интерфейса чистка цепочки соответствующего демона с дальнейшим
>заполнением при подключении клиентов.

хм, мне казалось, что эти скрипты выполняются при коннекте с клиентом, сейчас проверил -- ошибался. Буду думать, спасибо.


"iptables: динамические ACL (в виде файлов в /proc?)"
Отправлено ze6ra , 06-Авг-09 16:40 
Есть ещё iplist и moblock

"iptables: динамические ACL (в виде файлов в /proc?)"
Отправлено lithium , 06-Авг-09 16:59 
>Есть ещё iplist и moblock

это вроде для простой блокировки списков ip?..


"iptables: динамические ACL (в виде файлов в /proc?)"
Отправлено ze6ra , 06-Авг-09 17:40 
>это вроде для простой блокировки списков ip?..

оба используют NFQUEUE так что можно и достаточно хитрые правила делать.
хотя опыт пользования этими программами не большой, так что подробного описания возможностей и подводных камней дать не могу.


"iptables: динамические ACL (в виде файлов в /proc?)"
Отправлено lithium , 06-Авг-09 17:55 
>>это вроде для простой блокировки списков ip?..
>
>оба используют NFQUEUE так что можно и достаточно хитрые правила делать.
>хотя опыт пользования этими программами не большой, так что подробного описания возможностей
>и подводных камней дать не могу.

посмотрел iplist, imho программа жестко заточенная под блокировку ip-адресов, вторая давно не обновляется.


"iptables: динамические ACL (в виде файлов в /proc?)"
Отправлено ALex_hha , 06-Авг-09 14:17 
>правила разные, бОльшая часть клиентов с минимальным правами, нескольким клиентам нужен доступ
>к RDP-серверу, к нескольким сайтам, ssh, и выход наружу. Все эти
>права могут сочетаться в произвольном порядке.

Если клиентов не очень много выдавайте им статические адреса, для которых пропишите правила в iptables. Для всех остальных по дефолту разрешите доступ к необходимым ресурсам


"iptables: динамические ACL (в виде файлов в /proc?)"
Отправлено lithium , 06-Авг-09 14:26 
>>правила разные, бОльшая часть клиентов с минимальным правами, нескольким клиентам нужен доступ
>>к RDP-серверу, к нескольким сайтам, ssh, и выход наружу. Все эти
>>права могут сочетаться в произвольном порядке.
>
>Если клиентов не очень много выдавайте им статические адреса, для которых пропишите
>правила в iptables. Для всех остальных по дефолту разрешите доступ к
>необходимым ресурсам

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



"iptables: динамические ACL (в виде файлов в /proc?)"
Отправлено pavel_simple , 07-Авг-09 11:49 
man iptables

find recent


"iptables: динамические ACL (в виде файлов в /proc?)"
Отправлено lithium , 07-Авг-09 12:16 
>man iptables
>
>find recent

вот же ... когда искал в гугле, все примеры про recent были про динамичекское создание правил из самого netfilter, про работу с файлами ничего не было, а еще думал, почему слово такое знакомое! Похоже, это оно, спасибо большое! :)