Прием и отправка почты по одному из 2 внешних интерфейсов

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

Модератор: terminus

Правила форума
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
psj
ефрейтор
Сообщения: 66
Зарегистрирован: 2007-10-29 13:44:50

Прием и отправка почты по одному из 2 внешних интерфейсов

Непрочитанное сообщение psj » 2008-03-24 15:00:10

Есть локальная сеть и 2 интернет канала. На шлюзе установлен файрвол pf. Необходимо принимать и отправлять почту по одному из каналов. Причем этот канал НЕ ЯВЛЯЕТСЯ шлюзом по умолчанию.
Роуетр:
[ root@rt.daycom.ru / ] # uname -a [ 12:57 ]
FreeBSD rt.daycom.ru 6.3-STABLE FreeBSD 6.3-STABLE #4: Thu Jan 31 09:15:57 MSK 2008 psj@rt.daycom.ru:/usr/obj/usr/src/sys/rt i386
Интерфейсы:
[ root@rt.daycom.ru / ] # ifconfig [ 12:57 ]
vr0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
options=8<VLAN_MTU>
inet 17.106.95.90 netmask 0xfffffff8 broadcast 17.106.95.95
inet 17.106.95.91 netmask 0xfffffff8 broadcast 17.106.95.95
ether 00:19:5b:83:60:e0
media: Ethernet autoselect (100baseTX <full-duplex>)
status: active
vr1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
options=8<VLAN_MTU>
inet 192.168.0.2 netmask 0xffffff00 broadcast 192.168.0.255
inet 10.0.0.2 netmask 0xffffff00 broadcast 10.0.0.255
ether 00:1c:f0:0b:b0:e9
media: Ethernet autoselect (100baseTX <full-duplex>)
status: active
vr2: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
options=8<VLAN_MTU>
inet 192.168.1.2 netmask 0xffffff00 broadcast 192.168.1.255
ether 00:19:21:56:a4:61
media: Ethernet autoselect (100baseTX <full-duplex>)
status: active
plip0: flags=108810<POINTOPOINT,SIMPLEX,MULTICAST,NEEDSGIANT> mtu 1500
pfsync0: flags=0<> mtu 2020
syncpeer: 224.0.0.240 maxupd: 128
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x6
inet6 ::1 prefixlen 128
inet 127.0.0.1 netmask 0xff000000
pflog0: flags=141<UP,RUNNING,PROMISC> mtu 33208
tun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1500
inet 192.168.2.1 --> 192.168.2.2 netmask 0xffffffff
Opened by PID 1273
Интерфей vr2 - является шлюзом по умолчанию.
rc.conf:
[ root@rt.daycom.ru / ] # cat /etc/rc.conf [ 12:58 ]
font8x16="cp866b-8x16"
font8x14="cp866-8x14"
font8x8="cp866-8x8"
keymap="ru.koi8-r.shift"
keyrate="fast"
mousechar_start="3"
scrnmap="koi8-r2cp866"
#=============================================================================
hostname="rt.daycom.ru"
ifconfig_vr0="inet 17.106.95.90 netmask 255.255.255.248"
ifconfig_vr0_alias0="inet 17.106.95.91 netmask 255.255.255.248"
ifconfig_vr1="inet 192.168.0.2 netmask 255.255.255.0"
ifconfig_vr1_alias0="inet 10.0.0.2 netmask 255.255.255.0"
ifconfig_vr2="inet 192.168.1.2 netmask 255.255.255.0"
defaultrouter="192.168.1.1"
#=============================================================================
pf_enable="YES" # Включить PF (Подгрузить модуль, если требуется)
pf_rules="/etc/pf.conf" # Откуда подгружать правила для pf
pf_flags="" # дополнительные флаги для управляющей программы pfctl(8)
pflog_enable="YES" # запуск pflogd(8) (система журналирования)
pflog_logfile="/var/log/pflog" # где pflogd должен хранить журнал
pflog_flags="" # дополнительные флаги для pflogd
#=============================================================================
# Синхронизация времени
ntpdate_enable="YES"
ntpdate_flags="ntp.psn.ru"
ntpd_enable="YES"
ntpd_flags=" -c /etc/ntp.conf -l /var/log/ntpd.log -p /var/run/ntpd.pid"
#=============================================================================
gateway_enable="YES"

sshd_enable="YES"

mysql_enable="YES"

