Пытаюсь настроить новый шлюз на базе FreeBSD + PFPF заменательно работает и даже rdr отрабатывает завозачивая запрос на проксю на внутреннем интерфейсе но когда дело касается прослушивания внешнего порта и проброски на локальную машину затыкается. Помогите ПЛЗ ???
pfctl -ss
serv# pfctl -ss
No ALTQ support in kernel
ALTQ related functions disabled
all tcp 192.168.1.77:21 <- 192.168.1.79:1183 ESTABLISHED:ESTABLISHED
all udp 192.168.1.255:137 <- 192.168.1.100:137 NO_TRAFFIC:SINGLE
all udp 192.168.1.255:137 <- 192.168.1.198:137 NO_TRAFFIC:SINGLE
all tcp 195.239.111.59:5222 <- 192.168.1.152:1043 ESTABLISHED:ESTABLISHED
all tcp 192.168.1.152:1043 -> 85.113.204.19:63181 -> 195.239.111.59:5222 ESTABLISHED:ESTABLISHED
all tcp 205.188.5.81:5190 <- 192.168.1.152:1046 ESTABLISHED:ESTABLISHED
all tcp 192.168.1.152:1046 -> 85.113.204.19:50691 -> 205.188.5.81:5190 ESTABLISHED:ESTABLISHED
all tcp 217.15.142.234:22 <- 192.168.1.152:1053 FIN_WAIT_2:FIN_WAIT_2
all tcp 192.168.1.152:1053 -> 85.113.204.19:63262 -> 217.15.142.234:22 FIN_WAIT_2:FIN_WAIT_2
all tcp 217.15.142.234:21 <- 192.168.1.152:1060 TIME_WAIT:TIME_WAIT
all tcp 192.168.1.152:1060 -> 85.113.204.19:62587 -> 217.15.142.234:21 TIME_WAIT:TIME_WAIT
all udp 192.168.1.255:137 <- 192.168.1.188:137 NO_TRAFFIC:SINGLE
all tcp 192.168.1.77:445 <- 192.168.1.123:3233 TIME_WAIT:TIME_WAIT
all tcp 127.0.0.1:3128 <- 63.245.209.93:80 <- 192.168.1.152:1069 FIN_WAIT_2:FIN_WAIT_2
all tcp 127.0.0.1:3128 <- 77.67.20.16:80 <- 192.168.1.152:1071 FIN_WAIT_2:FIN_WAIT_2
all tcp 85.113.204.19:57886 -> 77.67.20.17:80 FIN_WAIT_2:FIN_WAIT_2
all tcp 127.0.0.1:3128 <- 212.58.246.91:80 <- 192.168.1.152:1073 FIN_WAIT_2:FIN_WAIT_2
all tcp 85.113.204.19:41303 -> 212.58.246.91:80 FIN_WAIT_2:FIN_WAIT_2
all tcp 127.0.0.1:3128 <- 77.67.20.26:80 <- 192.168.1.152:1075 FIN_WAIT_2:FIN_WAIT_2
all tcp 85.113.204.19:50120 -> 77.67.20.41:80 FIN_WAIT_2:FIN_WAIT_2
all tcp 192.168.1.77:23 <- 192.168.1.79:1876 ESTABLISHED:ESTABLISHED
all tcp 127.0.0.1:3128 <- 192.168.1.77:80 <- 192.168.1.152:1077 FIN_WAIT_2:FIN_WAIT_2
all tcp 127.0.0.1:3128 <- 192.168.1.77:80 <- 192.168.1.152:1079 TIME_WAIT:TIME_WAIT
all tcp 127.0.0.1:3128 <- 192.168.1.77:80 <- 192.168.1.152:1081 TIME_WAIT:TIME_WAIT
all tcp 127.0.0.1:3128 <- 192.168.1.77:80 <- 192.168.1.152:1083 TIME_WAIT:TIME_WAIT
all tcp 127.0.0.1:3128 <- 192.168.1.77:80 <- 192.168.1.152:1090 FIN_WAIT_2:FIN_WAIT_2
all tcp 127.0.0.1:3128 <- 192.168.1.77:80 <- 192.168.1.152:1093 TIME_WAIT:TIME_WAIT
all tcp 127.0.0.1:3128 <- 192.168.1.77:80 <- 192.168.1.152:1095 FIN_WAIT_2:FIN_WAIT_2
all tcp 127.0.0.1:3128 <- 192.168.1.77:80 <- 192.168.1.152:1097 TIME_WAIT:TIME_WAIT
all udp 192.168.1.255:138 <- 192.168.1.30:138 NO_TRAFFIC:SINGLE
all udp 192.168.1.255:137 <- 192.168.1.141:137 NO_TRAFFIC:SINGLE
all tcp 127.0.0.1:3128 <- 192.168.1.77:80 <- 192.168.1.152:1099 TIME_WAIT:TIME_WAIT
all tcp 127.0.0.1:3128 <- 192.168.1.77:80 <- 192.168.1.152:1101 TIME_WAIT:TIME_WAIT
all tcp 127.0.0.1:3128 <- 192.168.1.77:80 <- 192.168.1.152:1108 FIN_WAIT_2:FIN_WAIT_2
all tcp 127.0.0.1:3128 <- 192.168.1.77:80 <- 192.168.1.152:1109 FIN_WAIT_2:FIN_WAIT_2
all tcp 127.0.0.1:3128 <- 192.168.1.77:80 <- 192.168.1.152:1107 FIN_WAIT_2:FIN_WAIT_2
all tcp 127.0.0.1:3128 <- 192.168.1.77:80 <- 192.168.1.152:1112 FIN_WAIT_2:FIN_WAIT_2
all tcp 127.0.0.1:3128 <- 192.168.1.77:80 <- 192.168.1.152:1113 FIN_WAIT_2:FIN_WAIT_2
all udp 192.168.1.255:138 <- 192.168.1.112:138 NO_TRAFFIC:SINGLE
all tcp 127.0.0.1:3128 <- 192.168.1.77:80 <- 192.168.1.152:1115 TIME_WAIT:TIME_WAIT
all tcp 127.0.0.1:3128 <- 192.168.1.77:80 <- 192.168.1.152:1117 FIN_WAIT_2:FIN_WAIT_2
all udp 192.168.1.255:137 <- 192.168.1.6:137 NO_TRAFFIC:SINGLE
all udp 192.168.1.255:138 <- 192.168.1.121:138 NO_TRAFFIC:SINGLE
all udp 192.168.1.255:138 <- 192.168.1.137:138 NO_TRAFFIC:SINGLE
all udp 192.168.1.255:138 <- 192.168.1.110:138 NO_TRAFFIC:SINGLE
all udp 192.168.1.255:138 <- 192.168.1.155:138 NO_TRAFFIC:SINGLE
all tcp 192.168.1.79:3389 <- 85.113.204.19:3389 <- 217.15.140.70:57261 PROXY:DST
all tcp 217.15.140.70:57261 -> 192.168.1.79:3389 SYN_SENT:CLOSED
all udp 192.168.1.255:137 <- 192.168.1.136:137 NO_TRAFFIC:SINGLEсам pf.conf
ext_if = "em0" # macro for external interface - use tun0 for PPPoE
int_if = "em1" # macro for internal interface
lan_net = "192.168.1.0/24"
table <firewall> const {"внешка"}
table <users> persist file "/etc/nat.conf"
table <blacklist> persist file "/etc/black.list"
tcp_ports="{20,21,23,80,443,25,110,465,995,1494,1495,2106,3182,3050,3306,3389,3724,4020,4899,5190,7777,8000,8080,8083,8086}"
tcp_port_in="{ 20,21,22,23,3389 }"
terminal="192.168.1.79/32"
rdr on $int_if inet proto tcp from <users> to any port www -> 127.0.0.1 port 3128
#rdr on $ext_if inet proto tcp from any to any port 23 -> 192.168.1.15
nat on $ext_if from <users> to any -> ($ext_if)
rdr on $ext_if proto tcp from any to any port rdp -> $terminal
#rdr pass on $ext_if proto {tcp} to any port 23 -> 192.168.1.15
#rdr on $ext_if proto tcp from any to any port 3389 -> 192.168.1.79
# не фильтровать трафик на кольцевом интерфейсе
set skip on lo0# нормализовать входящие пакеты
#scrub in all# установка политики по умолчанию
block all# активировать спуфинг защиту для всех интерфейсов
block in quick from urpf-failed# разрешить ssh соединения только из локальной сети доверенного
# компьютера, 192.168.0.15. Используйте "block return" для того чтобы
# высылался TCP флаг RST для закрытия блокированных соединений немедленно.
# используйте "quick" чтобы правило не было перекрыто правилами расположенными
# ниже.
block return in quick on $int_if proto tcp from ! <users> \
to $int_if port $tcp_ports# пропускать весь трафик в и из локальной сети.
# эти правила будут создавать записи в таблице состояний,
# благодаря дефолтной опции "keep state", которая будет применена
# автоматически
pass in on $int_if from $lan_net to any
pass out on $int_if from any to $lan_net# выпустить tcp, udp и icmp трафик на внешнем (Интернет) интерфейсе.
# tcp соединения буду модулироваться, udp/icmp будут отслеживаться
# по таблице состояний.
pass out on $ext_if proto { tcp udp icmp } to any modulate state# разрешить входящие ssh соединения на внешнем интерфейсе, если они НЕ
# предназначены брандмауэру (например, они предназначены машине внутри
# сети). Логировать инициализационный пакет, так чтобы позже мы смогли
# сказать кто пытался соединиться. используйте tcp syn proxy для проксирования
# соединения. Флаг "S/SA" используемый по умолчанию будет автоматически
# применён к правилу.
pass in log on $ext_if proto tcp from any to ! <firewall> \
port $tcp_port_in synproxy statepass in log on $ext_if proto tcp from any to $terminal port rdp flags S/SA synproxy state
pass in inet proto icmp all
#block all
#block out on $ext_if all
#pass out quick on $ext_if from <users> keep state
#pass in on $ext_if proto tcp from any to $ext_if port 23 \
rdr-to <firewall> port 23
Попробуй вот эту строку заменить
- pass in log on $ext_if proto tcp from any to $terminal port rdp flags S/SA synproxy state
+ pass in log on $ext_if proto tcp from any to $terminal port rdp flags S/SA modulate state
>
>Попробуй вот эту строку заменить
>- pass in log on $ext_if proto tcp from any to $terminal
>port rdp flags S/SA synproxy state
>+ pass in log on $ext_if proto tcp from any to $terminal
>port rdp flags S/SA modulate stateСитуация не изменилась
serv# pfctl -ss
No ALTQ support in kernel
ALTQ related functions disabled
all tcp 127.0.0.1:3128 <- 93.191.13.103:80 <- 192.168.1.79:1030 TIME_WAIT:TIME_WAIT
all udp 192.168.1.255:137 <- 192.168.1.182:137 NO_TRAFFIC:SINGLE
all tcp 192.168.1.77:22 <- 192.168.1.79:1051 ESTABLISHED:ESTABLISHED
all tcp 127.0.0.1:3128 <- 93.191.13.103:80 <- 192.168.1.79:1061 ESTABLISHED:ESTABLISHED
all tcp 85.113.204.19:21033 -> 93.191.13.103:80 ESTABLISHED:ESTABLISHED
all udp 192.168.1.255:137 <- 192.168.1.180:137 NO_TRAFFIC:SINGLE
all udp 192.168.1.255:137 <- 192.168.1.162:137 NO_TRAFFIC:SINGLE
all udp 192.168.1.255:137 <- 192.168.1.139:137 NO_TRAFFIC:SINGLE
all udp 192.168.1.255:138 <- 192.168.1.34:138 NO_TRAFFIC:SINGLE
all udp 192.168.1.255:138 <- 192.168.1.139:138 NO_TRAFFIC:SINGLE
all udp 192.168.1.255:137 <- 192.168.1.150:137 NO_TRAFFIC:SINGLE
all tcp 192.168.1.79:3389 <- 85.113.204.19:3389 <- 217.15.140.70:50535 CLOSED:SYN_SENT
all tcp 217.15.140.70:50535 -> 192.168.1.79:3389 SYN_SENT:CLOSED
>>
>>Попробуй вот эту строку заменить
>>- pass in log on $ext_if proto tcp from any to $terminal
>>port rdp flags S/SA synproxy state
>>+ pass in log on $ext_if proto tcp from any to $terminal
>>port rdp flags S/SA modulate state
>
>Ситуация не изменилась
>Очень странно... Вот у меня в общем-то аналогичная ситуация- прокидываю http внутрь приватной сетки
ext_if="em1"
int_if="em0"
internal_net="192.168.1.0/24"
...
rdr on $ext_if inet proto tcp from any to ($ext_if) port 8888 -> \
192.168.1.134 port 80
...
pass in quick on $ext_if inet proto tcp from any \
to 192.168.1.134 port 80 keep state
...
pass out on $int_if inet proto tcp from any to $internal_net modulate state
pass out on $int_if inet proto { udp, icmp } from any to $internal_net keep state
...
Все работает без проблем. фря 6.4
дефолтный block all
# выпустить tcp, udp и icmp трафик на внешнем (Интернет) интерфейсе.
# tcp соединения буду модулироваться, udp/icmp будут отслеживаться
# по таблице состояний.
pass out on $ext_if proto { tcp udp icmp } to any modulate stateМне кажется, что тут проблема. По-крайне мере, в 6.4 modulate state может быть применен только для tcp-трафика. Для icmp и udp только keep state. Может правило не раскрывается, но и не выдает ошибку при компиляции
>rdr on $ext_if proto tcp from any to any port rdp -> $terminalздесь попробуйте точно указать to ($ext_if)
>pass in log on $ext_if proto tcp from any to $terminal port rdp flags S/SA synproxy state
и здесь to $terminal как-то неправильно, думаю надо тоже to ($ext_if)
>pass in log on $ext_if proto tcp from any to $terminal port rdp flags S/SA synproxy stateЕще надо разрешить прохождение этих пакетиков на $int_if
pass out on $int_if inet proto tcp from any to $terminal port rdp
>>pass in log on $ext_if proto tcp from any to $terminal port rdp flags S/SA synproxy state
>
>Еще надо разрешить прохождение этих пакетиков на $int_if
>pass out on $int_if inet proto tcp from any to $terminal port
>rdpРазрешил и все равно
all udp 192.168.1.255:137 <- 192.168.1.198:137 NO_TRAFFIC:SINGLE
all tcp 192.168.1.77:22 <- 192.168.1.79:3542 ESTABLISHED:ESTABLISHED
all udp 192.168.1.255:137 <- 192.168.1.8:137 NO_TRAFFIC:SINGLE
all udp 192.168.1.255:137 <- 192.168.1.136:137 NO_TRAFFIC:SINGLE
all udp 192.168.1.255:137 <- 192.168.1.175:137 NO_TRAFFIC:SINGLE
all udp 192.168.1.255:138 <- 192.168.1.12:138 NO_TRAFFIC:SINGLE
all tcp 192.168.1.79:3389 <- 85.113.204.19:3389 <- 217.15.140.70:61525 PROXY:DST
all tcp 217.15.140.70:61525 -> 192.168.1.79:3389 SYN_SENT:CLOSED
all udp 192.168.1.255:137 <- 192.168.1.87:137 NO_TRAFFIC:SINGLE
all udp 192.168.1.255:138 <- 192.168.1.143:138 NO_TRAFFIC:SINGLE
all udp 192.168.1.255:138 <- 192.168.1.28:138 NO_TRAFFIC:SINGLE
all udp 192.168.1.255:138 <- 192.168.1.6:138 NO_TRAFFIC:SINGLE
all udp 192.168.1.255:138 <- 192.168.1.23:138 NO_TRAFFIC:SINGLE
all udp 192.168.1.255:137 <- 192.168.1.10:137 NO_TRAFFIC:SINGLE
all udp 192.168.1.255:138 <- 192.168.1.10:138 NO_TRAFFIC:SINGLE
all udp 192.168.1.255:138 <- 192.168.1.112:138 NO_TRAFFIC:SINGLE
попробовал разделить правило
# выпустить tcp, udp и icmp трафик на внешнем (Интернет) интерфейсе.
# tcp соединения буду модулироваться, udp/icmp будут отслеживаться
# по таблице состояний.
pass out on $ext_if proto { tcp udp icmp } to any modulate state
на
pass out on $ext_if proto { tcp } to any modulate state
pass out on $ext_if proto {udp icmp } to any keep stateрезультат тот же(((
>[оверквотинг удален]
># по таблице состояний.
>pass out on $ext_if proto { tcp udp icmp } to any
>modulate state
>на
>pass out on $ext_if proto { tcp } to any modulate state
>
>pass out on $ext_if proto {udp icmp } to any keep state
>
>
>результат тот же(((адрес $terminal есть в таблице users? может проблема как раз в пакете, который возвращается клиенту - для него просто не работает нат. посмотрите тисипидампом на внешнем и внутренем интерфейсах трафик при обращении к этому порту
>[оверквотинг удален]
>>
>>pass out on $ext_if proto {udp icmp } to any keep state
>>
>>
>>результат тот же(((
>
>адрес $terminal есть в таблице users? может проблема как раз в пакете,
>который возвращается клиенту - для него просто не работает нат. посмотрите
>тисипидампом на внешнем и внутренем интерфейсах трафик при обращении к этому
>портуСделали помогло открытие ната на внутреннем интерфейсе
nat on $int_if from any to $terminal port rdp -> $int_if