Проброс портов средствами pf (rdr)

Настройка сетевых служб, маршрутизации, фаерволлов. Проблемы с сетевым оборудованием.
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Evil
рядовой
Сообщения: 47
Зарегистрирован: 2007-05-27 10:47:20
Контактная информация:

Проброс портов средствами pf (rdr)

Непрочитанное сообщение Evil » 2010-04-18 19:05:44

Собственно что я уже не делал но не работает проброс портов средствами pf
может я смысл не правильно понимаю, во всяком случае буду очень признателен за помощь

/etc/pf.rules

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

inet_if="xl0"
local_if="xl1"

local_net="192.168.6.0/23"

my_office_comp="192.168.7.239"

ssh_port="666"

set block-policy return
set skip on lo0


scrub in all

#rdr
rdr on $inet_if proto tcp from any to $inet_if port 3389 -> $my_office_comp port 3389

#nat
nat on $inet_if from $local_net to any -> ($inet_if)

#rules
antispoof quick for $inet_if
antispoof quick for $local_if

block all

#block on $inet_if inet from 192.168.6.0/23 to any

#ssh
pass in log on $inet_if proto tcp from any to $inet_if port $ssh_port keep state
pass in on $local_if proto tcp from $local_net to $local_if port $ssh_port keep state

#www
pass in on $local_if proto tcp from $local_net to any port 80 keep state

#my office comp
pass in log on $inet_if proto tcp from any to $my_office_comp port 3389 keep state
Вывод tcpdump

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

tgw# tcpdump -vv -i xl1 | grep 192.168.7.239
tcpdump: listening on xl1, link-type EN10MB (Ethernet), capture size 96 bytes
19:05:46.619886 IP (tos 0x10, ttl 64, id 22334, offset 0, flags [DF], proto TCP (6), length 40) 192.168.7.239.rdp > 171-134-112-92.pool.ukrtel.net.28530: R, cksum 0x77a5 (correct), 0:0(0) ack 2667278541 win 0
19:05:49.604784 IP (tos 0x10, ttl 64, id 22343, offset 0, flags [DF], proto TCP (6), length 40) 192.168.7.239.rdp > 171-134-112-92.pool.ukrtel.net.28530: R, cksum 0x77a5 (correct), 0:0(0) ack 1 win 0
19:05:55.603975 IP (tos 0x10, ttl 64, id 22360, offset 0, flags [DF], proto TCP (6), length 40) 192.168.7.239.rdp > 171-134-112-92.pool.ukrtel.net.28530: R, cksum 0x77a5 (correct), 0:0(0) ack 1 win 0
есть подозрения что оно отправляет пакет с внутреним адресом....

Хостинговая компания 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/
Выделенные сервера, Россия, Москва, от 2460 рублей (8 CPU, 8Gb RAM, 2x500Gb HDD, RAID 3ware 9750):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
FreeBSP
майор
Сообщения: 2020
Зарегистрирован: 2009-05-24 20:20:19
Откуда: Москва

Re: Проброс портов средствами pf (rdr)

Непрочитанное сообщение FreeBSP » 2010-04-18 20:07:52

сначала нат, потом rdr
Человек начинает получать первые наслаждения от знакомства с unix системами. Ему нужно помочь - дальше он сможет получать наслаждение самостоятельно ©
Ламер — не желающий самостоятельно разбираться. Не путать с новичком: ламер опасен и знает это!

Evil
рядовой
Сообщения: 47
Зарегистрирован: 2007-05-27 10:47:20
Контактная информация:

Re: Проброс портов средствами pf (rdr)

Непрочитанное сообщение Evil » 2010-04-18 20:25:20

да собственно уже и нат первым ставил да вот толку ноль

Evil
рядовой
Сообщения: 47
Зарегистрирован: 2007-05-27 10:47:20
Контактная информация:

Re: Проброс портов средствами pf (rdr)

Непрочитанное сообщение Evil » 2010-04-19 8:50:58

