pf.conf
ext_if = "rl1" ## внешний интерфейс на шлюзе
ext_ip_SERV1 = "87.87.87.87/30" ## внешний IP SERV1
lannet = "10.0.0.0/24"
SERV1 = "10.0.1.7/24"
icmp_types="{ echoreq, unreach}"nat on $ext_if from $lannet to any -> $ext_ip
rdr on $ext_if proto {tcp, upd} from any to $ext_ip_SERV1 port 7777 -> $SERV1 port 7777pass in quick on $int_if all
pass out quick on $int_if allpass in on $ext_if proto { tcp, udp } from any to $SERV1 port 7777
pass out quick on $ext_if allpass inet proto icmp all icmp-type $icmp_types
При проверке файла pf.conf выдаются синтаксические ошибки на строках:
pass in on $ext_if proto { tcp, udp } from any to $SERV1 port 7777
pass inet proto icmp all icmp-type $icmp_typesПодскажите, что не так в этих строках?
Да у вас хрен победишь, что написано..
Если так обстоит в действительности, то не мудрено.> SERV1 = "10.0.1.7/24"
Это что за хня? Может всё-таки SERV1 = "10.0.1.7/32" ?
> nat on $ext_if from $lannet to any -> $ext_ip
А это что? Очередная хня?
Может правильно nat on $ext_if from $lannet to any -> $ext_ip_SERV1 ?> rdr on $ext_if proto {tcp, upd} from any to $ext_ip_SERV1 port 7777 -> $SERV1 port 7777
И опять хня! Порт upd не существует.
rdr on $ext_if proto {tcp, udp} from any to $ext_ip_SERV1 port 7777 -> $SERV1 port 7777> pass in quick on $int_if all
И ещё хня! А где объявленный макрос int_if ?
>[оверквотинг удален]
> Это что за хня? Может всё-таки SERV1 = "10.0.1.7/32" ?
>> nat on $ext_if from $lannet to any -> $ext_ip
> А это что? Очередная хня?
> Может правильно nat on $ext_if from $lannet to any -> $ext_ip_SERV1 ?
>> rdr on $ext_if proto {tcp, upd} from any to $ext_ip_SERV1 port 7777 -> $SERV1 port 7777
> И опять хня! Порт upd не существует.
> rdr on $ext_if proto {tcp, udp} from any to $ext_ip_SERV1 port 7777
> -> $SERV1 port 7777
>> pass in quick on $int_if all
> И ещё хня! А где объявленный макрос int_if ?Здесь приведен отрывок из файла:
ext_if = "rl1" ## внешний интерфейс на шлюзе
int_if = "rl0" ## внутренний интерфейс на шлюзе
ext_ip = "87.87.87.86/30" ## внешний IP шлюза
ext_ip_SERV1 = "87.87.87.87/30" ## внешний IP SERV1 (создан алиас)
lannet = "10.0.0.0/24"
SERV1 = "10.0.1.7/24"
icmp_types="{ echoreq, unreach}"rdr on $ext_if proto {tcp, udp} from any to $ext_ip_SERV1 port 7777 -> $SERV1 port 7777
nat on $ext_if from $CUS to any -> $ext_ip_CUSpass in quick on $int_if all
pass out quick on $int_if allpass in on $ext_if proto { tcp, udp } from any to $SERV1 port 7777
pass out quick on $ext_if allpass inet proto icmp all icmp-type $icmp_types
Ругается на строки:
pass in on $ext_if proto { tcp, udp } from any to $SERV1 port 7777 ## нужно разрешить проброс порта на SERV1
pass inet proto icmp all icmp-type $icmp_types ## нужно разрешить пинговать шлюз снаружи и внутриДелаю по этой ссылке http://www.opennet.me/base/net/freebsd_gw3.txt.html
> lannet = "10.0.0.0/24"
> SERV1 = "10.0.1.7/24"
> rdr on $ext_if proto {tcp, udp} from any to $ext_ip_SERV1 port 7777 -> $SERV1 port 7777
> pass in on $ext_if proto { tcp, udp } from any to $SERV1 port 7777Вы меня слышите, вообще?
Эти строки, указанные вами выше, несовместимы между собой и абсурдны.Если у вас lannet - нулевая сеть с маской /24 (10.0.0.0/24), то почему же вы указываете SERV1 сетью (!) с маской /24 ?!
Причём сеть не нулевая, а первая!(10.0.1.7/24)
Логичнее предположить, что редирект делается на отдельный хост с маской /32(а не на сеть! с маской /24) 10.0.0.7/32.
Или, если уж 10.0.1.7/32, то и маска у lannet должна быть хотя бы /16, а то и вовсе /8Строка pass in on $ext_if proto { tcp, udp } from any to $SERV1 port 7777 и вовсе не нужна (да и составлена она неправильно, см.далее),
поскольку на фильтр пакеты попадают после трансляции.
А у вас указано на внутреннем интерфейсе разрешено всё и для всех.
pass in quick on $int_if all
pass out quick on $int_if all
>[оверквотинг удален]
> на сеть! с маской /24) 10.0.0.7/32.
> Или, если уж 10.0.1.7/32, то и маска у lannet должна быть хотя
> бы /16, а то и вовсе /8
> Строка pass in on $ext_if proto { tcp, udp } from any
> to $SERV1 port 7777 и вовсе не нужна (да и составлена
> она неправильно, см.далее),
> поскольку на фильтр пакеты попадают после трансляции.
> А у вас указано на внутреннем интерфейсе разрешено всё и для всех.
> pass in quick on $int_if all
> pass out quick on $int_if allЕсть еще и другие подсети (10.0.0.0) и другие. Их тоже нужно натить. Вот так будет правильно:?
pf.conf
# Interfaces
int_if = "rlo"
ext_if = "rl1"# IP Address
lannet = "10.0.0.0/16"
ext_ip = "87.87.87.86/30"
ext_ip_SERV1 = "87.87.87.87/32"
SERV1 = "10.0.1.7/32"# Ports
icmp_types="{ echoreq, unreach}"# NAT для сети 10.0.0.0
nat on $ext_if from $lannet to any -> $ext_ip# NAT для SERV1
nat on $ext_if from $SERV1 to any -> $ext_ip_SERV1# Пробрасываем порты на SERV1
rdr on $ext_if proto {tcp, udp} from any to $ext_ip_SERV1 port 7777 -> $SERV1 port 7777# Блокируем всё
block log all#Разрешаем доступ из интернета к SERV1
pass in on $ext_if inet proto { tcp,udp } from any to any port $SERV1 flags S/SA keep state# Выпускаем SERV1
pass in on $int_if proto {tcp, udp} from $SERV1 to any port 7777#Разрешить все исходящие на внешнем интерфейсе
pass out on $ext_if keep state#Разрешить все исходящие на внутр. интерфейсе
pass out on $int_if keep state
>[оверквотинг удален]
> lannet = "10.0.0.0/16"
> ext_ip = "87.87.87.86/30"
> ext_ip_SERV1 = "87.87.87.87/32"
> SERV1 = "10.0.1.7/32"
> # Ports
> icmp_types="{ echoreq, unreach}"
> # NAT для сети 10.0.0.0
> nat on $ext_if from $lannet to any -> $ext_ip
> # NAT для SERV1
> nat on $ext_if from $SERV1 to any -> $ext_ip_SERV1$lannet перекрывает $SERV1 поэтому это правило лучше поднять над # NAT для сети 10.0.0.0
> # Пробрасываем порты на SERV1
> rdr on $ext_if proto {tcp, udp} from any to $ext_ip_SERV1 port 7777
> -> $SERV1 port 7777
> # Блокируем всё
> block log all
> #Разрешаем доступ из интернета к SERV1
> pass in on $ext_if inet proto { tcp,udp } from any to
> any port $SERV1 flags S/SA keep stateport $SERV1 - нет
> # Выпускаем SERV1
> pass in on $int_if proto {tcp, udp} from $SERV1 to any port
> 7777тут порт наверно не на месте
> #Разрешить все исходящие на внешнем интерфейсе
> pass out on $ext_if keep state
> #Разрешить все исходящие на внутр. интерфейсе
> pass out on $int_if keep stateесли фря не старая , то keep state сама будет добавлять
Тут коллега подсказал по поводу перекрытия диапазона IP-адресов.
Можно ещё дополнительно подстраховаться так:
no nat on $ext_if from $SERV1 to anyЭту строку, попробовать добавить перед строкой
# NAT для сети 10.0.0.0ну чтобы вышло типа
# NAT для SERV1
nat on $ext_if from $SERV1 to any -> $ext_ip_SERV1
no nat on $ext_if from $SERV1 to any
# NAT для сети 10.0.0.0
nat on $ext_if from $lannet to any -> $ext_ipХотя, может это и лишнее, может совсем, напрочь сделать исключение из ната,
это надо проверять, если что, я не пробовал. ))Вот почитайте тут => http://www.g0l.ru/blog/htmls/BSDA-course/apcs02.html
и тут => http://www.openbsd.org/faq/pf/ru/index.html
в частности это => http://www.openbsd.org/faq/pf/ru/rdr.html#filter
Немного разобрался.
Только не могу разрешить icmp на внешнем интерфейсе
# Ports
icmp_types="{ echoreq, unreach}"pass inet proto icmp all icmp-type $icmp_types
Выдается ошибка синтаксиса. Подскажите как прописать icmp?
> Немного разобрался.
> Только не могу разрешить icmp на внешнем интерфейсе
> # Ports
> icmp_types= "{ echoreq, unreach }"
> pass inet proto icmp all icmp-type $icmp_types
> Выдается ошибка синтаксиса. Подскажите как прописать icmp?PS. Разобрался ошибкой: строка такая и должна быть.
pass inet proto icmp all icmp-type $icmp_types
Подскажите, пожалуйста, правильно ли я предоставил доступ из других подсетей к внешнему адресу сервера:
# Interfaces
int_if = "rlo"
ext_if = "rl1"# IP Address
lannet = "10.0.0.0/16"
ext_ip = "87.87.87.86/30"
ext_ip_SERV1 = "87.87.87.87/32"
SERV1 = "10.0.1.7/32"
vlan22 = "vlan22"# Ports
icmp_types="{ echoreq, unreach}"
# Пробрасываем порты на SERV1
rdr on $ext_if proto {tcp, udp} from any to $ext_ip_SERV1 port 7777 -> $SERV1 port 7777
rdr on $vlan22 proto {tcp, udp} from any to $ext_ip_SERV1 port 7777 -> $SERV1 port 7777
rdr on $int_if proto {tcp, udp} from any to $ext_ip_SERV1 port 7777 -> $SERV1 port 7777# NAT для SERV1
nat on $ext_if from $SERV1 to any -> $ext_ip_SERV1
nat on $vlan22 from $SERV1 to any -> $ext_ip_SERV1
nat on $int_if from $SERV1 to any -> $ext_ip_SERV1# NAT для сети 10.0.0.0/16
nat on $ext_if from $lannet to any -> $ext_ip
> Подскажите, пожалуйста, правильно ли я предоставил доступ из других подсетей к внешнему
> адресу сервера:вообще то вы не предоставили доступ к внешнему адресу
>[оверквотинг удален]
> vlan22 = "vlan22"
> # Ports
> icmp_types="{ echoreq, unreach}"
> # Пробрасываем порты на SERV1
> rdr on $ext_if proto {tcp, udp} from any to $ext_ip_SERV1 port 7777
> -> $SERV1 port 7777
> rdr on $vlan22 proto {tcp, udp} from any to $ext_ip_SERV1 port 7777
> -> $SERV1 port 7777
> rdr on $int_if proto {tcp, udp} from any to $ext_ip_SERV1 port 7777
> -> $SERV1 port 7777тут вы сделали проброс на 10.0.1.7 тех кто обратился на 87.87.87.86
> # NAT для SERV1
> nat on $ext_if from $SERV1 to any -> $ext_ip_SERV1тут нат для $SERV1, когда он сам инициирует соединение в инет, а не ответы для обратившихся к нему
ниже 2 правила не красивые и в таком виде делаются при весьма специфичных условиях, если хотите натить тут, то ставте адреса от соответствующих интерфейсов, а лучше настройте маршрутизацию
> nat on $vlan22 from $SERV1 to any -> $ext_ip_SERV1
> nat on $int_if from $SERV1 to any -> $ext_ip_SERV1
> # NAT для сети 10.0.0.0/16
> nat on $ext_if from $lannet to any -> $ext_ipтут нат для идущих в инет
как я понял, вместо
> nat on $vlan22 from $SERV1 to any -> $ext_ip_SERV1
> nat on $int_if from $SERV1 to any -> $ext_ip_SERV1нужно написать так:
nat on $int_if from $int_if to $SERV1 port 7777-> $int_if
nat on $vlan22 from $vlan21 to $SERV1 port 7777 -> $vlan22
> как я понял, вместо
>> nat on $vlan22 from $SERV1 to any -> $ext_ip_SERV1
>> nat on $int_if from $SERV1 to any -> $ext_ip_SERV1
> нужно написать так:
> nat on $int_if from $int_if to $SERV1 port 7777-> $int_if
> nat on $vlan22 from $vlan21 to $SERV1 port 7777 -> $vlan22нет, нат делаете на интерфейсе смотрящем на $SERV1 и подставляете ip этого интерфейса
>> как я понял, вместо
>>> nat on $vlan22 from $SERV1 to any -> $ext_ip_SERV1
>>> nat on $int_if from $SERV1 to any -> $ext_ip_SERV1
>> нужно написать так:
>> nat on $int_if from $int_if to $SERV1 port 7777-> $int_if
>> nat on $vlan22 from $vlan22 to $SERV1 port 7777 -> $vlan22
> нет, нат делаете на интерфейсе смотрящем на $SERV1 и подставляете ip этого
> интерфейсаЯ пытаюсь делать по примеру:
Комбинация RDR и NAT:
С дополнительным правилом NAT на внутреннем интерфейсе может быть решена проблема недостающей переадресации.rdr on $int_if proto tcp from $int_net to $ext_if port 80 -> $server
no nat on $int_if proto tcp from $int_if to $int_net
nat on $int_if proto tcp from $int_net to $server port 80 -> $int_ifЭто заставит начальный пакет от клиента быть оттранслированным снова, когда он пройдет назад через внутренний интерфейс, заменяя исходный адрес клиента на внутренний адрес системы сетевой защиты. Внутренний сервер ответит системе сетевой защиты, которая может полностью изменить и NAT и RDR трансляции при отправке пакета локальному клиенту.
Мы собственно нужно, чтобы с vlan22 был доступ к внешнему адресу $ext_ip_SERV1
# Проброс порта с vlan22 на внешний IP SERV1
rdr on $vlan22 proto {tcp, udp} from any to $ext_ip_SERV1 port 7777 -> $SERV1 port 7777
# Затем нужно сделать обрато:
nat on $vlan22 from $vlan21 to $SERV1 port 7777 -> $vlan22Если не сложно напишите, пожалуйста, строку ната с vlan22
>[оверквотинг удален]
> назад через внутренний интерфейс, заменяя исходный адрес клиента на внутренний адрес
> системы сетевой защиты. Внутренний сервер ответит системе сетевой защиты, которая может
> полностью изменить и NAT и RDR трансляции при отправке пакета локальному
> клиенту.
> Мы собственно нужно, чтобы с vlan22 был доступ к внешнему адресу $ext_ip_SERV1
> # Проброс порта с vlan22 на внешний IP SERV1
> rdr on $vlan22 proto {tcp, udp} from any to $ext_ip_SERV1 port 7777
> -> $SERV1 port 7777
> # Затем нужно сделать обрато:
> nat on $vlan22 from $vlan21 to $SERV1 port 7777 -> $vlan22from $vlan21 ? или from $vlan22
$SERV1 в $lannet ?nat on $lannet_if from $vlan22_ip/24 to $SERV1 port 7777 -> $lannet_if_ip
> Если не сложно напишите, пожалуйста, строку ната с vlan22
>[оверквотинг удален]
>> Мы собственно нужно, чтобы с vlan22 был доступ к внешнему адресу $ext_ip_SERV1
>> # Проброс порта с vlan22 на внешний IP SERV1
>> rdr on $vlan22 proto {tcp, udp} from any to $ext_ip_SERV1 port 7777
>> -> $SERV1 port 7777
>> # Затем нужно сделать обрато:
>> nat on $vlan22 from $vlan21 to $SERV1 port 7777 -> $vlan22
> from $vlan21 ? или from $vlan22
> $SERV1 в $lannet ?
> nat on $lannet_if from $vlan22_ip/24 to $SERV1 port 7777 -> $lannet_if_ip
>> Если не сложно напишите, пожалуйста, строку ната с vlan22но если vlan22 подсеть не пересекается адресами с lannet и у $SERV1 нет отдельного маршрута к vlan22 подсети не через этот шлюз, то нат вам не нужен
>[оверквотинг удален]
> системы сетевой защиты. Внутренний сервер ответит системе сетевой защиты, которая может
> полностью изменить и NAT и RDR трансляции при отправке пакета локальному
> клиенту.
> Мы собственно нужно, чтобы с vlan22 был доступ к внешнему адресу $ext_ip_SERV1
> # Проброс порта с vlan22 на внешний IP SERV1
> rdr on $vlan22 proto {tcp, udp} from any to $ext_ip_SERV1 port 7777
> -> $SERV1 port 7777
> # Затем нужно сделать обрато:
> nat on $vlan22 from $vlan21 to $SERV1 port 7777 -> $vlan22
> Если не сложно напишите, пожалуйста, строку ната с vlan22У вас в строке int_if = "rlo" интерфейс неправильно прописан.
Литера о вместо цифры 0. Будьте внимательны, а то опять ошибки будут при тестировании/запускеint_if = "rl0"
ext_if = "rl1"lannet = "10.0.0.0/16"
ext_ip = "87.87.87.86/30"
ext_ip_SERV1 = "87.87.87.87/32"
SERV1 = "10.0.1.7/32"
vlan22 = "vlan22"icmp_types="{ echoreq, unreach }"
rdr on $ext_if proto tcp from any to $ext_ip_SERV1 port 7777 -> $SERV1 port 7777
rdr on $int_if proto tcp from $vlan22 to $ext_if port 7777 -> $ext_ip_SERV1
no nat on $int_if proto tcp from $int_if to $vlan22
nat on $int_if proto tcp from $vlan22 to $ext_ip_SERV1 port 7777 -> $int_ifnat on $ext_if from $lannet to any -> $ext_ip
Попробуйте этот вариант, я не проверял.
Но что-то вы замутили нехорошее.
Лучше бы решали через создание локального DNS
"Сервер DNS можно настроить так, что он будет давать разные ответы в разные сети. Можно сделать так, чтобы локальные клиенты ходили на сервер непосредственно, без помощи шлюза. Такое решение, к тому же, снижает нагрузку на шлюз."С этими перенаправлениями/отражениями легко запутаться.
Добрый день!
В настоящее время на сервере используется ipnat и ipf.
Перекомпилировал ядро с параметрами PF.
Командой # pfctl -nf /etc/pf.conf проверил правила. Ошибок нет.
В rc.conf прописал для pf:
pf_enable=«YES»
pf_rules="/etc/pf.conf"
pf_flags=""
pflog_enable=«YES»
pflog_logfile="/var/log/pf.log"
pflog_flags=""
закоментировал строки для ipnat и ipf.
Перезагрузил шлюз с PF.
На шлюзе пропала сеть.
# ping ya.ru
cannot resolve ya.ru: Host name lookup failure.
# ping 8.8.8.8
ping: sendto: Network is unrechableВ rc.conf указаны:
defaultrouter="87.253.x.x" # шлюз провайдера
gateway_enable="YES"Подскажите, почему так произошло и как это исправить?
>[оверквотинг удален]
> Перезагрузил шлюз с PF.
> На шлюзе пропала сеть.
> # ping ya.ru
> cannot resolve ya.ru: Host name lookup failure.
> # ping 8.8.8.8
> ping: sendto: Network is unrechable
> В rc.conf указаны:
> defaultrouter="87.253.x.x" # шлюз провайдера
> gateway_enable="YES"
> Подскажите, почему так произошло и как это исправить?netstat -nr
ifconfig
pfctl -sr
О_о А как вы умудрились кавычки-ёлочки вставить?> pf_enable=«YES»
> pflog_enable=«YES»Может всё же так?
pf_enable="YES"
pflog_enable="YES"
> О_о А как вы умудрились кавычки-ёлочки вставить?
>> pf_enable=«YES»
>> pflog_enable=«YES»
> Может всё же так?
> pf_enable="YES"
> pflog_enable="YES"Это я просто вставил из блокнота. В rc.conf все правильно написано.
# ifconfig
все интерфейсы присутствуют, ИП адреса есть и статус активный# netstat -nr
Internet
Destination Gateway Flags Refs Use Netif
default 87.253.x.x UGS 6 518 fxp0
10.0.1.0/24 link#1 U 0 8 rl0
10.0.1.241 link#1 UHS 0 0 lo0
..... (здесь разные vlans)
87.87.87.87 link#2 UHS 0 8 lo0 =>
87.87.87.87/32 link#2 U 0 8 fxp0
127.0.0.1 link#5 UH 0 757 lo0# pfctl -sr
scrub in all fragment reassemble
block drop in quick on ! lo0 inet6 from ::1 to any
block drop in quick on ! lo0 inet from 127.0.0.1/8 to any
block drop in quick on ! rl0 inet6 from 10.0.1.0/24 to any
block drop in quick inet from 10.0.1.241 to any
block drop in quick on ! fxp0 inet from 87.87.87.87 to any
block drop in quick inet from 87.253.x.x/30
block return all
дальше идут разрешающие правила
pass .....
Подскажите, как запустить PF.
>[оверквотинг удален]
> any
> block drop in quick on ! lo0 inet from 127.0.0.1/8 to any
> block drop in quick on ! rl0 inet6 from 10.0.1.0/24 to any
> block drop in quick inet from 10.0.1.241 to any
> block drop in quick on ! fxp0 inet from 87.87.87.87 to any
> block drop in quick inet from 87.253.x.x/30
> block return all
> дальше идут разрешающие правила
> pass .....
> Подскажите, как запустить PF.Эх! Ну дайте вывод полный тех команд, что просили выше! Как помочь, если нужной информации нет?
> Эх! Ну дайте вывод полный тех команд, что просили выше! Как помочь,
> если нужной информации нет?Сократил пока так pf.conf
# Interfaces
int_if = "rl0"
ext_if = "fxp0"# IP Address
lan_DMZ = "10.0.1.0/24"
int_ip = "10.0.1.241/32"
ext_ip = "87.87.86.210/30"
ext_ip_SERV1 = "87.87.87.193/32"
ext_ip_GATE = "87.87.87.209/16"
SERV1 = "10.0.1.7/32"
vlan21 = "vlan21"
arenda = "{ vlan6 vlan7 vlan12 vlan20 }"# Ports
icmp_types = "{ echoreq, unreach }"# СЕКЦИЯ глобальные опции
set block-policy return
set state-policy floating
set skip on lo0
set limit { frags 100000, states 100000 }
set optimization normal# СЕКЦИЯ параметры нормализации
scrub in all# NAT & RDR
# SERV1
rdr on $ext_if proto {tcp, udp} from any to $ext_ip_SERV1 port 7777 -> $SERV1 port 7777
rdr on $vlan21 proto {tcp, udp} from any to $ext_ip_SERV1 port 7777 -> $SERV1 port 7777
rdr on $int_if proto {tcp, udp} from any to $ext_ip_SERV1 port 7777 -> $SERV1 port 7777
nat on $ext_if from $SERV1 to any -> $ext_ip_SERV1# NAT dmz, vlan's
nat on $ext_if from $lan_DMZ to any -> $ext_ip
nat on $ext_if from $arenda to any -> $ext_ip# Filter
antispoof quick for { lo0, $int_if, $ext_if }block all
pass in on $int_if all
pass out on $int_if all# Разрешаем доступ из интернета к серверам
pass in on $ext_if proto { tcp, udp } from any to $SERV1 port 7777
pass inet proto icmp all icmp-type $icmp_types keep state
pass in on $ext_if proto {tcp, udp} from any to any port 53
pass out on $ext_if allpass in on $arenda all
pass out on $arenda allpass in on $vlan21 from $ext_ip_GATE
pass out on $vlan21
# ifconfig
rl0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=8<VLAN_MTU>
ether 00:80:48:34:a1:26
inet 10.0.1.241 netmask 0xffffff00 broadcast 10.0.1.255
media: Ethernet autoselect (100baseTX <full-duplex>)
status: active
fxp0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=2009<RXCSUM,VLAN_MTU,WOL_MAGIC>
ether 00:07:e9:b6:9c:a5
inet 87.87.86.210 netmask 0xfffffffc broadcast 87.87.86.211
inet 87.87.87.193 netmask 0xffffffff broadcast 87.87.87.193
media: Ethernet 100baseTX <full-duplex>
status: active
plip0: flags=8810<POINTOPOINT,SIMPLEX,MULTICAST> metric 0 mtu 1500
pfsync0: flags=0<> metric 0 mtu 1460
syncpeer: 224.0.0.240 maxupd: 128
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
options=3<RXCSUM,TXCSUM>
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x5
inet6 ::1 prefixlen 128
inet 127.0.0.1 netmask 0xff000000
pflog0: flags=0<> metric 0 mtu 33200
vlan1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
ether 00:80:48:34:a1:26
inet 10.0.0.241 netmask 0xffffff00 broadcast 10.0.0.255
media: Ethernet autoselect (100baseTX <full-duplex>)
status: active
vlan: 1 parent interface: rl0
vlan3: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
ether 00:80:48:34:a1:26
inet 10.0.2.1 netmask 0xffffff00 broadcast 10.0.2.255
media: Ethernet autoselect (100baseTX <full-duplex>)
status: active
vlan: 3 parent interface: rl0
vlan5: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
ether 00:80:48:34:a1:26
inet 10.0.5.1 netmask 0xffffff00 broadcast 10.0.5.255
media: Ethernet autoselect (100baseTX <full-duplex>)
status: active
vlan: 5 parent interface: rl0
vlan6: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
ether 00:80:48:34:a1:26
inet 10.0.6.1 netmask 0xffffff00 broadcast 10.0.6.255
media: Ethernet autoselect (100baseTX <full-duplex>)
status: active
vlan: 6 parent interface: rl0
vlan7: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
ether 00:80:48:34:a1:26
inet 10.0.7.1 netmask 0xffffff00 broadcast 10.0.7.255
media: Ethernet autoselect (100baseTX <full-duplex>)
status: active
vlan: 7 parent interface: rl0
vlan12: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
ether 00:80:48:34:a1:26
inet 10.0.3.1 netmask 0xffffff00 broadcast 10.0.3.255
media: Ethernet autoselect (100baseTX <full-duplex>)
status: active
vlan: 12 parent interface: rl0
vlan20: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
ether 00:80:48:34:a1:26
inet 10.0.11.1 netmask 0xffffff00 broadcast 10.0.11.255
media: Ethernet autoselect (100baseTX <full-duplex>)
status: active
vlan: 20 parent interface: rl0
vlan21: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
ether 00:80:48:34:a1:26
inet 87.87.87.209 netmask 0xfffffff0 broadcast 87.87.87.223
media: Ethernet autoselect (100baseTX <full-duplex>)
status: active
vlan: 21 parent interface: rl0# netstat -nr
Routing tablesInternet:
Destination Gateway Flags Refs Use Netif Expire
default 87.87.86.209 UGS 67 502 fxp0
10.0.0.0/24 link#7 U 0 0 vlan1
10.0.0.241 link#7 UHS 0 0 lo0
10.0.1.0/24 link#1 U 0 0 rl0
10.0.1.241 link#1 UHS 0 0 lo0
10.0.2.0/24 link#8 U 0 0 vlan3
10.0.2.1 link#8 UHS 0 0 lo0
10.0.3.0/24 link#12 U 0 0 vlan12
10.0.3.1 link#12 UHS 0 0 lo0
10.0.5.0/24 link#9 U 0 0 vlan5
10.0.5.1 link#9 UHS 0 0 lo0
10.0.6.0/24 link#10 U 0 0 vlan6
10.0.6.1 link#10 UHS 0 0 lo0
10.0.7.0/24 link#11 U 0 0 vlan7
10.0.7.1 link#11 UHS 0 0 lo0
10.0.11.0/24 link#13 U 0 0 vlan20
10.0.11.1 link#13 UHS 0 0 lo0
87.87.87.87 link#2 UHS 0 0 lo0 =>
87.87.87.87/32 link#2 U 0 0 fxp0
87.87.87.208/28 link#14 U 0 84 vlan21
87.87.87.209 link#14 UHS 0 0 lo0
87.87.86.208/30 link#2 U 0 0 fxp0
87.87.86.210 link#2 UHS 0 0 lo0
127.0.0.1 link#5 UH 0 783 lo0Internet6:
Destination Gateway Flags Netif Expire
::1 ::1 UH lo0
fe80::%lo0/64 link#5 U lo0
fe80::1%lo0 link#5 UHS lo0
ff01:5::/32 fe80::1%lo0 U lo0
ff02::%lo0/32 fe80::1%lo0 U lo0Обозначения:
87.87.86.209 - шлюз провайдера
87.87.86.210 - внешний ИП моего шлюза
87.87.87.193 - внешний ИП SERV1
87.87.87.209 - мой шлюз (vlan21)# pfctl -sr
scrub in all fragment reassemble
block drop in quick on ! lo0 inet6 from ::1 to any
block drop in quick on ! lo0 inet from 127.0.0.1/8 to any
block drop in quick on ! rl0 inet6 from 10.0.1.0/24 to any
block drop in quick inet from 10.0.1.241 to any
block drop in quick on ! fxp0 inet from 87.87.87.208/30 to any
block drop in quick on ! fxp0 inet from 87.87.86.193 to any
block drop in quick inet from 87.87.86.210 to any
block drop in quick inet from 87.87.87.193 to any
block return all
pass in on rl0 all flags S/SA keep state
pass out on rl0 all flags S/SA keep state
pass in on fxp0 inet proto tcp from any to 10.0.1.7 port = 7777 flags S/SA keep state
pass inet proto icmp all icmp-type echoreq keep state
pass inet proto icmp all icmp-type unreach keep state
pass in on fxp0 inet proto tcp from any to any port = domain flags S/SA keep state
pass in on fxp0 inet proto udp from any to any port = domain keep state
pass out on fxp0 all flags S/SA keep state
pass in on vlan6 all flags S/SA keep state
pass in on vlan7 all flags S/SA keep state
pass in on vlan12 all flags S/SA keep state
pass in on vlan20 all flags S/SA keep state
pass out on vlan6 all flags S/SA keep state
pass out on vlan7 all flags S/SA keep state
pass out on vlan12 all flags S/SA keep state
pass out on vlan20 all flags S/SA keep state
pass in on vlan21 inet from 87.87.87.208/29 to any flags S/SA keep state
pass out on vlan21 all flags S/SA keep state
87.87.87.209 - мой шлюз (vlan21)
имеется ввиду для других подсетей
Подскажите, почему после запуска PF блокируется трафик как в интернет, так и в локальную сеть?
> Подскажите, почему после запуска PF блокируется трафик как в интернет, так и
> в локальную сеть?показывайте настройки сети и текущие правила после запуска PF, выше вы показываете в pf.conf одни правила , а текущие совсем другие
>> Подскажите, почему после запуска PF блокируется трафик как в интернет, так и
>> в локальную сеть?
> показывайте настройки сети и текущие правила после запуска PF, выше вы показываете
> в pf.conf одни правила , а текущие совсем другиеВот pf.conf
# Interfaces
int_if = "rl0"
ext_if = "fxp0"# IP Address
lan_DMZ = "10.0.1.0/24"
int_ip = "10.0.1.241/32"
ext_ip = "87.87.86.210/30"
ext_ip_SERV1 = "87.87.87.193/32"
ext_ip_GATE = "87.87.87.209/16"
SERV1 = "10.0.1.7/32"
vlan21 = "vlan21"
arenda = "{ vlan6 vlan7 vlan12 vlan20 }"# Ports
icmp_types = "{ echoreq, unreach }"# СЕКЦИЯ глобальные опции
set block-policy return
set state-policy floating
set skip on lo0
set limit { frags 100000, states 100000 }
set optimization normal# СЕКЦИЯ параметры нормализации
scrub in all# NAT & RDR
# SERV1
rdr on $ext_if proto {tcp, udp} from any to $ext_ip_SERV1 port 7777 -> $SERV1 port 7777
rdr on $vlan21 proto {tcp, udp} from any to $ext_ip_SERV1 port 7777 -> $SERV1 port 7777
rdr on $int_if proto {tcp, udp} from any to $ext_ip_SERV1 port 7777 -> $SERV1 port 7777
nat on $ext_if from $SERV1 to any -> $ext_ip_SERV1# NAT dmz, vlan's
nat on $ext_if from $lan_DMZ to any -> $ext_ip
nat on $ext_if from $arenda to any -> $ext_ip# Filter
antispoof quick for { lo0, $int_if, $ext_if }block all
pass in on $int_if all
pass out on $int_if all# Разрешаем доступ из интернета к серверам
pass in on $ext_if proto { tcp, udp } from any to $SERV1 port 7777
pass inet proto icmp all icmp-type $icmp_types keep state
pass in on $ext_if proto {tcp, udp} from any to any port 53
pass out on $ext_if allpass in on $arenda all
pass out on $arenda allpass in on $vlan21 from $ext_ip_GATE
pass out on $vlan21
# pfctl -sr
scrub in all fragment reassemble
block drop in quick on ! lo0 inet6 from ::1 to any
block drop in quick on ! lo0 inet from 127.0.0.1/8 to any
block drop in quick on ! rl0 inet6 from 10.0.1.0/24 to any
block drop in quick inet from 10.0.1.241 to any
block drop in quick on ! fxp0 inet from 87.87.87.208/30 to any
block drop in quick on ! fxp0 inet from 87.87.86.193 to any
block drop in quick inet from 87.87.86.210 to any
block drop in quick inet from 87.87.87.193 to any
block return all
pass in on rl0 all flags S/SA keep state
pass out on rl0 all flags S/SA keep state
pass in on fxp0 inet proto tcp from any to 10.0.1.7 port = 7777 flags S/SA keep state
pass inet proto icmp all icmp-type echoreq keep state
pass inet proto icmp all icmp-type unreach keep state
pass in on fxp0 inet proto tcp from any to any port = domain flags S/SA keep state
pass in on fxp0 inet proto udp from any to any port = domain keep state
pass out on fxp0 all flags S/SA keep state
pass in on vlan6 all flags S/SA keep state
pass in on vlan7 all flags S/SA keep state
pass in on vlan12 all flags S/SA keep state
pass in on vlan20 all flags S/SA keep state
pass out on vlan6 all flags S/SA keep state
pass out on vlan7 all flags S/SA keep state
pass out on vlan12 all flags S/SA keep state
pass out on vlan20 all flags S/SA keep state
pass in on vlan21 inet from 87.87.87.208/29 to any flags S/SA keep state
pass out on vlan21 all flags S/SA keep stateвот так. Пробовал убирать block all, но ситуация не изменилась.
>>> Подскажите, почему после запуска PF блокируется трафик как в интернет, так и
>>> в локальную сеть?
>> показывайте настройки сети и текущие правила после запуска PF, выше вы показываете
>> в pf.conf одни правила , а текущие совсем другиевы хотите сказать что из этого pf.conf получили правила которые показали по pfctl -sr ниже?
> Вот pf.conf
> # Interfaces
> int_if = "rl0"
> ext_if = "fxp0"
> # IP Address
> lan_DMZ = "10.0.1.0/24"
> int_ip = "10.0.1.241/32"
> ext_ip = "87.87.86.210/30"ext_ip = "87.87.86.210"
>[оверквотинг удален]
> scrub in all fragment reassemble
> block drop in quick on ! lo0 inet6 from ::1 to
> any
> block drop in quick on ! lo0 inet from 127.0.0.1/8 to any
> block drop in quick on ! rl0 inet6 from 10.0.1.0/24 to any
> block drop in quick inet from 10.0.1.241 to any
> block drop in quick on ! fxp0 inet from 87.87.87.208/30 to any
> block drop in quick on ! fxp0 inet from 87.87.86.193 to any
> block drop in quick inet from 87.87.86.210 to any
> block drop in quick inet from 87.87.87.193 to anyоткуда эти все block drop in quick * ?
>[оверквотинг удален]
> pass in on vlan6 all flags S/SA keep state
> pass in on vlan7 all flags S/SA keep state
> pass in on vlan12 all flags S/SA keep state
> pass in on vlan20 all flags S/SA keep state
> pass out on vlan6 all flags S/SA keep state
> pass out on vlan7 all flags S/SA keep state
> pass out on vlan12 all flags S/SA keep state
> pass out on vlan20 all flags S/SA keep state
> pass in on vlan21 inet from 87.87.87.208/29 to any flags S/SA keep
> stateext_ip_GATE = "87.87.87.209/16" а у вас from 87.87.87.208/29
> pass out on vlan21 all flags S/SA keep state
> вот так. Пробовал убирать block all, но ситуация не изменилась.
>>>> Подскажите, почему после запуска PF блокируется трафик как в интернет, так и
>>>> в локальную сеть?
>>> показывайте настройки сети и текущие правила после запуска PF, выше вы показываете
>>> в pf.conf одни правила , а текущие совсем другие
> вы хотите сказать что из этого pf.conf получили правила которые показали по
> pfctl -sr ниже?Да. Я сам не понимаю откуда берутся block
Даже если написать вместо block all -> pass all
и перезапустить #pfctl -F all -f /etc/pf.conf то все равно все блокируется.>ext_ip = "87.87.86.210"
написал так
ext_ip_GATE = "87.87.87.209/16" а у вас from 87.87.87.208/29
на это пока можно не обращать вниманиеМне главное пока, чтобы шли пинги в инет и в DMZ.
>[оверквотинг удален]
>> вы хотите сказать что из этого pf.conf получили правила которые показали по
>> pfctl -sr ниже?
> Да. Я сам не понимаю откуда берутся block
> Даже если написать вместо block all -> pass all
> и перезапустить #pfctl -F all -f /etc/pf.conf то все равно все блокируется.
>>ext_ip = "87.87.86.210"
> написал так
> ext_ip_GATE = "87.87.87.209/16" а у вас from 87.87.87.208/29
> на это пока можно не обращать внимание
> Мне главное пока, чтобы шли пинги в инет и в DMZ.значит стирайте абсолютно все из pf.conf включая set *, antispoof - все стираете.
пишите правило nat для локалки и pass all и проверяете что это заработало, потом добавляете ОДНО правило проброса и заставляете проброс заработать, потом добавляете еще одно правило в pf.conf и проверяете , что оно отрабатывает и т.д.
>[оверквотинг удален]
>> написал так
>> ext_ip_GATE = "87.87.87.209/16" а у вас from 87.87.87.208/29
>> на это пока можно не обращать внимание
>> Мне главное пока, чтобы шли пинги в инет и в DMZ.
> значит стирайте абсолютно все из pf.conf включая set *, antispoof - все
> стираете.
> пишите правило nat для локалки и pass all и проверяете что это
> заработало, потом добавляете ОДНО правило проброса и заставляете проброс заработать, потом
> добавляете еще одно правило в pf.conf и проверяете , что оно
> отрабатывает и т.д.pf.conf
# Interfaces
int_if = "rl0"
ext_if = "fxp0"# IP Address
lan_DMZ = "10.0.1.0/24"
int_ip = "10.0.1.241/32"
ext_ip = "87.87.86.210"nat on $ext_if from $lan_DMZ to any -> $ext_ip
pass all#pfctl -sr
pass all flags S/SA keep stateНо пинги опять никуда не идут.
>[оверквотинг удален]
> ext_if = "fxp0"
> # IP Address
> lan_DMZ = "10.0.1.0/24"
> int_ip = "10.0.1.241/32"
> ext_ip = "87.87.86.210"
> nat on $ext_if from $lan_DMZ to any -> $ext_ip
> pass all
> #pfctl -sr
> pass all flags S/SA keep state
> Но пинги опять никуда не идут.чудеса
запускаете пинг из 10.0.1.0/24 и снимаете дамп tcpdump -n -i rl0 и tcpdump -n -i fxp0 , потом pfctl -vsa
Я сделал новый сервер в качестве шлюза.
PF в минимальной конфигурации запустился.# Interfaces
int_if = "rl0"
ext_if = "fxp0"# IP
ext_ip_SERV1 = "87.87.87.193/32"
SERV1 = "10.0.1.7/32"
serv1_ports = "{ 1122, 1133 }"# NAT RDR
rdr on $ext_if proto udp from any to $ext_ip_SERV1 port $serv1_ports -> $SERV1 port $serv1_ports
nat on $ext_if from $SERV1 to any -> $ext_ip_SERV1Подскажите, возможно ли использовать такую конструкцию для проброса портов?
> rdr on $ext_if proto udp from any to $ext_ip_SERV1 port $serv1_ports ->$SERV1 port $serv1_portsЛучше будет разложить это правило на два явных:
rdr on $ext_if proto udp from any to $ext_ip_SERV1 port 1122 ->$SERV1 port 1122
rdr on $ext_if proto udp from any to $ext_ip_SERV1 port 1133 ->$SERV1 port 1133Вместо $ext_ip_SERV1 можно просто вписать $ext_if если у вас адрес на этом интерфейсе равен $ext_ip_SERV1.
Спасибо.
Еще один вопрос.
Созданы vlan на внутреннем интерфейсе в rc.conf
cloned_interfaces="vlan1 vlan3 vlan5 vlan12 vlan13 vlan20 vlan21"ifconfig_vlan3="inet 10.0.2.1 netmask 255.255.255.0 vlan 3 vlandev rl0"
нужно натить этот vlan в инет. В PF прописано:
# Interfaces
int_if = "rl0"
ext_if = "fxp0"# IP Address
lan_DMZ = "10.0.1.0/24"
int_ip = "10.0.1.241/32"
ext_ip = "87.87.86.210/32"
vlan3 = "vlan3"block all
nat on $ext_if from $lan_DMZ to any -> $ext_ip
nat on $ext_if from $vlan3 to any -> $ext_ippass in quick on $vlan3 all
pass out quick on $vlan3 allpass in on $int_if all
pass out on $int_if allpass inet proto icmp all icmp-type $icmp_types keep state
pass in on $ext_if proto {tcp, udp} from any to any port 53
pass out on $ext_if allИнета нет в этом vlan. Свой шлюз 10.0.2.1 пингуется.
ping ya.ru - ИП адрес ya.ru определяет, но пинг не идет:
Заданный узел недоступен.
Подскажите, пожалуйста, что не так?
> block allА если вместо block all временно поставить pass all то работает?
Вроде block all тоже создает стейтсы, поэтому если вы напишете какое-то разрешающее правило и просто перезагрузите правила командой pfctl -f conf - то пакеты скорей всего будут все равно блокироватся по таблице стейтсов, поэтому надо обновленные правила загружать одновременно с очисткой стейтсов, либо писать block all no state.