Миграция из ipfw на pf

Обсуждаем OS FreeBSD и сервисы на ней.

Re: Миграция из ipfw на pf

Сообщение METAJIJI » 13 июл 2012, 15:01

Например клиенты не могут подключиться к пассивному ftp в интернете. ftp://ftp.freebsd.org/. Сами попробуйте без ftp-proxy подключиться :)
Да и с публикованием локального ftp тоже проблем не мало, лечится опять же костылем в виде ftp-proxy, когда в ipfw это опять же просто работает :)

pf nat не сможет пропустить через себя ftp-passive трафик от клиента к внешнему ftp в интернете, т.к. клиенту не удастся выполнить команду ftp PORT, внутри пакета будет локальный ip клиента, который уйдет удаленному серверу, в результате чего сервер не сможет ответить клиенту на запрос. Чтобы все заработало нужно, чтобы NAT поменял ip адрес и внутри пакета. Это называется ftp-ALG, как я уже в ipfw это делает libalias с помощью библиотеки, /lib/libalias_ftp.so. В других реализациях NAT'а есть подобные реализации, не буду перечислять все, вопрос не о том :)

Та же проблема есть и у SIP трафика, например чтобы Asterisk смог соединиться с удаленным сервером провайдера, нужно сказать pf nat'у (если быть точным то это скорее PAT, чем NAT), чтобы он не изменял порты - опция static-port (с этой опцией pf nat будет как классический NAT), но на этом решение проблемы с SIP через pf nat не заканчивается, нужно будет еще сделать проброс RTP портов, а в настройках Asterisk сделать так, чтобы внутри SIP пакетов отправлялся IP роутера с pf nat. Только после этих манипуляций все заработает :)

И точно такая же проблема у GRE трафика, в случае когда клиенты хотят подключиться к VPN серверу по PPTP, с L2TP проблем не возникает, но в моей практике очень много именно PPTP соединений. Поэтому решающим был переход на ipfw, хотя pf вроде как всем устраивал, не смотря на все костыли :)

Может я чего упустил конечно, но ftp-proxy использую не я один, и проблема тут явно есть, потому что сам протокол ftp так устроен.

Вот я и заглянул сюда, узнать у знающих гуру, как они борятся с VPN через PPTP :)

P.S. Пользователи подключаются к удаленным VPN реализованным на mpd под FreeBSD, но думаю тут особой разницы нет, т.к. проблема не в реализации и сервере, а в протоколе и тем, как его обрабатывает pf nat. :)

Пощупав год pf nat пришел к выводу, что он просто PAT и ничего больше, меняет локальные ip на свой Ip только в заголовках пакетов, в тело пакета никогда не вмешивается, как это делает libalias и т.п. вещи.
Те, кто решился использовать pf nat, будьте готовы к тому, что некоторые специфические протоколы откажутся работать, например h323, sip, ftp-passive, gre. С некоторыми еще можно как-то бороться, а вот с gre мне так и не удалось решить проблему(кроме как делать на каждый удаленный сервер свой редирект).
METAJIJI
проходил мимо
 
Сообщения: 3
Зарегистрирован: 11 июл 2012, 10:19

Re: Миграция из ipfw на pf

Сообщение MadMax » 13 июл 2012, 16:44

если pf у вас крутится на чём-то из BSD, то можно в качестве костыля попробовать Frickin PPTP Proxy или что-то подобное
во FreeBSD - /usr/ports/net/frickin
www.mega-net.ru - IT аутсорсинг
MadMax
Site Admin
 
Сообщения: 37
Зарегистрирован: 09 июл 2008, 15:39
Откуда: Moscow

Миграция из ipfw на pf

Сообщение BarbraMa » 13 окт 2015, 11:22

Вот что у меня в правилах

ipfw -f flush
ipfw add deny ip from "table1" to me
ipfw add allow ip from any to any setup limit src-addr 50

Проверял программой правило с limit src-addr 50 , не работает. Программе удается открыть на много больше 50 соединений одновременно.
Ядро без компиляции. С компиляцией ipfw совсем чудит и ваще не работает.
Когда стояло вместо 50, 10 то все работало, но 10 соединений стало мало, поменял, сделал перезагрузку и не работает. Правила редактировал с помощью "ee"
Что не так, почему не работает?
BarbraMa
проходил мимо
 
Сообщения: 4
Зарегистрирован: 13 окт 2015, 04:09

Re: Миграция из ipfw на pf

Сообщение root » 13 окт 2015, 18:43

Работает или не работает можно узнать точно, проверив через log:
Читаем:
Код: Выделить всё
man ipfw

RULE FORMAT
The format of firewall rules is the following:

[rule_number] [set set_number] [prob match_probability] action
[log [logamount number]] [altq queue] [{tag | untag} number] body
...skiped...
log [logamount number]
When a packet matches a rule with the log keyword, a message will
be logged to syslogd(8) with a LOG_SECURITY facility. The log-
ging only occurs if the sysctl variable net.inet.ip.fw.verbose is
set to 1 (which is the default when the kernel is compiled with
IPFIREWALL_VERBOSE) and the number of packets logged so far for
that particular rule does not exceed the logamount parameter. If
no logamount is specified, the limit is taken from the sysctl
variable net.inet.ip.fw.verbose_limit. In both cases, a value of
0 removes the logging limit.

Once the limit is reached, logging can be re-enabled by clearing
the logging counter or the packet counter for that entry, see the
resetlog command.

Note: logging is done after all other packet matching conditions
have been successfully verified, and before performing the final
action (accept, deny, etc.) on the packet.

Код: Выделить всё
ipfw add allow log ip from any to any setup limit src-addr 50

Код: Выделить всё
tail -f /var/log/security


P.S.
BarbraMa писал(а):ipfw add deny ip from "table1" to me

Не верно. Читаем:
Код: Выделить всё
man ipfw

table(number[,value])
Matches any IPv4 address for which an entry exists in the
lookup table number. If an optional 32-bit unsigned
value is also specified, an entry will match only if it
has this value. See the LOOKUP TABLES section below for
more information on lookup tables.

Верно:
Код: Выделить всё
ipfw add deny ip from "table(1)" to me
С уважением, root

Изображение
------------
www.mega-net.ru - IT аутсорсинг
Аватара пользователя
root
Site Admin
 
Сообщения: 1894
Зарегистрирован: 11 июн 2008, 13:05
Откуда: Moscow, Russia

Пред.

Вернуться в FreeBSD

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 33