Методом научного тыка было наклепаные такие правила, таперь сканеры пишут что порт открыт,
телнетом тоже зацепится могу но удаленный робочий стол не работает ((((

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

inet_if="xl0"
local_if="xl1"

local_net="192.168.6.0/23"

my_office_comp="192.168.7.22"

ssh_port="666"

set block-policy return
set skip on lo0


scrub in all


#nat
nat on $inet_if from $local_net to any -> $inet_if

#rdr
rdr on $inet_if proto tcp from any to $inet_if port rdp -> $my_office_comp port rdp


#rules
antispoof quick for $inet_if
antispoof quick for $local_if

block all

#block on $inet_if inet from 192.168.6.0/23 to any

#ssh
pass in log on $inet_if proto tcp from any to $inet_if port $ssh_port keep state
pass in on $local_if proto tcp from $local_net to $local_if port $ssh_port keep state

#www
pass in on $local_if proto tcp from $local_net to any port 80 keep state

#my office comp
pass in on $inet_if proto tcp from any to $my_office_comp port rdp synproxy state
pass out on $local_if proto tcp from any to $my_office_comp port rdp modulate state


Аватара пользователя
24rus
мл. сержант
Сообщения: 75
Зарегистрирован: 2008-09-27 16:04:59
Откуда: Красноярск
Контактная информация:

Re: Проброс портов средствами pf (rdr)

Непрочитанное сообщение 24rus » 2010-04-20 4:56:02

пример с рабочег конфига:

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

#Macros
My_comp="192.168.0.7"
My_port="7777"
......................................
#nat  + rdr
rdr on $ext_if proto tcp from any to any port $My_port -> $My_comp port 22
nat on $ext_if from $nat_ip to any -> $ext_if
.......................................
# pass ssh on My_comp -----
pass in log on $ext_if inet proto tcp from any to $My_comp port 22 flags S/SA synproxy state \
  (max-src-conn 2, max-src-conn-rate 1/180, overload <BRUTE> flush global)
Show must go on !

Evil
рядовой
Сообщения: 47
Зарегистрирован: 2007-05-27 10:47:20
Контактная информация:

Re: Проброс портов средствами pf (rdr)

Непрочитанное сообщение Evil » 2010-04-23 17:07:51

Собственно не работает, собственно сервак работает в дмз, вопрос может ли криво настроенный дмз быть причиной этому?

Аватара пользователя
BlackCat
прапорщик
Сообщения: 469
Зарегистрирован: 2007-10-16 22:40:42

Re: Проброс портов средствами pf (rdr)

Непрочитанное сообщение BlackCat » 2010-04-26 7:58:24

На первый взгляд, второй приведённый вами конфиг должен нормально работать. Что говорит tcpdump? И выложите вывод pfctl -s nat и pfctl -s rules, что бы посмотреть что в итоге оказалось загружено в pf.
=====
Вы говорите, что вервер в DMZ, есть какие-то ещё настройки разграничивающие доступ?

Evil
рядовой
Сообщения: 47
Зарегистрирован: 2007-05-27 10:47:20
Контактная информация:

Re: Проброс портов средствами pf (rdr)

Непрочитанное сообщение Evil » 2010-04-26 12:28:47

По очереди:
pfctl -s nat

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

tgw# pfctl -s nat
nat on xl0 inet from 192.168.6.0/23 to any -> 193.23.183.24
rdr on xl0 inet proto tcp from any to 193.23.183.24 port = rdp -> 192.168.7.22 port 3389
pfctl -s rules

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

tgw# pfctl -s rules
scrub in all fragment reassemble
block drop in quick on ! xl0 inet from 193.23.183.0/26 to any
block drop in quick inet from 193.23.183.24 to any
block drop in quick on ! xl1 inet from 192.168.6.0/23 to any
block drop in quick inet from 192.168.7.207 to any
block return all
pass in log on xl0 inet proto tcp from any to 193.23.183.24 port = mdqs flags S/SA keep state
pass in on xl1 inet proto tcp from 192.168.6.0/23 to 192.168.7.207 port = mdqs flags S/SA keep state
pass in on xl1 inet proto tcp from 192.168.6.0/23 to any port = http flags S/SA keep state
pass out on xl0 inet from 193.23.183.24 to any flags S/SA keep state
pass out on xl1 inet from 192.168.7.207 to any flags S/SA keep state
pass in log on xl0 inet proto tcp from any to 192.168.7.22 port = rdp flags S/SA synproxy state
tcpdump на наружнем интерфейсе

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

tgw# tcpdump -vvv -i xl0 | grep 192.168.7.22.rdp
tcpdump: listening on xl0, link-type EN10MB (Ethernet), capture size 96 bytes
12:08:59.344795 IP (tos 0x10, ttl 64, id 48826, offset 0, flags [DF], proto TCP (6), length 40) 192.168.7.22.rdp > 193.23.183.22.3380: R, cksum 0x9daf (correct), 0:0(0) ack 3980380803 win 0
12:09:02.422287 IP (tos 0x10, ttl 64, id 48855, offset 0, flags [DF], proto TCP (6), length 40) 192.168.7.22.rdp > 193.23.183.22.3380: R, cksum 0x9daf (correct), 0:0(0) ack 1 win 0
12:09:08.356940 IP (tos 0x10, ttl 64, id 48903, offset 0, flags [DF], proto TCP (6), length 40) 192.168.7.22.rdp > 193.23.183.22.3380: R, cksum 0x9daf (correct), 0:0(0) ack 1 win 0
12:09:20.426996 IP (tos 0x10, ttl 64, id 48922, offset 0, flags [DF], proto TCP (6), length 40) 192.168.7.22.rdp > 193.23.183.22.3380: R, cksum 0x9daf (correct), 0:0(0) ack 1 win 0
12:10:32.346192 IP (tos 0x10, ttl 64, id 49088, offset 0, flags [DF], proto TCP (6), length 40) 192.168.7.22.rdp > 193.23.183.22.3380: R, cksum 0x9daf (correct), 0:0(0) ack 1 win 0
12:11:06.783555 IP (tos 0x10, ttl 64, id 49120, offset 0, flags [DF], proto TCP (6), length 40) 193.23.183.22.3380 > 192.168.7.22.rdp: R, cksum 0x3d24 (correct), 2738623004:2738623004(0) ack 1070689123 win 0
tcpdump на внутреннем интерфейсе

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

tgw# tcpdump -vvv -i xl1 | grep 192.168.7.22.rdp
tcpdump: listening on xl1, link-type EN10MB (Ethernet), capture size 96 bytes
12:19:53.047961 IP (tos 0x10, ttl 64, id 50422, offset 0, flags [DF], proto TCP (6), length 40) 192.168.7.22.rdp > 193.23.183.22.3920: R, cksum 0x0a65 (correct), 0:0(0) ack 736042259 win 0
12:19:56.130742 IP (tos 0x10, ttl 64, id 50424, offset 0, flags [DF], proto TCP (6), length 40) 192.168.7.22.rdp > 193.23.183.22.3920: R, cksum 0x0a65 (correct), 0:0(0) ack 1 win 0
12:20:02.064861 IP (tos 0x10, ttl 64, id 50466, offset 0, flags [DF], proto TCP (6), length 40) 192.168.7.22.rdp > 193.23.183.22.3920: R, cksum 0x0a65 (correct), 0:0(0) ack 1 win 0
12:20:08.200764 IP (tos 0x10, ttl 64, id 50510, offset 0, flags [DF], proto TCP (6), length 40) 192.168.7.22.rdp > 193.23.183.22.3869: R, cksum 0x0931 (correct), 0:0(0) ack 3848234233 win 0
12:20:14.034744 IP (tos 0x10, ttl 64, id 50521, offset 0, flags [DF], proto TCP (6), length 40) 192.168.7.22.rdp > 193.23.183.22.3920: R, cksum 0x0a65 (correct), 0:0(0) ack 1 win 0
12:20:38.175407 IP (tos 0x10, ttl 64, id 50552, offset 0, flags [DF], proto TCP (6), length 40) 192.168.7.22.rdp > 193.23.183.22.3920: R, cksum 0x0a65 (correct), 0:0(0) ack 1 win 0
12:20:53.281168 IP (tos 0x10, ttl 64, id 50573, offset 0, flags [DF], proto TCP (6), length 40) 193.23.183.22.3869 > 192.168.7.22.rdp: R, cksum 0x5d54 (correct), 1410172777:1410172777(0) ack 2930909621 win 0
12:21:26.155019 IP (tos 0x10, ttl 64, id 50607, offset 0, flags [DF], proto TCP (6), length 40) 192.168.7.22.rdp > 193.23.183.22.3920: R, cksum 0x0a65 (correct), 0:0(0) ack 1 win 0
12:21:55.333798 IP (tos 0x10, ttl 64, id 50631, offset 0, flags [DF], proto TCP (6), length 40) 193.23.183.22.3920 > 192.168.7.22.rdp: R, cksum 0xa9bd (correct), 2108044130:2108044130(0) ack 3569670874 win 0
=========

о ДМЗ это отдельный вопрос, теоретически его пытались зделать, вернее в фаере присутсвуют слова такие, оно настроеено на фре, и тоже ж, главные правила там гласят

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

ipfw add allow all from $dmz_net to any
ipfw add allow all from any to $dmz_net
учитуючи что оно все идет по одном шнурку без вланов и прочего как то и стремно это называть ДМЗ

Аватара пользователя
BlackCat
прапорщик
Сообщения: 469
Зарегистрирован: 2007-10-16 22:40:42

Re: Проброс портов средствами pf (rdr)

Непрочитанное сообщение BlackCat » 2010-04-26 23:45:47

Evil, у вас отсутствует правило разрешающее исходящий трафик с внутреннего интерфейса (xl1) до 192.168.7.22:3389.
=====
И какой-то странный вывод tcpdump: ни одного пакета с SYN флагом. Если вам нужен фильтр вывода, то удобнее использовать фильтры самого tcpdump'а:

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

#tcpdump -i xl0 -vvv -n port 3389

Evil
рядовой
Сообщения: 47
Зарегистрирован: 2007-05-27 10:47:20
Контактная информация:

Re: Проброс портов средствами pf (rdr)

Непрочитанное сообщение Evil » 2010-04-27 8:26:01

ох какие правила только я уже не ставил, вот текущие где теоретически разрешено все...
уже по каким только примерах не пытался собрать, еще один вопрос возник а может я еще что-то кроме фаера забыл?

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

tgw# pfctl -sr
scrub in all fragment reassemble
block drop in quick on ! xl0 inet from 193.23.183.0/26 to any
block drop in quick on ! xl0 inet from 193.23.183.0/26 to any
block drop in quick inet from 193.23.183.24 to any
block drop in quick inet from 193.23.183.60 to any
block drop in quick on ! xl1 inet from 192.168.6.0/23 to any
block drop in quick inet from 192.168.7.207 to any
block return all
pass in log on xl0 inet proto tcp from any to 193.23.183.24 port = mdqs flags S/SA keep state
pass in log on xl0 inet proto tcp from any to 193.23.183.60 port = mdqs flags S/SA keep state
pass in on xl1 inet proto tcp from 192.168.6.0/23 to 192.168.7.207 port = mdqs flags S/SA keep state
pass in on xl1 inet proto tcp from 192.168.6.0/23 to any port = http flags S/SA keep state
pass out all flags S/SA keep state
pass in log on xl0 inet proto tcp from any to 192.168.7.22 port = rdp flags S/SA synproxy state
pass out log on xl1 inet proto tcp from any to 192.168.7.22 port = rdp flags S/SA modulate state
tgw#

Evil
рядовой
Сообщения: 47
Зарегистрирован: 2007-05-27 10:47:20
Контактная информация:

Re: Проброс портов средствами pf (rdr)

Непрочитанное сообщение Evil » 2010-04-27 8:33:48

почему именно так дамплю, потому что в сети творится такой бред что розгребать мне еще долго его придется...

====
не знаю показатель ли это но свыше приведеными правилами попытался с емулировать ситуацию на виртуалках, незаработало....

Аватара пользователя
BlackCat
прапорщик
Сообщения: 469
Зарегистрирован: 2007-10-16 22:40:42

Re: Проброс портов средствами pf (rdr)

Непрочитанное сообщение BlackCat » 2010-04-27 10:50:59

Evil писал(а):уже по каким только примерах не пытался собрать, еще один вопрос возник а может я еще что-то кроме фаера забыл
Возможно, что есть какие-то ещё блокирующие правила. Посмотрите, что в ipfw загружено и проведите полный аудит настроек. Т.к. этих правил достаточно для нормальной работы.
Evil писал(а):почему именно так дамплю, потому что в сети творится такой бред что розгребать мне еще долго его придется...
Выше был пример с фильтрацией самим tcpdump'ом, так он быстрее работает.
Evil писал(а):не знаю показатель ли это но свыше приведеными правилами попытался с емулировать ситуацию на виртуалках, незаработало....
Показатель, но с большим количеством "если".

Попробуйте вот такой, простейший, конфиг.

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

inet_if="xl0"

serv_addr="XXX.XXX.XXX.XXX"

set block-policy return
set skip on lo0

rdr on $inet_if proto tcp from any to ($inet_if) port 3389 -> $serv_addr

pass all
Заработает - будете усложнять, не заработает - значит вопрос не в настройке pf.

Evil
рядовой
Сообщения: 47
Зарегистрирован: 2007-05-27 10:47:20
Контактная информация:

Re: Проброс портов средствами pf (rdr)

Непрочитанное сообщение Evil » 2010-04-27 18:05:38

как и ожидалось, не заработало, эх, в фаере шлюза он же ДМЗ явных запретов не вижу...
собственно пару вопросов куда копать... так как от предыдущих админов достался подарок интересный...
может ли кривой диверт на это влиять?
кривизна самой сети(все локальная сеть, внешняя сеть(24 маска) все это ходит по одном шнурку) ?
а то есть чуство нехарошое что скоро мне все понадобится в вменяемом состоянии, а тут полная засада... ))))