clamav_clamd_enable="YES"
clamav_freshclam_enable="YES"
#=============================================================================
# DNS
named_enable="YES"
named_flage="-u bind -g bind"

dhcpd_enable="YES"
dhcpd_conf="/usr/local/etc/dhcpd.conf"
dhcpd_ifaces="vr1" # на каком интерфейсе крутится DHCP

exim_enable="YES"
spamd_enable="YES"
spamd_flags="-u spamd -H /var/spool/spamd"
sendmail_enable="NONE"
courier_authdaemond_enable="YES"
courier_imap_imapd_enable="YES"
courier_imap_pop3d_enable="YES"

apache22_enable="YES"
apache22_http_accept_enable="YES"

openvpn_enable="YES" # YES or NO
openvpn_if="tun" # driver(s) to load, set to "tun", "tap" or "tun tap"
openvpn_configfile="/usr/local/etc/openvpn/server.conf" # --config file
openvpn_dir="/usr/local/etc/openvpn" # --cd directory

squid_enable="YES"

rpcbind_enable="YES"
nfs_server_enable="YES"
nfs_client_enable="YES"
Ну и самое главное - вот такой файрвол:
[ root@rt.daycom.ru / ] # cat /etc/pf.conf [ 13:02 ]
#Внешние и внутренний интерфейсы.
#
ext_if_a = "vr0" #первый провайдер
ext_if_b = "vr2" #второй провайдер
int_if = "vr1" #локалка
int_if_vpn = "tun0" # vpn
if_lo = "lo"

#Шлюзы для каналов.
#
ext_gw_a = "17.106.95.89" #для первого провайдера
ext_gw_b = "192.168.1.1" #для второго провайдера
net = "192.168.0.0/24" #локалка
#TCP/UDP сервисы, обслуживаемые маршрутизатором, то к чему имеется доступ на внешних интерфейсах
#
tcp_svc = "domain, auth, http, ntp, ssh" #как пример, что то нужно вписать иначе будет биг ошибка
udp_svc = "domain, ntp, ssh" #аналогично, 1194 - vpn
udp_vpn = "1194"
# Из интернета на почтовый сервер
tcp_mail ="smtp, pop3"
# закрытые порты из внутренней сети в интернет
tcp_block_int ="smtp"

mail_server ="17.106.95.91"
router ="17.106.95.90"

#Создаем таблицу доверенных smtp-севреров
table <my_smtp> { $mail_server, 194.67.23.111, 195.161.174.129}

set skip on lo0

# нормализация трафика
scrub in

#Натим, важный момент, именно тут определяется кого куда пускать
#Синтаксис ната, грубо говоря, таков: nat on _интерфейс_ from _откуда_ to _куда_ -> _интерфейс_или_ип_адрес
#
nat on $ext_if_b from {$net} -> ($ext_if_b:0)
# Пробрасываем порты из внутренней сети на SQUID
#
rdr pass on $int_if proto tcp to port http -> 127.0.0.1 port 3128
#Разрешаем сети ходить в интернет, всё остальное блокируем
#
block in on { $ext_if_a $ext_if_b }
block return-rst in on { $ext_if_a $ext_if_b } proto tcp
pass out on { $ext_if_a $ext_if_b } keep state

#Блокируем все исходящие smtp-запросы
block in log quick on $int_if proto { tcp, udp } from $net to !<my_smtp> port { $tcp_block_int }

