PF policy-base routing и localhost
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
-
- рядовой
- Сообщения: 29
- Зарегистрирован: 2010-02-13 15:20:16
PF policy-base routing и localhost
Здравствуйте, подскажите, настраивал policy-base routing, кажись все настроил, все работает, lan ходит через нужные wan-ы и вдруг выяснилось, что с локальной машины выйти никуда нельзя, при попытке выполнить ping всегда получаю ответ No route to host, при этом локальные адреса в правилах указаны, в тех же что и для всех. На машине не указан default gateway, так как если его указать то localhost начинает работать через него, а не в соответствии с правилами PF. Что тут можно сделать, как заставить PF правила маршрутизации работать для самой локальной машины?
Услуги хостинговой компании Host-Food.ru
Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/
-
- проходил мимо
Re: PF policy-base routing и localhost
Здравствуйте.
Промучался с той же самой темой.
Давно предпочитаю полиси, но есть грабли...
Конфигурация следующая:
Стоит хост, одним интерфейсом - смотрит в Сеть.
другим - в локалку,
tun0 - впн в одном из джейлов (пока его не отлаживал, так что могут быть косяки)
lo1 - на нём расположены все джейлы.
Проблема в следующем: на lo1 интерфейсе пакеты вначале приходят `out` затем уходят к джейлам 'in'.
Как сделать 'nat out' в этой версии PF (FreeBSD 8.2) я не нашёл ;(((
NAT происходит на входе в интерфейс и перед правилами: http://coombs.anu.edu.au/~avalon/ipfil-flow.html
Вероятно та же канитель и с tun0 будет.
Приведу свой рабочий конфиг, в котором видно что нат от Джейлов идёт без использования Policy-Based конфигурации.
При этом с внутреннего интерфейса на внешний - прекрасно натится.
Вопрос - как же сделать так, чтоб джейлы натились через 'tagged' (ну или хотя бы как натить из 'out' буфера)?
Сразу оговорюсь - конфиг избыточен, просто старался учитывать все потоки. В дальнейшем планируется неиспользуемые тэги закоментить в разделе Policy Enforcement
Промучался с той же самой темой.
Давно предпочитаю полиси, но есть грабли...
Конфигурация следующая:
Стоит хост, одним интерфейсом - смотрит в Сеть.
другим - в локалку,
tun0 - впн в одном из джейлов (пока его не отлаживал, так что могут быть косяки)
lo1 - на нём расположены все джейлы.
Проблема в следующем: на lo1 интерфейсе пакеты вначале приходят `out` затем уходят к джейлам 'in'.
Как сделать 'nat out' в этой версии PF (FreeBSD 8.2) я не нашёл ;(((
NAT происходит на входе в интерфейс и перед правилами: http://coombs.anu.edu.au/~avalon/ipfil-flow.html
Вероятно та же канитель и с tun0 будет.
Приведу свой рабочий конфиг, в котором видно что нат от Джейлов идёт без использования Policy-Based конфигурации.
При этом с внутреннего интерфейса на внешний - прекрасно натится.
Вопрос - как же сделать так, чтоб джейлы натились через 'tagged' (ну или хотя бы как натить из 'out' буфера)?
Сразу оговорюсь - конфиг избыточен, просто старался учитывать все потоки. В дальнейшем планируется неиспользуемые тэги закоментить в разделе Policy Enforcement
Код: Выделить всё
# The ConFig of xxx
#
# Prepare for filtering
scrub in all
# Defining network interfaces
extif="igb0"
intif="igb1"
vpnif="tun0"
loopback0="lo0"
jailsif0="lo1"
# Defining external IP's
extip="whiteIP"
extip1="whiteIP1"
extip2="whiteIP2"
extip3="whiteIP3"
extip4="whiteIP4"
# Defining internal IP's
intip="192.168.75.101"
intnet="192.168.75.0/24"
janet="192.168.11.0/24"
vpnet="172.16.7.0/24"
vpngw="172.16.7.1"
jbuki="192.168.75.52"
jghivete="192.168.75.57"
intjgw="192.168.11.1"
intjalephip="192.168.11.101"
intjbethip="192.168.11.102"
# All net iface's
ifaces="{" $extif $intif $vpnif "lo0 lo1 }"
# Defining ICMP types to pass
icmp_types=" echoreq "
# Tables
table <rfc1918> const { 192.168.0.0/16\
172.16.0.0/12\
10.0.0.0/8 }
table <eunet> const { 192.168.75.0/24\
192.168.11.0/24\
172.16.7.0/24 }
table <jails> const { $intjalephip\
$intjbethip }
table <extips> const { $extip\
$extip1\
$extip2\
$extip3\
$extip4 }
table <me> const { $vpngw\
$intjgw\
$intip\
$extip\
$extip1\
$extip2\
$extip3\
$extip4 }
table <vpnusers> persist
## RDR
# Ext
rdr pass on $extif proto tcp to $extip1 port 80 \
-> $jghivete port http
rdr pass on $extif proto tcp to $extip1 port 8080 \
-> $jghivete port 8080
rdr pass on $extif proto tcp to $extip1 port 389 \
-> $jghivete port 389
rdr pass log on $extif proto tcp to $extip1 port 3000 \
-> $jbuki port http
# Int
rdr pass on $extif proto { tcp udp } to $extip1 port domain \
-> $intjalephip port domain
rdr pass on $intif proto { tcp udp } to $intip port domain \
-> $intjalephip port domain
rdr pass on $extif proto tcp to $extip1 port 2022 \
-> $intjalephip port ssh
rdr pass on $intif proto tcp to $intip port 2022 \
-> $intjalephip port ssh
rdr pass on $extif proto tcp to $extip1 port 3022 \
-> $intjbethip port ssh
rdr pass on $intif proto tcp to $intip port 3022 \
-> $intjbethip port ssh
rdr pass on $extif proto udp to $extip2 port 1194 \
-> $intjbethip port 1194
# NAT
nat on $extif all tag LAN2INET_NAT tagged LAN2INET\
-> ($extif:0)
nat on $extif from $janet to !$janet \
-> ($extif:0)
#tag LAN2INET_NAT tagged LAN2INET -> ($extif:0)
#tag JAILS2INET_NAT tagged JAILS2INET -> ($extif:0)
# SKIP
set state-policy if-bound
set ruleset-optimization none
set skip on $loopback0
# POLICY RULES
block log all
block in log quick on $extif from <rfc1918>
# LEGACY
pass inet proto icmp icmp-type $icmp_types tag ICMP
pass inet proto udp from any to any port 33433 >< 33626 tag TRACE
# NETS classifying
## JAILS iface
### IN
pass out log on $jailsif0 from $janet tag JAILS2ANY
pass out log on $jailsif0 to $janet tagged JAILS2ANY tag JAILS2JAILS
pass out log on $jailsif0 to $intnet tagged JAILS2ANY tag JAILS2LAN
pass out log on $jailsif0 to $vpnet tagged JAILS2ANY tag JAILS2VPN
pass out log on $jailsif0 all tagged JAILS2ANY tag JAILS2INET
block out log quick on $jailsif0 all tagged JAILS2ANY
## LAN
### IN
pass in on $intif from $intnet tag LAN2ANY
pass in on $intif to $intnet tagged LAN2ANY tag LAN2LAN
pass in on $intif to $janet tagged LAN2ANY tag LAN2JAILS
pass in on $intif to $vpnet tagged LAN2ANY tag LAN2VPN
pass in on $intif all tagged LAN2ANY tag LAN2INET
block in log quick on $intif all tagged LAN2ANY
## VPN
### IN
pass in on $vpnif from $vpnet tag VPN2ANY
pass in on $vpnif to <vpnusers> tagged VPN2ANY tag VPN2VPN
pass in on $vpnif to $janet tagged VPN2ANY tag VPN2JAILS
pass in on $vpnif to $intnet tagged VPN2ANY tag VPN2LAN
pass in on $vpnif all tagged VPN2ANY tag LAN2INET
block in log quick on $vpnif all tagged VPN2ANY
## SELF
### IN
pass in on $extif all tag INET2ANY
pass in on $extif to <extips> tag INET2ME
pass in on $intif to <me> tagged LAN2INET tag LAN2ME
pass in on $jailsif0 to <me> tagged JAILS2JAILS tag JAILS2ME
pass in on $vpnif to <me> tagged VPN2VPN tag VPN2ME
block in log quick on $extif all tagged INET2ANY
## JAILS
### OUT
pass in log on $jailsif0 to $janet tag ANY2JAILS
pass in log on $jailsif0 from $janet tagged ANY2JAILS tag JAILS2JAILS
pass in log on $jailsif0 from $intnet tagged ANY2JAILS tag LAN2JAILS
pass in log on $jailsif0 from $vpnet tagged ANY2JAILS tag VPN2JAILS
pass in log on $jailsif0 all tagged ANY2JAILS tag ME2JAILS
block in log quick on $jailsif0 all tagged ANY2JAILS
## LAN
### OUT
pass out on $intif all tag ANY2LAN
pass out on $intif from $intnet tagged ANY2LAN tag LAN2LAN
pass out on $intif from $janet tagged ANY2LAN tag JAILS2LAN
pass out on $intif from $vpnet tagged ANY2LAN tag VPN2LAN
pass out on $intif all tagged ANY2LAN tag ME2LAN
block out log quick on $intif all tagged ANY2LAN
## VPN
### OUT
pass out on $vpnif all tag ANY2VPN
pass out on $vpnif from $vpnet tagged ANY2VPN tag VPN2VPN
pass out on $vpnif from $janet to <vpnusers> tagged ANY2VPN tag JAILS2VPN
pass out on $vpnif from $intnet to <vpnusers> tagged ANY2VPN tag LAN2VPN
pass out on $vpnif all tagged ANY2VPN tag ME2VPN
block out log quick on $vpnif all tagged ANY2VPN
# CETKA
## SELF
### OUT
pass out on $extif all tag ME2ANY
pass out on $intif from <me> to $intnet tagged ME2ANY tag ME2LAN
pass out on $jailsif0 from <me> to $janet tagged ME2ANY tag ME2JAILS
pass out on $vpnif from <me> to $vpnet tagged ME2ANY tag ME2VPN
pass out on $extif all tagged ME2ANY tag ME2INET
block out log quick on $extif all tagged ME2ANY
#ENFORCE POLICY
## LEGACY
pass out log quick on $ifaces all tagged TRACE
pass out log quick on $ifaces all tagged ICMP
## NAT
pass out quick on $extif all tagged LAN2INET_NAT
pass out quick on $extif all tagged JAILS2INET_NAT
## CETKA
pass out quick on $extif all tagged ME2INET
pass in quick on $extif all tagged INET2ME
# IN
## JAILS
pass in log quick on $jailsif0 all tagged JAILS2JAILS
pass in log quick on $jailsif0 all tagged JAILS2LAN
pass in log quick on $jailsif0 all tagged JAILS2VPN
pass in log quick on $jailsif0 all tagged JAILS2ME
## VPN
pass in quick on $vpnif all tagged VPN2VPN
pass in quick on $vpnif all tagged VPN2JAILS
pass in quick on $vpnif all tagged VPN2LAN
pass in quick on $vpnif all tagged VPN2ME
## LAN
pass in quick on $intif all tagged LAN2LAN
pass in quick on $intif all tagged LAN2JAILS
pass in quick on $intif all tagged LAN2VPN
pass in quick on $intif all tagged LAN2ME
# OUT
## JAILS
pass out log quick on $jailsif0 all tagged LAN2JAILS
pass out log quick on $jailsif0 all tagged VPN2JAILS
pass out log quick on $jailsif0 all tagged JAILS2JAILS
pass out log quick on $jailsif0 all tagged ME2JAILS
## VPN
pass out quick on $vpnif all tagged VPN2LAN
pass out quick on $vpnif all tagged VPN2JAILS
pass out quick on $vpnif all tagged VPN2VPN
pass out quick on $vpnif all tagged ME2VPN
## LAN
pass out quick on $intif all tagged JAILS2LAN
pass out quick on $intif all tagged VPN2LAN
pass out quick on $intif all tagged LAN2LAN
pass out quick on $intif all tagged ME2LAN
- hishnik
- рядовой
- Сообщения: 36
- Зарегистрирован: 2009-02-28 4:25:45
Re: PF policy-base routing и localhost
Нда, я и забыл что регался тут уже %(
Это мой месседж, если Чо.
Это мой месседж, если Чо.
- hishnik
- рядовой
- Сообщения: 36
- Зарегистрирован: 2009-02-28 4:25:45
- hishnik
- рядовой
- Сообщения: 36
- Зарегистрирован: 2009-02-28 4:25:45
Re: PF policy-base routing и localhost
Странно. Мне кажется эту тему стоит развивать. Ведь такой подход в разы эффективнее.
-
- проходил мимо
Re: PF policy-base routing и localhost
hishnik Я немного не до конца понял в Вашу проблему, со свою решил так:
Прописал маршрут на lo0
route add default 127.0.0.1
в /etc/pf.conf пакеты обрабатываю на выходе с lo0 при помощи правила:
pass out quick on lo0 route-to ng0 from self to !<EXCLUD> для <EXCLUD> сетей у меня шлюз иной, остальное все на ng0 (основной шлюз в интернет)
далее с помощью tcpdump на интерфейсе ng0 уже видно, что пакеты с ng0 выпускаются!! Но для локальной машины они идут без преобразования адресов, для решения этой проблемы использую такое правило:
nat on lo0 from self to !<EXCLUD> -> (ng0)
т.е. для пакетов исходящих с lo0, назначаю адрес ng0 и выпускаю через него же.
Вообщем я не знаю на сколько это все корректно, но все работает стабильно, хотя возможно есть и другие способы решения проблемы.
Прописал маршрут на lo0
route add default 127.0.0.1
в /etc/pf.conf пакеты обрабатываю на выходе с lo0 при помощи правила:
pass out quick on lo0 route-to ng0 from self to !<EXCLUD> для <EXCLUD> сетей у меня шлюз иной, остальное все на ng0 (основной шлюз в интернет)
далее с помощью tcpdump на интерфейсе ng0 уже видно, что пакеты с ng0 выпускаются!! Но для локальной машины они идут без преобразования адресов, для решения этой проблемы использую такое правило:
nat on lo0 from self to !<EXCLUD> -> (ng0)
т.е. для пакетов исходящих с lo0, назначаю адрес ng0 и выпускаю через него же.
Вообщем я не знаю на сколько это все корректно, но все работает стабильно, хотя возможно есть и другие способы решения проблемы.
-
- рядовой
- Сообщения: 29
- Зарегистрирован: 2010-02-13 15:20:16
Re: PF policy-base routing и localhost
hishnik Я немного не до конца понял Вашу проблему, свою решил так:
Прописал маршрут на lo0
route add default 127.0.0.1
в /etc/pf.conf пакеты обрабатываю на выходе с lo0 при помощи правила:
pass out quick on lo0 route-to ng0 from self to !<EXCLUD> для <EXCLUD> сетей у меня шлюз иной, остальное все на ng0 (основной шлюз в интернет)
далее с помощью tcpdump на интерфейсе ng0 уже видно, что пакеты с ng0 выпускаются!! Но для локальной машины они идут без преобразования адресов, для решения этой проблемы использую такое правило:
nat on lo0 from self to !<EXCLUD> -> (ng0)
т.е. для пакетов исходящих с lo0, назначаю адрес ng0 и выпускаю через него же.
Вообщем я не знаю на сколько это все корректно, но все работает стабильно, хотя возможно есть и другие способы решения проблемы.
P.S. блин удалите предыдущее сообщение, не под своим ником отправил.
Прописал маршрут на lo0
route add default 127.0.0.1
в /etc/pf.conf пакеты обрабатываю на выходе с lo0 при помощи правила:
pass out quick on lo0 route-to ng0 from self to !<EXCLUD> для <EXCLUD> сетей у меня шлюз иной, остальное все на ng0 (основной шлюз в интернет)
далее с помощью tcpdump на интерфейсе ng0 уже видно, что пакеты с ng0 выпускаются!! Но для локальной машины они идут без преобразования адресов, для решения этой проблемы использую такое правило:
nat on lo0 from self to !<EXCLUD> -> (ng0)
т.е. для пакетов исходящих с lo0, назначаю адрес ng0 и выпускаю через него же.
Вообщем я не знаю на сколько это все корректно, но все работает стабильно, хотя возможно есть и другие способы решения проблемы.
P.S. блин удалите предыдущее сообщение, не под своим ником отправил.
- hishnik
- рядовой
- Сообщения: 36
- Зарегистрирован: 2009-02-28 4:25:45
Re: PF policy-base routing и localhost
Согласен - всё дело в маршруте.
Сам с этим столкнулся, только выделенный интерфейс завёл (lo1) и на нем адрес а-ля 192.168.1.1/24 и алиасы джейлов (/32).
Дальше джейлы натятся в Инет или маршрутизируются во внутреннюю сеть. К великому сожалению версия PF во ФРЕ - старая, там нету match - правил. С ними можно было бы вообще простую политику забацать. Да ещё в версии 8.2 Фряхи я так и не вник почему он не всегда делает NAT с тегированными пакетами. Насколько я понял - это из-за того что последовательность появления пакетов на loopback интерфейсе - обратна по отношению к обычной сетевой карте (out/in против in/out), а NAT происходит именно на in очереди. Тут надо либо Опёнок ставить и пользовать современные фичи, либо вот-такими хаками делать как положенно. %(
Сам с этим столкнулся, только выделенный интерфейс завёл (lo1) и на нем адрес а-ля 192.168.1.1/24 и алиасы джейлов (/32).
Дальше джейлы натятся в Инет или маршрутизируются во внутреннюю сеть. К великому сожалению версия PF во ФРЕ - старая, там нету match - правил. С ними можно было бы вообще простую политику забацать. Да ещё в версии 8.2 Фряхи я так и не вник почему он не всегда делает NAT с тегированными пакетами. Насколько я понял - это из-за того что последовательность появления пакетов на loopback интерфейсе - обратна по отношению к обычной сетевой карте (out/in против in/out), а NAT происходит именно на in очереди. Тут надо либо Опёнок ставить и пользовать современные фичи, либо вот-такими хаками делать как положенно. %(