Аватара пользователя
BlackCat
прапорщик
Сообщения: 469
Зарегистрирован: 2007-10-16 22:40:42

Re: Проброс портов средствами pf (rdr)

Непрочитанное сообщение BlackCat » 2010-04-27 21:36:59

Evil писал(а):как и ожидалось, не заработало, эх, в фаере шлюза он же ДМЗ явных запретов не вижу...
собственно пару вопросов куда копать... так как от предыдущих админов достался подарок интересный...
может ли кривой диверт на это влиять?
кривизна самой сети(все локальная сеть, внешняя сеть(24 маска) все это ходит по одном шнурку) ?
В ipfw я с трудом разбираюсь и помочь не смогу. Диверт конечно может влиять - берёт и отправляет трафик налево. Вооружайтесь tcpdump'ом или другим снифером по-вкусу и смотрите куда делись пакеты. Попробуйте нарисовать схему сети, тоже помогает. Да и не совсем понятно, что где и куда подключено, а самое главное, как это должно работать.

Evil
рядовой
Сообщения: 47
Зарегистрирован: 2007-05-27 10:47:20
Контактная информация:

Re: Проброс портов средствами pf (rdr)

Непрочитанное сообщение Evil » 2010-04-27 21:58:25

Да как оно должно работать я знаю, НО тут есть пару как бы проблем, серваки находятся оч далеко от канторы, а карту сети мне набросок дали с того что я вижу реально с наброском не сильно сходится, эх залет плин ))))
Во всяком случае огромное спасиба за помощь!!!