#Исходящие пакеты в канал, соответствующий адресу источника. Здесь и начинается policy
#
pass out route-to ($ext_if_a $ext_gw_a) from ($ext_if_a) to !(self:network) keep state
pass out route-to ($ext_if_b $ext_gw_b) from ($ext_if_b) to !(self:network) keep state
# Пускаем vpn на роутер
#
pass out on $ext_if_b reply-to ($ext_if_a $ext_gw_a) inet proto udp from $router port { $udp_vpn } to any keep state
pass out on $ext_if_b route-to ($ext_if_a $ext_gw_a) inet proto udp from $router port { $udp_vpn } to any keep state
pass in on $ext_if_a reply-to ($ext_if_a $ext_gw_a) inet proto udp from any to $router port { $udp_vpn } keep state
#А вот policy для входящих пакетов на внешние интерфейсы
#
pass in on $ext_if_a reply-to ($ext_if_a $ext_gw_a) proto udp to $router port { $udp_svc } keep state
pass in on $ext_if_a proto udp from ($ext_if_a:network) to $router port { $udp_svc } keep state
#
pass in on $ext_if_a reply-to ($ext_if_a $ext_gw_a) proto tcp to port { $tcp_svc } flags S/SA keep state
pass in on $ext_if_a proto tcp from ($ext_if_a:network) to port { $tcp_svc } flags S/SA keep state
#
pass in on $ext_if_a reply-to ($ext_if_a $ext_gw_a) proto icmp to $router keep state
pass in on $ext_if_a route-to ($ext_if_a $ext_gw_a) proto icmp to $router keep state
pass in on $ext_if_a proto icmp from ($ext_if_a:network) to $router keep state
# Пускаем почту на почтовый сервер
#
pass in on $ext_if_a reply-to ($ext_if_a $ext_gw_a) proto tcp to $mail_server port { $tcp_mail } flags S/SA keep state
pass in on $ext_if_a proto tcp from ($ext_if_a:network) to $mail_server port { $tcp_mail } flags S/SA keep state
#
pass in on $ext_if_b reply-to ($ext_if_b $ext_gw_b) proto udp to port { $udp_svc } keep state
pass in on $ext_if_b proto udp from ($ext_if_b:network) to port { $udp_svc } keep state
#
pass in on $ext_if_b reply-to ($ext_if_b $ext_gw_b) proto tcp to port { $tcp_svc } flags S/SA keep state
pass in on $ext_if_b proto tcp from ($ext_if_b:network) to port { $tcp_svc } flags S/SA keep state
# Выпускаем почту с нашего сервера в инет
#
pass out on $ext_if_a reply-to ($ext_if_a $ext_gw_a) proto tcp from $mail_server to any port { $tcp_mail } flags S/SA
pass out on $ext_if_a route-to ($ext_if_a $ext_gw_a) proto tcp from $mail_server to any port { $tcp_mail } flags S/SA
pass out on $ext_if_b reply-to ($ext_if_a $ext_gw_a) proto tcp from $mail_server to any port { $tcp_mail } flags S/SA
pass out on $ext_if_b route-to ($ext_if_a $ext_gw_a) proto tcp from $mail_server to any port { $tcp_mail } flags S/SA
# По внутреннему интерфейсу и vpn пропускаем всё и везде
#
pass on $int_if all keep state
pass on $int_if_vpn all keep state
Вроде как всё правильно - НО:
У провайдера есть реальный адрес который дается динамически. Динамичаски его получает шлюз по умолчанию. А мы попадаем в блак-листы с этим шлюзом! Т.е. вся почта с моего сервера уходит через шлюз по умолчанию. А надо чтобы она уходила через другой интерфейс.
И еще - не могу снаружи пропинговать свой mail сервер.
Заранее благодарен за любую помощь!
В правильно заданном вопросе 80% ответа

Хостинговая компания 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/
Выделенные сервера, Россия, Москва, от 2460 рублей (8 CPU, 8Gb RAM, 2x500Gb HDD, RAID 3ware 9750):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Жека
проходил мимо

Re: Прием и отправка почты по одному из 2 внешних интерфейсов

Непрочитанное сообщение Жека » 2008-03-27 16:59:16

Если речь о том чтобы пакеты уходили не через шлюз по умолчанию
то решение есть

Аватара пользователя
psj
ефрейтор
Сообщения: 66
Зарегистрирован: 2007-10-29 13:44:50

Re: Прием и отправка почты по одному из 2 внешних интерфейсов

Непрочитанное сообщение psj » 2008-03-27 17:31:46

Жека писал(а):Если речь о том чтобы пакеты уходили не через шлюз по умолчаниюто решение есть
Конечно уже есть. Собственно три дня понадобилось, зато САМ разобрался :D
Если кому интересно - могу скинуть конфиг файрвола
В правильно заданном вопросе 80% ответа

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35071
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: Прием и отправка почты по одному из 2 внешних интерфейсов

Непрочитанное сообщение Alex Keda » 2008-03-27 19:49:49

клади.
поглядим
Убей их всех! Бог потом рассортирует...

Аватара пользователя
psj
ефрейтор
Сообщения: 66
Зарегистрирован: 2007-10-29 13:44:50

Re: Прием и отправка почты по одному из 2 внешних интерфейсов

Непрочитанное сообщение psj » 2008-03-28 9:11:15

lissyara писал(а):клади.
поглядим
Вчера здесь на форуме уже выложил
http://forum.lissyara.su/viewtopic.php? ... 969#p61969
В правильно заданном вопросе 80% ответа