@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) сразу получаю полный доступ в инет. Хотя вроде разрешения нет.
  • Вопрос задан
  • 934 просмотра
Пригласить эксперта
Ответы на вопрос 1
athacker
@athacker
Что-то я такое смутно помню, что у pf обработка правил идёт в порядке их следования в конфиге. Поэтому сначала делается NAT, а потом уже применяются правила блокировки/разрешения. И поэтому правило

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

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

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

Войти через центр авторизации
Похожие вопросы