Задать вопрос
@siberian_sphynx

При включении NAT'a в PF на FreeBSD 9.1, сразу открывается полный доступ в инет, хотя правилами запрещено. В чем загвоздка?

Задача: Дать определенным IP доступ в инет на определенные ресурсы.

Проблема: Как только включаю NAT для этих IP, они получают полный доступ в интернет, хотя разрешающего правила для этого нет.

Прошу помощи, камрады.

Листинг pf.conf: (адреса изменены :-)
####################

int_if="lan0"
ext_ip="10.10.10.1"
ext_if="isp1"
tun="tun0"

## DMZ
dmz_if="dmz0"
dmz_ip="192.168.201.10"
dmz_lan="192.168.201.0/24"

## Сети
trusted_lan="192.168.10.0/24"
vpn_lan="192.168.202.0/24"
localnet="127.0.0.0/8"
wifi_lan="192.168.203.0/24"

## Группы хостов
it="{ 192.168.10.5, 192.168.10.6 }"

## Private nets
private_nets="{ 0.0.0.0/8, 10.0.0.0/8, 127.0.0.0/8, 169.254.0.0/16, 192.0.2.0/24, 192.168.0.0/16, 240.0.0.0/4 }"

## Хосты с полным доступом в инет
vip_ip="{ 192.168.10.24, 192.168.10.32 }"

## Сервисы 1С
1c_kontur="{ 46.17.203.10, 46.17.203.240, 46.17.203.245 }"

## Вредонос
bad_ip="{ 184.168.47.225, 50.31.164.165, 92.51.0.227 }"

################################
## 2. Таблицы ##
################################

table persist
table persist
table persist

#############################
## 3. Опции ##
#############################

set block-policy return
set optimization normal

set skip on lo0
set skip on $int_if
set skip on $dmz_if

set loginterface $ext_if
set timeout { frag 10, tcp.established 3600 }

#####################################
## 4. Нормализация ##
#####################################

scrub in all

###############################
## 5. Очереди ALTQ ##
###############################

#######################################
## 6. Forwading and NAT ##
#######################################
###################
## NAT ##
###################

nat on $ext_if from $vpn_lan to any -> $ext_ip
nat on $ext_if from $wifi_lan to any -> $ext_ip
nat on $ext_if from $vip_ip to any -> $ext_ip
nat on $ext_if from $dmz_lan to any -> $ext_ip
nat on $ext_if inet from $it to any -> ($ext_if:0)

## RDR 1C
rdr on $ext_if proto tcp from any to $ext_ip port $1c_ports -> $term_srv

## RDR MAIL
rdr on $ext_if proto tcp from any to $ext_ip port $mail_ports -> $mail

## ftp-proxy
nat-anchor "ftp-proxy/*"
rdr-anchor "ftp-proxy/*"
pass in on $ext_if inet proto tcp to $ext_ip port 21 flags S/SA keep state
anchor "ftp-proxy/*"
##

##########################################
## 7. Правила фильтрации ##
##########################################

antispoof quick for { lo0, $int_if, $ext_if }

block all

block drop in quick on $ext_if from $private_nets to any
block drop out quick on $ext_if from any to $private_nets

block drop in log quick on $ext_if from $bad_ip to any
block drop out log quick on $ext_if from any to $bad_ip

block drop out log quick on $ext_if proto tcp from $trusted_lan to any port smtp
block drop log quick inet proto tcp from $vpn_lan to any port smtp

block drop log quick on $ext_if from ddos to any #Названия таблиц в скобках. Убрал, т.к. сайт не пропускает.
block drop log quick on $ext_if from spamers to any
block drop log quick on $ext_if from brutforce to any

## Натим внешний интерфейс
pass out on $ext_if from $ext_if to any keep state

## Выпускаем ВПН наружу
pass from $vpn_lan to any keep state

## OpenVPN
pass in quick on $ext_if inet proto {tcp} from any to self port 1194

## Собираем вредителей в таблицы. (Имена таблиц у меня в скобках. здесь с ними не пропускает)
pass in quick on $ext_if inet proto tcp from any to ($ext_if) port www flags S/SA keep state (max-src-conn-rate 5/2, overload ddos flush global)
pass in quick on $ext_if inet proto tcp from any to ($ext_if) port { pop3, pop3s } keep state (max-src-conn-rate 15/60, overload spamers flush global)
pass in quick on $ext_if inet proto tcp from any to ($ext_if) port 22 keep state (max-src-conn-rate 1/40, overload brutforce flush global)

## OpenVPN
pass in log on tun0 from any to any keep state
pass out log on tun0 from any to any keep state

## Открываем сервисы ##

pass in on $ext_if inet proto tcp from any to $ext_if port $tcp_services flags S/SA keep state
pass in on $ext_if inet proto tcp from any to $ext_if port $1c_ports flags S/SA keep state

pass in on $ext_if inet proto udp from any to ($ext_if) port 53 keep state
pass in on $ext_if inet proto tcp from any to ($ext_if) port 53 keep state

#Открываем сервисы 1С
pass out on $ext_if inet proto tcp from $it to $1c_kontur keep state

pass in on $ext_if proto tcp from any to $www port 80 keep state
pass in on $ext_ip proto tcp from any to $www port 80 keep state
pass in on $ext_if proto tcp from any to $mail port $mail_ports keep state

pass in on $ext_if proto tcp from any to $term_srv port $1c_ports keep state

pass log inet proto icmp all icmp-type $icmp_types

##### END CONFIG

Все перепробовал. Как только даю nat on $ext_if inet from $it to any -> ($ext_if:0) сразу получаю полный доступ в инет. Хотя вроде разрешения нет.
  • Вопрос задан
  • 942 просмотра
Подписаться 3 Оценить 1 комментарий
Пригласить эксперта
Ответы на вопрос 1
athacker
@athacker
Что-то я такое смутно помню, что у pf обработка правил идёт в порядке их следования в конфиге. Поэтому сначала делается NAT, а потом уже применяются правила блокировки/разрешения. И поэтому правило

pass out on $ext_if from $ext_if to any keep state

разрешает всем и всё, так как после NAT'a все пакеты, которые через NAT прошли, будут под это правило подпадать.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
02 февр. 2025, в 12:33
3000 руб./за проект
02 февр. 2025, в 12:27
5000 руб./за проект
02 февр. 2025, в 11:35
3000 руб./за проект