pf и два внешних ip (freebsd)
Добавлено: 06 ноя 2010, 01:25
Постановка задачи
Допустим что у нас есть две сети
first.ru и second.ru которым соответствуют два почтовых и днс домена
для этих зон прописаны два mx
и
и теперь нам надо реализовать отправку через один релей базирующийся на freebsd который также исполняет роль шлюза для наших сеток
настройку релея описывать не буду (смотри тему) а вот настройку pf опишу
Решение
1. Лучше пересобрать ядро со следующими опциями
это нужно для работы очередей Altq если очереди вам не нужны то ядро можно не пересобирать (только работать будет медленнее)
2. Включаем pf в rc.conf
3. Настраиваем 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 и 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.настройку релея описывать не буду (смотри тему) а вот настройку 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