Проблема с rdr в pf

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

Модератор: terminus

Правила форума
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
kron
ефрейтор
Сообщения: 64
Зарегистрирован: 2008-10-07 13:02:36

Проблема с rdr в pf

Непрочитанное сообщение kron » 2009-07-29 12:28:32

Господа возникла такая проблема, стоит роутер на FreBSD 7.0, работает давольно давно и продуктивно, но понадобилось поднять МТА, решил поднять postfix+dovecot с авторизацией в ldap, поднять поднял, внутри сети пашет, настраиваю редирект в pf, но грабли в том что письма внутрь не проходят, ситуация такая:
роутер:192.168.217.254
постфикс: 192.168.217.252
со инета telnet не может достучаться
Настройки в pf

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

mail_srv="192.168.217.252"
rdr on $ext_if inet proto tcp from any to $external_addr port 995 -> 192.168.217.252 port 995
rdr on $ext_if inet proto tcp from any to $external_addr port 993 -> 192.168.217.252 port 993
rdr on $ext_if inet proto tcp from any to $external_addr port 25 -> $mail_srv port 25
rdr on $ext_if inet proto tcp from any to $external_addr port 110 -> $mail_srv port 110
pass in on $ext_if inet proto tcp from any to $mail_srv port { 25, 110, 993, 995 } keep state
В логах pf встречается такое

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

1. 609517 IP 192.168.217.252.25 > 87.237.112.7.55296:  tcp 24 [bad hdr length 8 - too short, < 20]
3. 198259 IP 192.168.217.252.25 > 87.237.112.7.55296:  tcp 24 [bad hdr length 8 - too short, < 20]
2. 999918 IP 192.168.217.252.25 > 87.237.112.7.55296:  tcp 24 [bad hdr length 8 - too short, < 20]
6. 000174 IP 192.168.217.252.25 > 87.237.112.7.55296:  tcp 16 [bad hdr length 16 - too short, < 20]
Подскажите где грабли.
Тормоза долго не живут, они стираются.

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

Аватара пользователя
kron
ефрейтор
Сообщения: 64
Зарегистрирован: 2008-10-07 13:02:36

Re: Проблема с rdr в pf

Непрочитанное сообщение kron » 2009-07-29 14:09:10

Вопрос несколько снялся, но проблема не решилась, проброс идет, тока все равно косяк где-то в правилах, но это не стоит обсуждения
Тормоза долго не живут, они стираются.

Аватара пользователя
kron
ефрейтор
Сообщения: 64
Зарегистрирован: 2008-10-07 13:02:36

Re: Проблема с rdr в pf

Непрочитанное сообщение kron » 2009-07-29 15:40:33

Так и не смог сам решить, редирект отрабатывает, а вот на возврате затык, ни кто с таким не встречался?
Тормоза долго не живут, они стираются.

Аватара пользователя
ban
мл. сержант
Сообщения: 145
Зарегистрирован: 2009-07-22 22:36:29
Откуда: г.Волжский Волг. обл.

Re: Проблема с rdr в pf

Непрочитанное сообщение ban » 2009-07-29 21:05:59

что есть $external_addr ?

в руки тебе tcpdump, использовать можно например так:
# tcpdump -tn -i <твой интерфейс> port 995

задачи:
1) убедиться, что на $ext_if пакеты приходят на вышеозвученные порты
2) убедиться, что пакеты доходят на внутренний интерфейс роутера по тем же портам (если не доходят, то правило pass на внешнем)
3) если на внутренний интерфейс пакеты приходят, значит надо убедиться что они из него Выходят (если не выходят, то правило pass на внутреннем)

весь конфиг покажи
кто никуда не торопится, тот везде успевает

GreenT
проходил мимо

Re: Проблема с rdr в pf

Непрочитанное сообщение GreenT » 2009-07-29 21:45:51

попробуй что нибудь вроди

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

mail_srv="{192.168.217.252}"
mail_srv_port = "{995,993,25,110}"
rdr pass on $ext_if  inet proto tcp from any to port $mail_srv_port -> $mail_srv
во всяком случае у меня такие правила работают

Аватара пользователя
kron
ефрейтор
Сообщения: 64
Зарегистрирован: 2008-10-07 13:02:36

Re: Проблема с rdr в pf

Непрочитанное сообщение kron » 2009-07-30 7:52:25

Пакеты доходят и выходят обратно, но роутер их в инет не пущает, а по правилу keep state должен. А весь конфиг страниц на 5 много разрешений для разных ПК.

Правила попробую отпишусь
Тормоза долго не живут, они стираются.

Аватара пользователя
kron
ефрейтор
Сообщения: 64
Зарегистрирован: 2008-10-07 13:02:36

Re: Проблема с rdr в pf

Непрочитанное сообщение kron » 2009-07-30 10:15:20

Правила не помогли, собственно уже не знаю даже куда рыть, уже pf в ядро загрузил, а не модулем. Проблему решить не могу.
# Internet
ext_if="re1"
external_addr="217.195.xxx.xxx"

# Local network
int_if="re0"
internal_addr="192.168.xxx.xxx"
internal_net="192.168.xxx.0/24"

# Servers
spbfs="192.168.xxx.xxx"
mail_srv="192.168.xxx.xxx"
mail_srv_port="{ 25, 110, 993, 995 }"

table <me> const { $external_addr, $internal_addr }

# Redirect table
rdr on $int_if inet proto tcp from $internal_net to any port { 80, 8080 } -> 127.0.0.1 port 3128
rdr on $ext_if inet proto tcp from any to $external_addr port $mail_srv_port -> $mail_srv