Аватара пользователя
BlackCat
прапорщик
Сообщения: 469
Зарегистрирован: 2007-10-16 22:40:42

Re: Проброс портов средствами pf (rdr)

Непрочитанное сообщение BlackCat » 2010-04-27 22:20:32

Evil писал(а):Да как оно должно работать я знаю, НО тут есть пару как бы проблем, серваки находятся оч далеко от канторы, а карту сети мне набросок дали с того что я вижу реально с наброском не сильно сходится, эх залет плин ))))
Ну нарисуйте её хоть карандашом на бумаге, сами ;-)
Evil писал(а):Во всяком случае огромное спасиба за помощь!!!
Не за что, т.к. действительно не за что.

Pumbey
ефрейтор
Сообщения: 53
Зарегистрирован: 2007-08-29 17:06:55
Откуда: Санкт-Петербург

Re: Проброс портов средствами pf (rdr)

Непрочитанное сообщение Pumbey » 2010-04-30 11:13:01

Подниму тему, вопрос схож

Требо сделать редерикт на виндовые машины внутри сети.

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

nat on $ext_if from $int_net to any -> ($ext_if)

rdr on $ext_if proto tcp to $ext_ip port 3001 -> $win_backup port 6969
rdr on $ext_if proto tcp to $ext_ip port 3000 -> $win_server port 6969
rdr on $ext_if proto tcp to $ext_ip port 3058 -> 192.168.0.18 port 4899

