Проброс портов - PF

Настройка сетевых служб, маршрутизации, фаерволлов. Проблемы с сетевым оборудованием.
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Pernat1y
рядовой
Сообщения: 16
Зарегистрирован: 2012-10-12 10:12:45

Проброс портов - PF

Непрочитанное сообщение Pernat1y » 2012-10-12 11:10:30

Здравствуйте :roll:

Заранее извиняюсь, если тема боян (а она боян), но гугление и manual'ная терапия не помогли.

Нужна помощь в пробросе портов PF'ом на FreeBSD 9
/etc/rc.conf

Код: Выделить всё

#network
hostname="gw"
ifconfig_em0="inet 192.168.1.2 netmask 255.255.255.0" # LAN
ifconfig_em1="DHCP" # WAN1
ifconfig_em2="DHCP ether 11:22:33:44:55:66" # WAN2

#pf
pf_enable="YES"
pf_rules="/etc/pf.conf"
pflog_enable="NO"
pflog_logfile="/var/log/pflog"

#services
sshd_enable="YES"
named_enable="YES"
gateway_enable="YES"
isc-dhcpd_enable="YES"

#no dumps for you
dumpdev="NO"
/etc/pf.conf

Код: Выделить всё

##########INTERFACES##########
#lan
lan_if="em0"

#ISP1
wan1_if="em1"

#ISP2
wan2_if="em2"

#lan network
lan_net="192.168.1.0/24"

##########NAT##########
#NAT all traffic to local subnet
nat on $wan1_if from $lan_net to any -> ($wan1_if)
nat on $wan2_if from $lan_net to any -> ($wan2_if)

#nat rules goes here V

#allow all traffic from local subnet
pass on $lan_if all

