PF - исходящий доступ

Проблемы установки, настройки и работы Правильной Операционной Системы

Модератор: terminus

Правила форума
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
$Alchemist
сержант
Сообщения: 173
Зарегистрирован: 2008-06-26 13:38:17
Откуда: SPb
Контактная информация:

PF - исходящий доступ

Непрочитанное сообщение $Alchemist » 2009-03-10 12:41:25

Пересел с ipfw на pf и никак не получается разграничить исходящий доступ:

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

ext_if = "em1"
int_if = "em0"
lannet = "192.168.0.0/24"

ext_ip = "95.165.111.222/32"
lan_ip_bsd = "192.168.0.1/32"
root = "192.168.0.10/32"
client_services = "{ 443, 5190 }"
admin_services = "{ 21, 22, 25, 110, 3389, 8080 }"
private_nets= "{ 127.0.0.0/8, 192.168.0.0/16, 172.16.0.0/12, 10.0.0.0/8, 169.254.0.0/16, 192.0.2.0/24, 0.0.0.0/8, 240.0.0.0/4 }"

set block-policy drop
set loginterface $ext_if
set limit { frags 10000, states 10000 }
set optimization normal
set skip on lo0
scrub in all

nat on $ext_if from $lannet to any -> $ext_ip

rdr on $int_if proto tcp from $lannet to any port { ftp, www } -> $lan_ip_bsd port 3129

antispoof quick for { lo0, $int_if, $ext_if }
block log all
block drop in quick on $ext_if from $private_nets to any

pass on $int_if from $lannet to any

pass inet proto icmp all icmp-type echoreq

pass out on $ext_if from $ext_ip_bsd to any
pass out on $ext_if proto tcp from $root to any port $admin_services
pass out on $ext_if proto tcp from $lannet to any port $client_services
При таком раскладе получается полный доступ для всех из-за правила "pass out on $ext_if from $ext_ip_bsd to any".
А хотелось бы: разрешить весь исходящий трафик только с этого шлюза, разрешить клиентам на выход несколько портов и админам на выход еще кое-какие порты.
Machines to Work,
People to Think.

Хостинговая компания 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/

alik
рядовой
Сообщения: 16
Зарегистрирован: 2009-02-12 14:47:32

Re: PF - исходящий доступ

Непрочитанное сообщение alik » 2009-03-11 7:31:55

попробуй применить quick правило

Аватара пользователя
$Alchemist
сержант
Сообщения: 173
Зарегистрирован: 2008-06-26 13:38:17
Откуда: SPb
Контактная информация:

Re: PF - исходящий доступ

Непрочитанное сообщение $Alchemist » 2009-03-11 9:35:07

Спасибо, догнал уже: на внешнем интерфейсе даем полный выход, а клиентов ограничиваем на внутреннем.
Machines to Work,
People to Think.

Аватара пользователя
$Alchemist
сержант
Сообщения: 173
Зарегистрирован: 2008-06-26 13:38:17
Откуда: SPb
Контактная информация:

Re: PF - исходящий доступ

Непрочитанное сообщение $Alchemist » 2009-03-12 15:31:28

Как, при наличии нескольких внешних адресов, вывести сеть под одним ip, а отдельный сервак под другим?
Делаю так:

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

nat on $ext_if from $pbx to any -> $ext_ip_pbx
nat on $ext_if from $lannet to any -> $ext_ip
но не пашет...
binat тоже не пашет =\
Machines to Work,
People to Think.

alik
рядовой
Сообщения: 16
Зарегистрирован: 2009-02-12 14:47:32

Re: PF - исходящий доступ

Непрочитанное сообщение alik » 2009-03-12 15:41:55

Я тебя правильно понял???
у тебя несколько провайдеров???
ты хочешь у себя на роутере распределить канал, то есть, чтобы не которые из локалки ходили через ISP1 а другие через ISP2?????
так????

Аватара пользователя
$Alchemist
сержант
Сообщения: 173
Зарегистрирован: 2008-06-26 13:38:17
Откуда: SPb
Контактная информация:

Re: PF - исходящий доступ

Непрочитанное сообщение $Alchemist » 2009-03-12 15:50:48

Нет, у меня один провайдер и от него несколько внешних адресов.
Я хочу под одним адресом вывести один сервак, а все остальное под другим
Machines to Work,
People to Think.

Аватара пользователя
$Alchemist
сержант
Сообщения: 173
Зарегистрирован: 2008-06-26 13:38:17
Откуда: SPb
Контактная информация:

Re: PF - исходящий доступ

Непрочитанное сообщение $Alchemist » 2009-03-12 18:32:25

Работает вышеуказанная схема.
Просто у меня трафик через проксю шел, ip соответственно старый отображался. :pardon:
Machines to Work,
People to Think.

alik
рядовой
Сообщения: 16
Зарегистрирован: 2009-02-12 14:47:32

Re: PF - исходящий доступ

Непрочитанное сообщение alik » 2009-03-13 5:28:05

