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

Исходное сообщение
"как в PF поменять одно правило, не перечитывая весь список"

Отправлено sergetv , 15-Апр-07 22:20 
В связи с существенной разницей в цене на подключение с выделенным/динамическим IP в пользу последнего, и необходимостью иметь доступ к управлению серверами и просмотру статистики из внешней сети возникла такая идея:
Есть два (пока два) сервера с динамическими IP (S1 и S2). надо разрешить SSH и HTTP между ними, И ТОЛЬКО МЕЖДУ НИМИ. Каждый раз при смене IP на внешнем (подключенном к интернету интерфейсу) сервер S1 пишет этот адрес в файл S1.ip, а S2 соответственно в S2.ip на один из сайтов бесплатного хостинга по ftp (скажем http://www.MY.freehost.ru).
Скрипт запускаемый по крону раз в минуту на наждом из серверов (скажем S1) проверяет, не обновился ли http://www.MY.freehost.ru/S2.ip. Если обновился - скрипт должен поменять ОДНО правило файрвола, разрешающее SSH и HTTP к себе с того IP, что записан в S2.ip.
В IPFW можно было:
ipfw del 1000
ipfw add 1000 allow и т.д.
А как это реализовать в PF? т.е. не перечитывать всю таблицу заново..
Вариант использовать PF и IPFW самый простой его я знаю :-), может можно чисто средствами PF?

Содержание

Сообщения в этом обсуждении
"как в PF поменять одно правило, не перечитывая весь список"
Отправлено reader , 16-Апр-07 01:12 
может задействовать таблици, которые могут грузится из файла



"как в PF поменять одно правило, не перечитывая весь список"
Отправлено idle , 16-Апр-07 11:55 
>В связи с существенной разницей в цене на подключение с выделенным/динамическим IP
>в пользу последнего, и необходимостью иметь доступ к управлению серверами и
>просмотру статистики из внешней сети возникла такая идея:
>Есть два (пока два) сервера с динамическими IP (S1 и S2). надо
>разрешить SSH и HTTP между ними, И ТОЛЬКО МЕЖДУ НИМИ. Каждый
>раз при смене IP на внешнем (подключенном к интернету интерфейсу) сервер
>S1 пишет этот адрес в файл S1.ip, а S2 соответственно в
>S2.ip на один из сайтов бесплатного хостинга по ftp (скажем http://www.MY.freehost.ru).
>
>Скрипт запускаемый по крону раз в минуту на наждом из серверов (скажем
>S1) проверяет, не обновился ли http://www.MY.freehost.ru/S2.ip. Если обновился - скрипт должен
>поменять ОДНО правило файрвола, разрешающее SSH и HTTP к себе с
>того IP, что записан в S2.ip.
>В IPFW можно было:
>ipfw del 1000
>ipfw add 1000 allow и т.д.
>А как это реализовать в PF? т.е. не перечитывать всю таблицу заново..
>
>Вариант использовать PF и IPFW самый простой его я знаю :-), может
>можно чисто средствами PF?
Одно правило нельзя поменять на лету, только таблицу, афаик.
Мак адреса не можете использовать? Как правило вообще должно выглядеть?
Всегда есть несколько способов добиться нужной цели.

"как в PF поменять одно правило, не перечитывая весь список"
Отправлено Sergetv , 16-Апр-07 12:53 
>Одно правило нельзя поменять на лету, только таблицу, афаик.
>Мак адреса не можете использовать? Как правило вообще должно выглядеть?
>Всегда есть несколько способов добиться нужной цели.

Правило типа:
pass in quick on $if_in proto tcp from $MY_IP to ($if_in)ports 22, 80 keep state

менять надо $MY_IP


"как в PF поменять одно правило, не перечитывая весь список"
Отправлено domas , 17-Апр-07 14:51 
>>Одно правило нельзя поменять на лету, только таблицу, афаик.
>>Мак адреса не можете использовать? Как правило вообще должно выглядеть?
>>Всегда есть несколько способов добиться нужной цели.
>
>Правило типа:
>pass in quick on $if_in proto tcp from $MY_IP to ($if_in)ports 22,
>80 keep state
>
>менять надо $MY_IP

table <my_ip>
pass in quick on $if_in proto tcp from <my_ip> to ($if_in)ports 22, 80 keep state

добавляем: pfctl -t my_ip -Ta 1.2.3.4
удаляем: pfctl -t my_ip -Td 1.2.3.4 или все сразу pfctl -t my_ip -Tf


"как в PF поменять одно правило, не перечитывая весь список"
Отправлено Sergetv , 18-Апр-07 09:45 
>table <my_ip>
>pass in quick on $if_in proto tcp from <my_ip> to ($if_in)ports 22, 80 keep state
>
>добавляем: pfctl -t my_ip -Ta 1.2.3.4
>удаляем: pfctl -t my_ip -Td 1.2.3.4 или все сразу pfctl -t my_ip -Tf

Ок, спасибо, это то, что надо!
Пока не хватает опыта работы с PF, но это временно и поправимо :-)



"как в PF поменять одно правило, не перечитывая весь список"
Отправлено cj_nik , 06-Ноя-08 16:20 
>>table <my_ip>
>>pass in quick on $if_in proto tcp from <my_ip> to ($if_in)ports 22, 80 keep state
>>
>>добавляем: pfctl -t my_ip -Ta 1.2.3.4
>>удаляем: pfctl -t my_ip -Td 1.2.3.4 или все сразу pfctl -t my_ip -Tf
>
>Ок, спасибо, это то, что надо!
>Пока не хватает опыта работы с PF, но это временно и поправимо
>:-)

А как быть если в правиле надо менять не IP адресс а название интерфейса или номера портов, или вообще набор правил менять динамически
Тут на помощь приходят "Якоря" anchor


В документации http://house.hcn-strela.ru/BSDCert/BSDA-course/apcs02.html#p... так же сказано было
При помощи команды pfctl(8) можно переопределять значения макросов с помощью опции -D. Например:

# pfctl -D friends="{ 192.168.1.1, 10.1.2.3 }"
но у меня почему-то не работает, хотя так бы облегчило жизнь! :(