#allow outgoing traffic on wan interfaces
pass out on $wan1_if proto tcp all modulate state flags S/SA
pass out on $wan1_if proto { udp, icmp } all keep state
pass out on $wan2_if proto tcp all modulate state flags S/SA
pass out on $wan2_if proto { udp, icmp } all keep state
Пробовал правила, типа такого:
rdr on $wan1_if proto tcp from any to any port 8888 -> 192.168.1.10 port 8888
, такого:
rdr proto tcp from any to any port 8888 -> 192.168.1.10 port 8888
и прочие
pass in on $wan1_if proto tcp from any to any port 8888 rdr-to 192.168.1.10 port 8888
- редирект не работает :(

PS. Остальные фичи, типа шлюза/dhcp/dns работают. Пинги между хостами (в данном случае 192.168.1.2 и 192.168.1.10) ходят.

В процессе настройки был сломан мозг и несколько виртуалок - не помогло. Что я делаю не так?

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.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/

mak_v_
проходил мимо

Re: Проброс портов - PF

Непрочитанное сообщение mak_v_ » 2012-10-12 11:33:52

Код: Выделить всё

rdr on $wan1_if proto tcp from any to $wan1_if  8888 -> 192.168.1.10 port 8888
pass in on $wan_if proto tcp from any to {self, 192.168.1.10} port 8888 flags S/SA keep state

Pernat1y
рядовой
Сообщения: 16
Зарегистрирован: 2012-10-12 10:12:45

Re: Проброс портов - PF

Непрочитанное сообщение Pernat1y » 2012-10-12 12:16:43

mak_v_ писал(а):

Код: Выделить всё

rdr on $wan1_if proto tcp from any to $wan1_if  8888 -> 192.168.1.10 port 8888
pass in on $wan_if proto tcp from any to {self, 192.168.1.10} port 8888 flags S/SA keep state
Попробовал форвардить http, и слегка подправил, а-то PF на синтаксис ругался:
rdr on $wan1_if proto tcp from any to $wan1_if port 80 -> 192.168.1.20 port 80
pass in on $wan1_if proto tcp from any to {self, 192.168.1.20} port 80 flags S/SA keep state
Всё-равно не пашет :(

PS. Подключения на удаленные хост проходит, но на локальные интерфэйсы коннект сразу обрывается.
gw# telnet 192.168.1.20 80 // сервак, куда пытаемся форвардить
Trying 192.168.1.20...
Connected to 192.168.1.20.
Escape character is '^]'.
^]
telnet> ^C

gw# telnet 127.0.0.1 80
Trying 127.0.0.1...
telnet: connect to address 127.0.0.1: Connection refused
telnet: Unable to connect to remote host

gw# telnet 111.111.111.111 80 // айпишник $wan1_if
Trying 111.111.111.111...
telnet: connect to address 111.111.111.111: Connection refused
telnet: Unable to connect to remote host

gw# telnet 192.168.1.2 80
Trying 192.168.1.2...
telnet: connect to address 192.168.1.2: Connection refused
telnet: Unable to connect to remote host

mak_v_
проходил мимо

Re: Проброс портов - PF

Непрочитанное сообщение mak_v_ » 2012-10-12 12:27:51

бррррр....повсплывало 111111 и ххххххх и локальные интерфейсы и порт 80 и телнет......фффффф.....опишите "что есть, что хотите, что работает и что не работает".

Pernat1y
рядовой
Сообщения: 16
Зарегистрирован: 2012-10-12 10:12:45

Re: Проброс портов - PF

Непрочитанное сообщение Pernat1y » 2012-10-12 12:40:06

Есть:
Сервер с 3-мя интерфейсами (2 внешних $wan1_if и $wan2_if, 1 - внутренний $lan_if).

Хочу:
Редиректить входящий на $wan1_if траф на определенные сервера во внутренней сети (через $lan_if, соответственно).
Т.е. $wan1_if:80 -> 192.168.1.20:80, $wan1_if:8888 -> 192.168.1.10:8888 и т.д.

Работает:
Сеть. Внешний/внутренний мир с нашего сервера видно, роль шлюза/dhcp/dns выполняет успешно

Не работает:
Собственно, форвардинг/нат

mak_v_
проходил мимо

Re: Проброс портов - PF

Непрочитанное сообщение mak_v_ » 2012-10-12 12:51:59

ага, вы хотите сказать что у вас настроен defaul_gateway через wan1, и редиректить хотите на wan1 или все же редиректить на другом интерфейсе?

Pernat1y
рядовой
Сообщения: 16
Зарегистрирован: 2012-10-12 10:12:45

Re: Проброс портов - PF

Непрочитанное сообщение Pernat1y » 2012-10-12 13:01:27

mak_v_ писал(а):ага, вы хотите сказать что у вас настроен defaul_gateway через wan1, и редиректить хотите на wan1 или все же редиректить на другом интерфейсе?
Планируется на обоих (потом будет балансировка и прочие фэйловэры wan'ов). Но для начала - wan1

mak_v_
проходил мимо

Re: Проброс портов - PF

Непрочитанное сообщение mak_v_ » 2012-10-12 13:07:58

Смотрите на каком этапе у вас пакетики "пропадают" - tcpdump

Код: Выделить всё

rdr on $wan1_if proto tcp from any to $wan1_if port 80 -> 192.168.1.20 port 80
pass in on $wan1_if proto tcp from any to {self, 192.168.1.20} port 80 flags S/SA keep state
pass in quick on $int_if from any to any keep state
pass out quick on $int_if from any to any keep state
pass out from {$office_net, (self) } to { $office_net, (self) } keep state
такая конструкция должна заработать 100%-но

Pernat1y
рядовой
Сообщения: 16
Зарегистрирован: 2012-10-12 10:12:45

Re: Проброс портов - PF

Непрочитанное сообщение Pernat1y » 2012-10-12 14:19:57

Спасибо. Буду еще смотреть/пробовать.
Есть ощущение, что ПФ что-то лишнее блочит.

Pernat1y
рядовой
Сообщения: 16
Зарегистрирован: 2012-10-12 10:12:45

Re: Проброс портов - PF

Непрочитанное сообщение Pernat1y » 2012-10-20 18:34:37

Изображение

С такими конфигами заработало

Код: Выделить всё

gw# cat /etc/rc.conf
#network
hostname="gw"
ifconfig_em0="inet 192.168.1.2 netmask 255.255.255.0"
ifconfig_em1="DHCP"
ifconfig_em2="DHCP ether 00:0c:29:87:8e:47"

#pf
pf_enable="YES"
pf_rules="/etc/pf.conf"
pflog_enable="NO"
pflog_logfile="/var/log/pflog"

#services
sshd_enable="YES"
named_enable="YES"
gateway_enable="YES"
dhcpd_enable="YES"
nginx_enable="YES"

#other
dumpdev="NO"

Код: Выделить всё

gw# cat /etc/pf.conf
##########Interface##########
lan_if="em0"
wan1_if="em1"
wan2_if="em2"
lan_net="192.168.1.0/24"
wan1_ip="1.1.1.1"
wan2_ip="2.2.2.2"

##########Filters##########
#normalize packets
scrub in all fragment reassemble
scrub out all random-id max-mss 1460

##########NAT##########
#NAT all traffic to local subnet
nat on $wan1_if from $lan_net to any -> ($wan1_if)
nat on $wan2_if from $lan_net to any -> ($wan2_if)

#nat - ts
rdr on { $wan1_if, $wan2_if } proto tcp from any to { $wan1_ip, $wan2_ip } port 10011 -> 192.168.1.4 port 10011
rdr on { $wan1_if, $wan2_if } proto tcp from any to { $wan1_ip, $wan2_ip } port 30033 -> 192.168.1.4 port 30033
rdr on { $wan1_if, $wan2_if } proto udp from any to { $wan1_ip, $wan2_ip } port 9987 -> 192.168.1.4 port 9987

#nat - p2p
rdr on { $wan1_if, $wan2_if } proto { tcp, udp } from any to { $wan1_ip, $wan2_ip } port 8888 -> 192.168.1.10 port 8888

#allow all traffic from local subnet
pass on $lan_if all

#allow outgoing traffic on wan interfaces
pass out on $wan1_if proto tcp all modulate state flags S/SA
pass out on $wan1_if proto { udp, icmp } all keep state
pass out on $wan2_if proto tcp all modulate state flags S/SA
pass out on $wan2_if proto { udp, icmp } all keep state

adnik
рядовой
Сообщения: 33
Зарегистрирован: 2008-05-19 18:13:31

Re: Проброс портов - PF

Непрочитанное сообщение adnik » 2013-02-20 5:02:10

Конечно заработало

ибо вторые конфиги - правильные более менее
в первых конфигах вы не как не обращали внимание что у вас 2 внешних интерфейса.

freesmart
проходил мимо

Re: Проброс портов - PF

Непрочитанное сообщение freesmart » 2013-04-12 7:11:02

Здраствуйте, подскажите пожалуйста что я делаю не так. с Freebsd общаюсь недавно, была поставлена задача поднять почтовый сервер на Mdaemon. поднял, с локальной сети проверил, работает web морда доступна по http://localaddres:3000 почтовый клиент почту отправляет и получает. инет работает через шлюз на freebsd там в файле pf.conf прописываю правила для проброса портов 25, 110, 3000 следующим образом:
rdr on $ext_if proto tcp from any to VneshiyIP port 8080 -> localaddres port 3000 для веб морды
rdr on $ext_if proto tcp from any to VneshiyIP port 25 -> localaddres port 25
rdr on $ext_if proto tcp from any to VneshiyIP port 110 -> localaddres port 110 для почтового клиента

потом делаю рестарт /etc/rc.d/pf restart
вижу в консоли:
Disabling pfpf disabled
.
Enabling pf
при этом сессия до шлюза рвется выкидывая такое сообщение:
Network error: Software caused connection abort

по моему после прописывания портов и рестарта фаервола правила должны примениться и должен быть доступен адрес VneshiyIP:8080 для веб морды и порты 25 и 110 для почтового клиента. но этого не происходит

в браузере на запрос http://VneshniyIP:8080 вижу ->
Во время доставки URL: http://VneshniyIP:8080/

Произошла следующая ошибка:
Доступ запрещён.

Настройка контроля доступа не даёт возможности выполнить Ваш запрос в настоящее время. Пожалуйста, свяжитесь с Вашим поставщиком услуг Интернет, если Вы считаете это неправильным.


то есть получается что порт закрыт и правило не работает. почтовый клиент тоже отказывается работать.

вот собственно вроде бы несложная ситуация но.... не выходит никак. пните пожалуйста если кому не сложно в нужном направлении. заранее благодарен