Ясно, идея хорошая. :smile:
Так ты говоришь с бинатом у тебя не вышло????
покажи свой конфиг, одна голова хорошо а две лучше, да и народ должен потянуться.
Люблю PF, однако гибкий он слишком.

Аватара пользователя
$Alchemist
сержант
Сообщения: 173
Зарегистрирован: 2008-06-26 13:38:17
Откуда: SPb
Контактная информация:

Re: PF - исходящий доступ

Непрочитанное сообщение $Alchemist » 2009-03-13 10:37:01

alik писал(а): Так ты говоришь с бинатом у тебя не вышло????
C бинатом тоже вышло, проблема в прокси была, ну и в самом астериске, который я пробрасывал.
Сейчас все пашет. Рабочий конфиг если интересен - чуть позже кину.
Machines to Work,
People to Think.

alik
рядовой
Сообщения: 16
Зарегистрирован: 2009-02-12 14:47:32

Re: PF - исходящий доступ

Непрочитанное сообщение alik » 2009-03-13 10:42:21

Буду рад твоему конфигу, если не сложно то и схему бы как нибудь описал.
Самому прийдется ставить скоро астерикс и.т.д
Вот думаю у тебя можно будет поучиться

Аватара пользователя
$Alchemist
сержант
Сообщения: 173
Зарегистрирован: 2008-06-26 13:38:17
Откуда: SPb
Контактная информация:

Re: PF - исходящий доступ

Непрочитанное сообщение $Alchemist » 2009-03-13 13:33:30

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

#################################################################
# Опции
#################################################################

# Интерфейсы
ext_if = "em1"
int_if = "em0"

# IP адреса
extnet = "95.161.XXX.XXX."
lannet = "192.168.0.0/23"
ext_ip = "95.161.XXX.XX1"
ext_ip_pbx = "95.161.XXX.XX2"
bsd = "192.168.0.1/32"
mail = "192.168.0.100/32"
pbx = "192.168.1.227/32"
terminal = "192.168.1.144/32"
root = "192.168.0.10/32"
gs = "192.168.0.96/32"
fserv = "192.168.0.3/32"
friends = "{ XXXXXXXXXXXXXXXX }"
private_nets= "{ 127.0.0.0/8, 192.168.0.0/16, 172.16.0.0/12, 10.0.0.0/8, 169.254.0.0/16, 192.0.2.0/24, 0.0.0.0/8, 240.0.0.0/4 }"

# Порты
client_ports = "{ 21, 123, 80, 443, 2443, 3128, 3129, 3389, 5190 }"
admin_ports = "{ 21, 25, 110, 123, 80, 443, 2443, 3128, 3129, 3389, 5190, 22, 3390 }"
pbx_udp = "{ 2727, 4520, 4569, 5036, 5060, 10000:20000 }"
pbx_tcp = "{ 5060 }"

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

# Определяем политику при блокировке пакетов
set block-policy drop
# Логируемый интерфейс
set loginterface $ext_if
# Максимальное количество записей в пуле отвечающем за нормализацию трафика (scrub)
# Максимальное количество вхождений в пул отвечающий за состояние таблицы состояний соединений (keep state)
set limit { frags 10000, states 10000 }
# Устанавливаем тип оптимизации
set optimization normal
# Игнорируем фильтрацию на кольцевом интерфейсе
set skip on lo0
# Нормализация всего входящего трафика на всех интерфейсах
scrub in all

#################################################################
# NAT & RDR
#################################################################

# NAT для Asterisk
nat on $ext_if from $pbx to any -> $ext_ip_pbx

# NAT  для локалки
nat on $ext_if from $lannet to any -> $ext_ip

# Пробрасываем порты на Asterisk.
rdr on $ext_if from any to $ext_ip_pbx -> $pbx

# Пробрасываем порты на почтовый сервер - smtp для всех.
rdr on $ext_if proto tcp from any to $ext_ip port smtp -> $mail

# Пробрасываем порты на почтовый сервер - pop3 для филиалов.
rdr on $ext_if proto tcp from $friends to $ext_ip port pop3 -> $mail

# Пробрасываем порты на почтовый сервер - https для всех.
rdr on $ext_if proto tcp from any to $ext_ip port https -> $mail

# Пробрасываем порты на виндовый терминальный сервер.
rdr on $ext_if proto tcp from any to $ext_ip port rdp -> $terminal

# Пробрасываем порты на General-server.
rdr on $ext_if proto tcp from any to $ext_ip port 3390 -> $gs port 3389

# Пробрасываем порты на web сервер.
#rdr on $ext_if proto tcp from any to $ext_ip port www -> $www

# Отправляем локальных интернетчиков на squid.
rdr on $int_if proto tcp from $lannet to any port www -> 127.0.0.1 port 3129

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

# Защита от спуфинга
antispoof quick for { lo0, $int_if, $ext_if }

# Блокируем всё
block log all