pass in on $ext_if proto tcp from any to any port { 3058  4899 6969 9955 } keep state


Трабла в том, что верхние 2 правила редерикта работают(это тот жен радмин), а 3е правило отказывается.
tcpdump -i re0 -vvv -n port 4899 и tcpdump -i re0 -vvv |grep 192.168.0.18 - выдает партизанское молчание
Начинаю подозревать "темные электрические силы" ;(

Аватара пользователя
BlackCat
прапорщик
Сообщения: 469
Зарегистрирован: 2007-10-16 22:40:42

Re: Проброс портов средствами pf (rdr)

Непрочитанное сообщение BlackCat » 2010-04-30 12:11:21

Pumbey, у вас в редиректах немного нехватает условия from, но это так, к слову.
Изучение pfctl -s rules и pfctl -s nat то-же помогает, т.к. показывает, что установилось, в дополнение к тому, что хотели установить.
tcpdump -i re0 -vvv -n port 4899, может ничего и не показать, если re0 - внешний интерфейс, т.к. pcap обычно захватывает пакеты ещё до фильтра.
tcpdump -i re0 -vvv | grep 192.168.0.18, корректнее записывается так tcpdump -i re0 -vvv -n host 192.168.0.18.

Pumbey
ефрейтор
Сообщения: 53
Зарегистрирован: 2007-08-29 17:06:55
Откуда: Санкт-Петербург

Re: Проброс портов средствами pf (rdr)

Непрочитанное сообщение Pumbey » 2010-04-30 14:27:43

BlackCat, спасибо за ответ.
pfctl -s rules и pfctl -s nat были изучены, каких то отклонений не было замечено, сюда не стал постить, дабы не афишировать внешний ип.(знаю, предрасудки, но все таки)
За пример, пользования тспдампом, спасибо, обязательно учту.
Однако при использовании правил редерикта на порт 6969 лог идет, не совсем читаемый, но он есть. а при соединение на 4899 тишина.
Насчет нехватающего условия, при его отсутвии pf его воспринимает как from any. я его сознательно сократил, дабы избежать еще одной затыки в фильтрации.

Тем не менее, проблема сохранилась.
ЗЫ. Я совсем не понимаю, правила идентичны. доп условий нету. Одно работает, другое нет.. :cz2:

Аватара пользователя
BlackCat
прапорщик
Сообщения: 469
Зарегистрирован: 2007-10-16 22:40:42

Re: Проброс портов средствами pf (rdr)

Непрочитанное сообщение BlackCat » 2010-04-30 16:44:03

Pumbey писал(а):а при соединение на 4899 тишина.
Тишина на внутреннем интерфейсе, как я понял. А на внешнем, на порту 3058? Попробуйте пробросить этот-же порт 4899, но на адрес к которому переадресация идёт (напр. $win_server) или пробросить на 192.168.0.18 работающий порт 6969 - найдите рабочую конфигурацию и смотрите какой параметр всё рушит.
=====
Pumbey писал(а):Насчет нехватающего условия, при его отсутвии pf его воспринимает как from any.
Интересно, буду знать.