Есть внутренняя сеть на xl0 - 172.19.14.0/24
Есть интернет на rl0 - 77.41.90.28ipfw + natd - стандартная настройка - блокируем всё из вне, разрешаем всё наружу
Всё работает кроме активного FTP из 172.19.14.0/24 наружу в интернет
Пассивный работает
Нужно чтобы работал активный3 часа гугла и яндекса - ничего не дали (сплошное сборище пи....сов)
Помогите добрые люди
P.S. Это решение не работает (первая ссылка в гугле):
http://www.opennet.me/tips/info/721.shtml
Если использование natd не критично - поглядите в сторону ipnat. Если фря седьмая, то нат есть прямо в ipfw.
Заменил natd на ipnat - тоже самое. Исходящий активный FTP не работает. Хоть убейся. =)
В Интернете ни одного сайта с ответом. Вообще.>Если использование natd не критично - поглядите в сторону ipnat. Если фря
>седьмая, то нат есть прямо в ipfw.
Сам в свое время натыкался на эти грабли. Грамотные люди подсказали.
Используй опцию natd "punch_fw". Лучше прописать ее в natd.cfg.
Суть в том, что natd понимает активный ftp и создает соотв временные правила для фаревола.
globus в свое время писал
http://www.opennet.me/openforum/vsluhforumID3/4247.html
http://linux.opennet.ru/tips/sml/65.shtml
>Есть внутренняя сеть на xl0 - 172.19.14.0/24
>Есть интернет на rl0 - 77.41.90.28
>
>ipfw + natd - стандартная настройка - блокируем всё из вне, разрешаем
>всё наружуХотя бы привел ipfw sh этих стандартных настроек.
>P.S. Это решение не работает (первая ссылка в гугле):
>http://www.opennet.me/tips/info/721.shtmlНе понимаю нафига крутить keep state к активному нату. У меня как раз natd работает только для активного фтп (не примоню чтобы natd хотел какие-либо дополнительные параметры для активации ftp-proxy):
ipfw add 37 divert 8668 ip from 192.168.0.0/16,10.0.0.0/8 to any 21,20 out via re0
ipfw add 37 divert 8668 ip from any to $nat_ip in via re0FreeBSD 6.0-RELEASE
>Не понимаю нафига крутить keep state к активному нату. У меня как
>раз natd работает только для активного фтп (не примоню чтобы natd
>хотел какие-либо дополнительные параметры для активации ftp-proxy):
>1) ты походу ваааще нихрена не понимаешь - какая связь keep state с активным прокси вообще???
2) на НАТ активный ftp не работает по определению (учи матчасть), в natd реализован хитрый обход этого дела.
3) какой нахер proxy? че за каша в голове?>ipfw add 37 divert 8668 ip from 192.168.0.0/16,10.0.0.0/8 to any 21,20 out
>via re0
>ipfw add 37 divert 8668 ip from any to $nat_ip in via
>re0правила выше херня не имеющая отношения в активному ftp
Кстати в pf только ftpproxy и рекомендован для поддержки активного FTP
Если бы было нечто похожее в ipfw - я был бы только радИз документации к pf.conf:
ftpproxy_enable=”YES” >> rc.conf
в pf.conf
nat-anchor “ftp-proxy/*”
rdr-anchor “ftp-proxy/*”
rdr pass on $if proto tcp from any to $if port 9021 -> 127.0.0.1 port 8021
anchor “ftp-proxy/*”Этими 5мя строчками разрешается вся головная боль с FTP в pf
>3) какой нахер proxy? че за каша в голове?
>что то думается то натд и механизм отслеживания команды PORT это разные
>уровни сетевой модели. дайте ссылку как натд отслеживает команду PORT.
>приведенные правила были для пассинвного фтпНемного покапавшись в natd выяснилось, что natd использует libalias(3). А
немного покопавшись в libalias выяснилось, что эта либа умеет отслеживать фтп команды.
(см /usr/src/sys/netinet/libalias/alias_ftp.c).
Alias_ftp.c performs special processing for FTP sessions under
TCP. Specifically, when a PORT/EPRT command from the client
side or 227/229 reply from the server is sent, it is intercepted
and modified. The address is changed to the gateway machine
and an aliasing port is used.Так что можно сказать что natd так же отслеживает и меняет команды ftp.
Теперь на счет punch_fw. Читаем маны и видим.
man libalias(3):
PKT_ALIAS_PUNCH_FW
This option makes libalias `punch holes' in an
ipfirewall(4) based firewall for FTP/IRC DCC connections.
The holes punched are bound by from/to IP address and port;
it will not be possible to use a hole for another connec-
tion. A hole is removed when the connection that uses it
dies.Ептыть.. можете в меня плюнуть если это не STATEFULL и если это не просто
динамическое создание временного правила в ipfw.А вот опция -s
man natd:-use_sockets | -s
Allocate a socket(2) in order to establish an FTP data or IRC
DCC send connection. This option uses more system resources,
but guarantees successful connections when port numbers con-
flict.Она же в libalias(3):
PKT_ALIAS_USE_SOCKETS
This bit should be set when the packet aliasing host origi-
nates network traffic as well as forwards it. When the
packet aliasing host is waiting for a connection from an
unknown host address or unknown port number (e.g. an FTP
data connection), this mode bit specifies that a socket be
allocated as a place holder to prevent port conflicts.
Once a connection is established, usually within a minute
or so, the socket is closed.И создает сокет (как написано для предотвращения конфилктов портов) на который
"соединяется" сервер со своего 20 порта.Таки образом, если правла ipfw уже разрешают прохождение заначеных/разначеных
пакетов, то активный режим будет работать без дополнительных опций.
Спасибо, работаетТолько пришлось ещё добавить
natd_flags="-s -m -u -dynamic -punch_fw 500:499"ПРОБЛЕМА РЕШИЛАСЬ! УРА!! =))
>ЕЩЕ РАЗ!!!
>
>Используй опцию natd "punch_fw". Лучше прописать ее в natd.cfg.
>Суть в том, что natd понимает активный ftp и создает соотв временные
>правила для фаревола.
>
>В твоей конфиге небудет никакой головной боли )
>1) ты походу ваааще нихрена не понимаешь - какая связь keep state
>с активным прокси вообще???А такая, уважаемый, что все примеры, на которые даны ссылки используют keep state правила. Если не знаете что такое keep state читайте документацию. Ну а уж что значит "активный прокси" - это видимо только Вам известно. Не дадите ссылочку почитать?
>2) на НАТ активный ftp не работает по определению (учи матчасть), в
>natd реализован хитрый обход этого дела.Вот именно что natd позволяет работать через себя ftp в активном режиме. Без всяких дополнительных настроек.
>3) какой нахер proxy? че за каша в голове?
man ftp-proxy
>>ipfw add 37 divert 8668 ip from 192.168.0.0/16,10.0.0.0/8 to any 21,20 out
>>via re0
>>ipfw add 37 divert 8668 ip from any to $nat_ip in via
>>re0
>
>правила выше херня не имеющая отношения в активному ftpВидимо Вам самому не мешало бы почитать кое что из документации, в частности как работает активный режим ftp протокола, тогда думаю правила приведенные выше для Вас обретут смысл.
Кстати ftp-proxy для FreeBSD был специально заточен под pf
Сколько не пробовал под ipfw - не работаетDESCRIPTION
ftp-proxy is a proxy for the Internet File Transfer Protocol. FTP con-
trol connections should be redirected into the proxy using the pf(4) rdr
command, after which the proxy connects to the server on behalf of the
client.>man ftp-proxy
>
>Кстати ftp-proxy для FreeBSD был специально заточен под pf
>Сколько не пробовал под ipfw - не работаетИменно так, т.к. еще повторюсь, в natd реализован свой механизм отслежвания команды PORT. При этом механизм для активного ftp, реализованный в ftp-proxy работает именно как прокси! Когда устанавливается data connection на клиента в качестве src ip будет адрес где запущен ftp-proxy. В то время как natd работает как прозрачный прокси, сохраняя src ip сервера.
что то думается то натд и механизм отслеживания команды PORT это разные уровни сетевой модели. дайте ссылку как натд отслеживает команду PORT.
приведенные правила были для пассинвного фтп
>что то думается то натд и механизм отслеживания команды PORT это разные
>уровни сетевой модели. дайте ссылку как натд отслеживает команду PORT.
>приведенные правила были для пассинвного фтпПосыпаю голову пеплом.. Не нашел в исходниках чтобы natd отслеживал команд ftp. Был не прав, вспылил. Однако у меня, при описаных выше правилах SYN от data connection с 20-ого порта сервера успешно проходит через natd и доходит до клиента. Одако никаких punch_fw я не использую. Сейчас разберусь как natd это делает...
>>что то думается то натд и механизм отслеживания команды PORT это разные
>>уровни сетевой модели. дайте ссылку как натд отслеживает команду PORT.
>>приведенные правила были для пассинвного фтп
>
>Посыпаю голову пеплом.. Не нашел в исходниках чтобы natd отслеживал команд ftp.
>Был не прав, вспылил. Однако у меня, при описаных выше правилах
>SYN от data connection с 20-ого порта сервера успешно проходит
>через natd и доходит до клиента. Одако никаких punch_fw я не
>использую. Сейчас разберусь как natd это делает...Оданко судя по tcpdump -X после прохождения через natd команда EPRT заменена на другую с ip адресом за которым просиходит NAT. Пока у меня объяснения нет.
>что то думается то натд и механизм отслеживания команды PORT это разные
>уровни сетевой модели. дайте ссылку как натд отслеживает команду PORT.
>приведенные правила были для пассинвного фтпНемного покапавшись в natd выяснилось, что natd использует libalias(3). А немного покопавшись в libalias выяснилось, что эта либа умеет отслеживать фтп команды.
(см /usr/src/sys/netinet/libalias/alias_ftp.c).
Alias_ftp.c performs special processing for FTP sessions under
TCP. Specifically, when a PORT/EPRT command from the client
side or 227/229 reply from the server is sent, it is intercepted
and modified. The address is changed to the gateway machine
and an aliasing port is used.Так что можно сказать что natd так же отслеживает и меняет команды ftp.
Теперь на счет push_fw. Читаем маны и видим.
man libalias(3):
PKT_ALIAS_PUNCH_FW
This option makes libalias `punch holes' in an
ipfirewall(4) based firewall for FTP/IRC DCC connections.
The holes punched are bound by from/to IP address and port;
it will not be possible to use a hole for another connec-
tion. A hole is removed when the connection that uses it
dies.Ептыть.. можете в меня плюнуть если это не STATEFUL и если это не просто динамическое создание временного правила в ipfw.
А вот опция -s
man natd:-use_sockets | -s
Allocate a socket(2) in order to establish an FTP data or IRC
DCC send connection. This option uses more system resources,
but guarantees successful connections when port numbers con-
flict.Она же в libalias(3):
PKT_ALIAS_USE_SOCKETS
This bit should be set when the packet aliasing host origi-
nates network traffic as well as forwards it. When the
packet aliasing host is waiting for a connection from an
unknown host address or unknown port number (e.g. an FTP
data connection), this mode bit specifies that a socket be
allocated as a place holder to prevent port conflicts.
Once a connection is established, usually within a minute
or so, the socket is closed.И создает сокет (как написано для предотвращения конфилктов портов) на который "соединяется" сервер со своего 20 порта.
Таки образом, если правла ipfw уже разрешают прохождение заначеных/разначеных пакетов, то активный режим будет работать без дополнительных опций.
>А такая, уважаемый, что все примеры, на которые даны ссылки используют keep
>state правила. Если не знаете что такое keep state читайте документацию.Прошу прощения. Везде где я писал keep state читать STATEFUL FIREWALL. keep state это частный случай.
>>1) ты походу ваааще нихрена не понимаешь - какая связь keep state
>>с активным прокси вообще???
>
>А такая, уважаемый, что все примеры, на которые даны ссылки используют keep
>state правила. Если не знаете что такое keep state читайте документацию.
>Ну а уж что значит "активный прокси" - это видимо только
>Вам известно. Не дадите ссылочку почитать?опечатка - читать "активный ftp" вмето "активный прокси" )
>
>>2) на НАТ активный ftp не работает по определению (учи матчасть), в
>>natd реализован хитрый обход этого дела.
>
>Вот именно что natd позволяет работать через себя ftp в активном режиме.
>Без всяких дополнительных настроек.а я о чем? дак о томже )
>
>>3) какой нахер proxy? че за каша в голове?
>
>man ftp-proxyнахер вообще проксировать в этом случае ftp - что такое прокси я знаю )
>>>ipfw add 37 divert 8668 ip from 192.168.0.0/16,10.0.0.0/8 to any 21,20 out
>>>via re0
>>>ipfw add 37 divert 8668 ip from any to $nat_ip in via
>>>re0
>>
>>правила выше херня не имеющая отношения в активному ftp
>
>Видимо Вам самому не мешало бы почитать кое что из документации, в
>частности как работает активный режим ftp протокола, тогда думаю правила приведенные
>выше для Вас обретут смысл.это обычные правила ната - частный случай для ftp - ничего более
если есть хоть одно правило запрещающее in via setup (а в нормальном фареволе они есть),
то толку в них не будет
сомневаюсь что natd без опции panch вообще прочухаеть про активный ftp ...
>>man ftp-proxy
>
>нахер вообще проксировать в этом случае ftp - что такое прокси я
>знаю )В мане все написано...
>>Вот именно что natd позволяет работать через себя ftp в активном режиме.
>>Без всяких дополнительных настроек.
>
>а я о чем? дак о томже )Если Вы согласны с моим утверждением здесь
>сомневаюсь что natd без опции panch вообще прочухаеть про активный ftp ...
То что это за высказывание?
Выше я привел довольно развернуто как работает активный ftp через natd со ссылками на соответствующие маны и исходники.
>это обычные правила ната - частный случай для ftp - ничего более
Нет, это правила _только_ для работы ftp в активном режиме. Даже пассивный через такие правила работать не будет, т.к. клиент не сможет установить соединение на сервер. В общем приведеные мною правила естественно являются частным случаем использования natd.
>
>если есть хоть одно правило запрещающее in via setup (а в нормальном
>фареволе они есть),
>то толку в них не будетЯ могу и быть не прав, но считаю, что если пакет достиг правила divert, то все фильтрующие правила с исходным ip он прошел. А делать STATEFUL FIREWALL для приватных адресов бессмысленно.
>Я могу и быть не прав, но считаю, что если пакет достиг
>правила divert, то все фильтрующие правила с исходным ip он прошел.
>А делать STATEFUL FIREWALL для приватных адресов бессмысленно.ммм невсегда .. пройдя нат у пакета сменится дестанейшн - фильтровать можно и дальше.
спасибо за то что так глубоко капнул про нат выше )
>>Я могу и быть не прав, но считаю, что если пакет достиг
>>правила divert, то все фильтрующие правила с исходным ip он прошел.
>>А делать STATEFUL FIREWALL для приватных адресов бессмысленно.
>
>ммм невсегда .. пройдя нат у пакета сменится дестанейшн - фильтровать можно
>и дальше.Простите, Вы про какие пакеты говорите? Про "заначеные" (прошедшие NAT из локальной сети) или "разначеные" (идушие из внешней сети в локальную)?
Если про "заначеные", то у них адрес назначения не меняется.
Если про "разначеные", то это обратные пакеты, и вообще говоря, мы их ожидаем.
>Простите, Вы про какие пакеты говорите? Про "заначеные" (прошедшие NAT из локальной
>сети) или "разначеные" (идушие из внешней сети в локальную)?
>
>Если про "заначеные", то у них адрес назначения не меняется.
>Если про "разначеные", то это обратные пакеты, и вообще говоря, мы их
>ожидаем.Ожидаем мы их или нет - фильтровать можно на любой стадии ...