Страница 1 из 1
PF - исходящий доступ
Добавлено: 2009-03-10 12:41:25
$Alchemist
Пересел с 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".
А хотелось бы: разрешить весь исходящий трафик только с этого шлюза, разрешить клиентам на выход несколько портов и админам на выход еще кое-какие порты.
Re: PF - исходящий доступ
Добавлено: 2009-03-11 7:31:55
alik
попробуй применить quick правило
Re: PF - исходящий доступ
Добавлено: 2009-03-11 9:35:07
$Alchemist
Спасибо, догнал уже: на внешнем интерфейсе даем полный выход, а клиентов ограничиваем на внутреннем.
Re: PF - исходящий доступ
Добавлено: 2009-03-12 15:31:28
$Alchemist
Как, при наличии нескольких внешних адресов, вывести сеть под одним ip, а отдельный сервак под другим?
Делаю так:
Код: Выделить всё
nat on $ext_if from $pbx to any -> $ext_ip_pbx
nat on $ext_if from $lannet to any -> $ext_ip
но не пашет...
binat тоже не пашет =\
Re: PF - исходящий доступ
Добавлено: 2009-03-12 15:41:55
alik
Я тебя правильно понял???
у тебя несколько провайдеров???
ты хочешь у себя на роутере распределить канал, то есть, чтобы не которые из локалки ходили через ISP1 а другие через ISP2?????
так????
Re: PF - исходящий доступ
Добавлено: 2009-03-12 15:50:48
$Alchemist
Нет, у меня один провайдер и от него несколько внешних адресов.
Я хочу под одним адресом вывести один сервак, а все остальное под другим
Re: PF - исходящий доступ
Добавлено: 2009-03-12 18:32:25
$Alchemist
Работает вышеуказанная схема.
Просто у меня трафик через проксю шел, ip соответственно старый отображался.

Re: PF - исходящий доступ
Добавлено: 2009-03-13 5:28:05
alik
Ясно, идея хорошая.
Так ты говоришь с бинатом у тебя не вышло????
покажи свой конфиг, одна голова хорошо а две лучше, да и народ должен потянуться.
Люблю PF, однако гибкий он слишком.
Re: PF - исходящий доступ
Добавлено: 2009-03-13 10:37:01
$Alchemist
alik писал(а):
Так ты говоришь с бинатом у тебя не вышло????
C бинатом тоже вышло, проблема в прокси была, ну и в самом астериске, который я пробрасывал.
Сейчас все пашет. Рабочий конфиг если интересен - чуть позже кину.
Re: PF - исходящий доступ
Добавлено: 2009-03-13 10:42:21
alik
Буду рад твоему конфигу, если не сложно то и схему бы как нибудь описал.
Самому прийдется ставить скоро астерикс и.т.д
Вот думаю у тебя можно будет поучиться
Re: PF - исходящий доступ
Добавлено: 2009-03-13 13:33:30
$Alchemist
Код: Выделить всё
#################################################################
# Опции
#################################################################
# Интерфейсы
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
Re: PF - исходящий доступ
Добавлено: 2009-03-13 13:57:22
$Alchemist
В таблице состояний откопал следующее:
Код: Выделить всё
# 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
Re: PF - исходящий доступ
Добавлено: 2009-03-13 14:25:34
alik
Попробуй для начало
вместо этого:
# Пробрасываем порты на почтовый сервер - 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 указать диапазон портов.
У меня как -то глюк был, не знаю из-за чего я с тех пор порты
Re: PF - исходящий доступ
Добавлено: 2009-03-13 14:48:48
$Alchemist
Попробовал, не прокатило =\
Проблема скорее всего одна и связана с установкой соединений.
Помогите плз кто сталкивался, нужно хотябы smtp вывести...
ЗЫ: Со шлюза тоже соединения не устанавливаются
Re: PF - исходящий доступ
Добавлено: 2009-03-13 14:56:04
alik
пример
rdr pass on $ext_if proto tcp from any to $ext_if port {18421 6346} -> 192.168.10.12
у тебя там указан там внешний айпи, вместо него укажи интерфейс
Re: PF - исходящий доступ
Добавлено: 2009-03-13 16:18:55
$Alchemist
СЦУКО!!!!!
Пардон, господа
Порты были закрыты у провайдера