# Блокируем тех, кто лезет на внешний интерфейс с частными адресами
block drop in quick on $ext_if from $private_nets to any

# Разрешаем icmp
pass inet proto icmp icmp-type echoreq

# Разрешаем DNS для локалки
pass in on $int_if proto udp from $lannet to $bsd port domain

# Тестовый полный выход
pass in log on $int_if from any to any

# Выпускаем Asterisk
#pass in on $int_if from $pbx to any

# Выпускаем почтовик
#pass in log on $int_if proto tcp from $mail to any port smtp keep state

# Выпускаем админские сервисы
#pass in on $int_if proto tcp from $root to any port $admin_ports

# Выпускаем клиентске сервисы
#pass in log on $int_if proto tcp from $lannet to any port $client_ports

# Разрешаем нашему шлюзу полный выход с обоих интерфейсов
pass out on $ext_if from any to any
pass out on $int_if from any to any

################ Icoming ##################

# Разрешаем входящий ssh
pass in log on $ext_if proto tcp from any to $ext_ip port 22

# Разрешаем входящий smtp для всех
pass in on $ext_if proto tcp from any to $mail port smtp flags S/SA synproxy state

# Разрешаем входящий pop3 для филиалов
pass in on $ext_if proto tcp from $friends to $mail port pop3 flags S/SA synproxy state

# Разрешаем входящий https
pass in log on $ext_if proto tcp from any to $mail port https

# Разрешаем входящий rdp
pass in log on $ext_if proto tcp from any to $terminal port rdp flags S/SA synproxy state

# Разрешаем входящий rdp2
pass in log on $ext_if proto tcp from any to $gs port rdp flags S/SA synproxy state

# Разрешаем входящий Asterisk
pass in on $ext_if proto tcp from any to $pbx port $pbx_tcp flags S/SA keep state
pass in on $ext_if proto udp from any to $pbx port $pbx_udp keep state
Сейчас такие проблемы:
- не работают исходящие smtp, rdp (причем на вход они работают)
- не работает входящий https
хотя по логом происходит pass и блокировок нет.

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

rule 23/0(match): pass in on em0: 192.168.0.10.4066 > 77.88.21.89.25: [|tcp]
В какую сторону копать следует?
Так понимаю что пакеты проходят, но соединения не устанавливаются...
FreeBSD 7.1 RELEASE
Последний раз редактировалось $Alchemist 2009-03-13 14:31:25, всего редактировалось 1 раз.
Machines to Work,
People to Think.

Аватара пользователя
$Alchemist
сержант
Сообщения: 173
Зарегистрирован: 2008-06-26 13:38:17
Откуда: SPb
Контактная информация:

Re: PF - исходящий доступ

Непрочитанное сообщение $Alchemist » 2009-03-13 13:57:22

В таблице состояний откопал следующее:

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

# pfctl -ss | grep 77.88.21.89
all tcp 77.88.21.89:25 <- 192.168.0.10:4114       CLOSED:SYN_SENT
all tcp 192.168.0.10:4114 -> 95.161.24.130:57415 -> 77.88.21.89:25       SYN_SENT:CLOSED
Machines to Work,
People to Think.

alik
рядовой
Сообщения: 16
Зарегистрирован: 2009-02-12 14:47:32

Re: PF - исходящий доступ

Непрочитанное сообщение alik » 2009-03-13 14:25:34

Попробуй для начало
вместо этого:
# Пробрасываем порты на почтовый сервер - https для всех.
rdr on $ext_if proto tcp from any to $ext_ip port https -> $mail

вот это
https"{443, 8080}"
rdr pass on $ext_if proto tcp from any to $ext_ip port $https -> $mail
далее попробуй вместо https указать диапазон портов.
У меня как -то глюк был, не знаю из-за чего я с тех пор порты

Аватара пользователя
$Alchemist
сержант
Сообщения: 173
Зарегистрирован: 2008-06-26 13:38:17
Откуда: SPb
Контактная информация:

Re: PF - исходящий доступ

Непрочитанное сообщение $Alchemist » 2009-03-13 14:48:48

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

ЗЫ: Со шлюза тоже соединения не устанавливаются
Machines to Work,
People to Think.

alik
рядовой
Сообщения: 16
Зарегистрирован: 2009-02-12 14:47:32

Re: PF - исходящий доступ

Непрочитанное сообщение alik » 2009-03-13 14:56:04

пример
rdr pass on $ext_if proto tcp from any to $ext_if port {18421 6346} -> 192.168.10.12
у тебя там указан там внешний айпи, вместо него укажи интерфейс

Аватара пользователя
$Alchemist
сержант
Сообщения: 173
Зарегистрирован: 2008-06-26 13:38:17
Откуда: SPb
Контактная информация:

Re: PF - исходящий доступ

Непрочитанное сообщение $Alchemist » 2009-03-13 16:18:55

СЦУКО!!!!!
Пардон, господа :"":
Порты были закрыты у провайдера :st:
Machines to Work,
People to Think.