# Block
block in log all
block on $ext_if from <sshblocked> to <me>

# Update
pass in on $int_if inet proto tcp from { $spbfs, $mail_srv } to any keep state

# ICMP
pass in inet proto icmp from any to any keep state

#ICQ, Jabber, Mail agent
pass in on $int_if inet proto udp from $internal_net to any port 5190 keep state
pass in on $int_if inet proto tcp from $internal_net to any port 5190 keep state

# Mail
pass in on $int_if inet proto tcp from $internal_net to $mail_ru port { 25, 110, 135, 143, 465, 993, 995 } keep state
pass in on $int_if inet proto tcp from $internal_net to $list_ru port { 25, 110, 135, 143, 465, 993, 995 } keep state
pass in on $int_if inet proto tcp from $internal_net to $smtp_mail port 25 keep state
#pass in on $ext_if inet proto tcp from any to $external_addr port { 25, 110, 143, 465, 993, 995 } keep state
pass in on $int_if inet proto tcp from $internal_net to $argus port { 25, 110 } keep state
pass in on $int_if inet proto tcp from $internal_net to $list2_ru port { 25, 110, 135, 143, 465, 993, 995 } keep state
pass in on $int_if inet proto tcp from $internal_net to { $pop_mail, $smtp_mail } port { 25, 110, 135, 143, 465, 993, 995 } keep state
pass in on $ext_if inet proto tcp from any to $mail_srv port { 25, 110, 993, 995 } keep state
#pass in on $int_if inet proto tcp from $mail_srv to any port { 25, 110, 993, 995 } keep state
# DNS, DHCP
pass in on $int_if inet proto tcp from $internal_net to $internal_addr port 389 keep state
pass in on $int_if inet proto udp from $internal_net to $internal_addr port 389 keep state
pass in on $int_if inet proto udp from $internal_net to $internal_addr port { 53, 67, 68, 88 } keep state
pass in on $int_if inet proto tcp from $internal_net to $internal_addr port { 53, 67, 68, 88 } keep state
pass in on $ext_if inet proto udp from any to $external_addr port 53 keep state

# Samba
pass in on $int_if inet proto udp from $internal_net to $internal_addr port { 137, 138 } keep state
pass in on $int_if inet proto tcp from $internal_net to $internal_addr port { 139, 445 } keep state

# Unlim
pass in on $int_if from { $my_comp, $id_comp, $gd_comp, $gb_comp, $mail_srv } to any keep state
pass in on $int_if from $internal_net to $internal_addr keep state

# out ext
pass out from <me> to any keep state
Это основные конфиги, все что связано с мылом оставил как есть, может там у меня где ошибка, на неописанные имена не обращайте внимания они описаны, но сюда не выложены
Тормоза долго не живут, они стираются.

GreenT
проходил мимо

Re: Проблема с rdr в pf

Непрочитанное сообщение GreenT » 2009-07-30 10:54:19

во первых я бы написал

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

rdr pass on $ext_if inet proto tcp from any to $external_addr port $mail_srv_port -> $mail_srv
именно со словом pass

во вторых
если роутер не выпускает попробуй вторым правилом написать

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

pass out keep state

GreenT
проходил мимо

Re: Проблема с rdr в pf

Непрочитанное сообщение GreenT » 2009-07-30 11:24:49

еще можно воспользоваться

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

tcpdump -e -t -n -i pflog0 port 25 
и посмотреть что где и каким правилом блокируется

Аватара пользователя
kron
ефрейтор
Сообщения: 64
Зарегистрирован: 2008-10-07 13:02:36

Re: Проблема с rdr в pf

Непрочитанное сообщение kron » 2009-07-30 14:10:53

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

rule 0/0(match): block in on re0: 192.168.217.252.25 > 77.241.39.246.62394: [|tcp]
Блочит вот так, тока хз чего ему не хватает, это уже пакет в ответ посланный на запрос, я уже изменил праило что пускать эту тачку во вне только по этим портам, но все равно блочит

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

pass in on $int_if inet proto tcp from $mail_srv to any port { 25, 110, 993, 995 } keep state

GreenT
проходил мимо

Re: Проблема с rdr в pf

Непрочитанное сообщение GreenT » 2009-07-30 14:30:29

такого

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

rule 0/0(match)
я честно говоря не видел, но понятно что блокирует правило номер ноль, полный список всех правил можно увидеть введя команду

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

pfctl -sr

GreenT
проходил мимо

Re: Проблема с rdr в pf

Непрочитанное сообщение GreenT » 2009-07-30 14:44:02

В догонку
я бы рекомендовал начинать секцию фильтрации с

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

anchor "ftp-proxy/*"
block log(all) all
pass out log keep state
pass in log(all) inet proto icmp all icmp-type $icmp_types keep state
и дальше писать правила используя вложенные списки и макросы т.к. конструкции вида

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

{ 25, 110, 143, 465, 993, 995 }
затрудняют понимание.

Аватара пользователя
ban
мл. сержант
Сообщения: 145
Зарегистрирован: 2009-07-22 22:36:29
Откуда: г.Волжский Волг. обл.

Re: Проблема с rdr в pf

Непрочитанное сообщение ban » 2009-07-30 16:14:31

если проблема пока не решена, то разъясни
у тебя на данный момент пакеты не проходят:
1) [откуда] - [через что] - [куда]
2) на основании каких правил (из тех что выложены) они должны двигаться по-твоему
кто никуда не торопится, тот везде успевает