Страница 1 из 1

pf и два внешних ip (freebsd)

Добавлено: 06 ноя 2010, 01:25
flashdeath
Постановка задачи
Допустим что у нас есть две сети
first.ru и second.ru которым соответствуют два почтовых и днс домена
для этих зон прописаны два mx

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

in mx 10 mail.first.ru.
mail.first.ru. A 1.1.1.1
и

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

in mx 10 mail.second.ru.
mail.second.ru. A 2.2.2.2.
и теперь нам надо реализовать отправку через один релей базирующийся на freebsd который также исполняет роль шлюза для наших сеток
настройку релея описывать не буду (смотри тему) а вот настройку pf опишу

Решение
1. Лучше пересобрать ядро со следующими опциями

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

#PF
device          pf
device          pflog
device          pfsync

#ALTQ
options         ALTQ
options         ALTQ_CBQ        # Class Bases Queueing
options         ALTQ_RED        # Random Early Detection
options         ALTQ_RIO        # RED In/Out
options         ALTQ_HFSC       # Hierarchical Packet Scheduler
options         ALTQ_CDNR       # Traffic conditioner
options         ALTQ_PRIQ       # Priority Queueing
options         ALTQ_NOPCC      # Required for SMP build
options         ALTQ_DEBUG

это нужно для работы очередей Altq если очереди вам не нужны то ядро можно не пересобирать (только работать будет медленнее)

2. Включаем pf в rc.conf

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

#### Packet Filter

pf_enable="YES"
pf_flags=""
pf_rules="/etc/pf.conf"
pflog_enable="YES"
pflog_flags=""
pflog_logfile="/var/log/pflog"


3. Настраиваем pf.conf
Для начала его можно просто скопировать

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

cp /usr/src/tools/tools/tinybsd/conf/firewall/etc/pf.conf  /etc/pf.conf 
определяемся с макросами
первый интерфейс em0 принадлежит first.ru и имеет ip 1.1.1.1 и имеет гейт 1.1.1.254, он же дефолт гейтвей
второй интерфейс em1 принадлежит second.ru и имеет ip 2.2.2.2 и имеет гейт 2.2.2.1
затем открываем его на редактирование (я исполльзую vim но вам возможно удобней ee или nano)

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

#интерфейс сети first.ru
ext1="em0"
#интерфейс сети second.ru
ext2="em1"
# ip сети  first.ru
first="1.1.1.1"
# ip сети  second.ru
second="2.2.2.2"
# ip сети  second.ru
gw2="2.2.2.1"
# устанавливаем лимиты соединений
set limit { states 100000, frags 100000, src-nodes 100000 }
# устанавливаем политику оптимизации правил
set ruleset-optimization basic
# включаем логирование
set loginterface pflog0
# устанавливаем тип оптимизации
set optimization normal
# устанавливаем политику DROP для заблокированых соединений
set block-policy drop
# не приминяем правила для локального интерфейса
set skip on lo0
#set require-order yes
#set fingerprints "/etc/pf.os"
# Normalization: reassemble fragments and resolve or reduce traffic ambiguities.
scrub in all fragment reassemble

#запрещаем и логируем все входящие соединения
block in log all
#разрешаем и логируем все исходящие
pass out log all

#рарешаем ssh на em0
pass in log on $ext1 proto tcp from any port 22 flags S/SA keep state
#рарешаем smtp на em0
pass in log on $ext1 proto tcp from any port 25 flags S/SA keep state
#рарешаем smtp на em1 и возвращаем пакет идущий отправителю через тот же интерфейс через который он пришел
pass in on $ext2 reply-to ( $ext2 $gw2 ) proto tcp from any to $second  port 25
Вот собственно все остальное по усмотрению