В связи с существенной разницей в цене на подключение с выделенным/динамическим 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?
может задействовать таблици, которые могут грузится из файла
>В связи с существенной разницей в цене на подключение с выделенным/динамическим 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?
Одно правило нельзя поменять на лету, только таблицу, афаик.
Мак адреса не можете использовать? Как правило вообще должно выглядеть?
Всегда есть несколько способов добиться нужной цели.
>Одно правило нельзя поменять на лету, только таблицу, афаик.
>Мак адреса не можете использовать? Как правило вообще должно выглядеть?
>Всегда есть несколько способов добиться нужной цели.Правило типа:
pass in quick on $if_in proto tcp from $MY_IP to ($if_in)ports 22, 80 keep stateменять надо $MY_IP
>>Одно правило нельзя поменять на лету, только таблицу, афаик.
>>Мак адреса не можете использовать? Как правило вообще должно выглядеть?
>>Всегда есть несколько способов добиться нужной цели.
>
>Правило типа:
>pass in quick on $if_in proto tcp from $MY_IP to ($if_in)ports 22,
>80 keep state
>
>менять надо $MY_IPtable <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
>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, но это временно и поправимо :-)
>>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 }"
но у меня почему-то не работает, хотя так бы облегчило жизнь! :(