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

Непонятное поведение PF

Добавлено: 2009-09-04 8:32:10
newUser
Доброго времени суток всем жаждущих знаний и их распространений,

Столкнулся с непонятным поведением PF (пока на него грешу),
Изначально подключил провайдера 2 (222.222.222.222), настроил PF, все как надо работало, затем подключил провайдера 1 (111.111.111.111) и сервер перевел на боевое дежурство (постепенная миграция с линукса), После чего пакетный фильтр перестал правильно работать:
Симптомы:
  • например, из интернета пробегаясь сканером по своим адресам на адрес 111.111.111.111 видит что нужные порты открыты (причем раз на раз не приходится, то есть 8080, то его нету в списке открытых, остальные норм) и слушаются (телнетом коннект нормальный), но например ssh, ftp, pop, и т.д. (т.е. все что надо) клиентами не пускает к себе.
  • сканирование адреса 222.222.222.222 выдает что слушается только порт 21, но также не пускает (есть подозрение, потому что defaultroute указывает на другой канал, хотя в линуксе так работало).
  • из офиса слушаю почтовый трафик (порт 25), ПФ говорит, что соединения принимаются, однако почтовик не реагирует
  • из локалки тоже беда, например на проксю (также и остальные службы) блокирует входящие соединения, так что при серфинге, если сразу страница не открылась, то после нескольких рефрешов может и загрузиться (и то не полностью).
  • В данное время приходится отключать PF, чтобы можно было работать
Система:
FreeBSD myhost.mydomain.ru 7.2-RELEASE-p2 FreeBSD 7.2-RELEASE-p2 #1 ядро патченное на предмет MPPC-компрессии (кажется, вообщем что-то с впн)

Привожу pf.conf

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

#
# DEFINE MACROS
#

# defaultroute является шлюз провайдера 1 (второй сам никак не активируется (еще не делал))

#IFACE_ADSL="rl0"		# Работает в режиме моста для пров. 1

IFACE_OFFICE="ale0"		# Локалка
IFACE_TELES="tun0"		# Провайдер 1 (основной)
IFACE_ENFORT="vr1"		# Провайдер 2 (резервный)
IFACE_ORENVPN="vr0"		# VPN силами провайдера 2
IFACE_LOOPBACK="lo0"	
IFACE_ME="{" $IFACE_OFFICE $IFACE_TELES $IFACE_ENFORT $IFACE_ORENVPN $IFACE_LOOPBACK $IFACE_MYVPN "}"
IFACE_WAN="{" $IFACE_ENFORT $IFACE_TELES  "}"

LAN_LOCALHOST="127.0.0.0/8"
LAN_REGION="192.168.10.0/24"
LAN_ORENVPN="172.16.0.0/16"		# VPN силами MPD5 здесь же
#LAN_MYVPN="192.168.10.0/24"
LAN_WORLD="{ !10.0.0.0/8 !127.0.0.0/8 !169.254.0.0/16 !192.168.0.0/24 !172.16.0.0/20 !220.0.0.0/24 !224.0.0.0/24 !255.255.255.255/0 }"
#LAN_WORLD="{ !10.0.0.0/8 !127.0.0.0/8 !169.254.0.0/16 !192.168.0.0/24 !172.16.0.0/20 !220.0.0.0/24 !224.0.0.0/24 !255.255.255.255/0 !222.222.222.222 !111.111.111.111 }"
LAN_ANY="any"
LAN_PRIVATE_PUBLIC="{ 10.0.0.0/8 127.0.0.0/8 169.254.0.0/16 192.168.0.0/24 172.16.0.0/20 220.0.0.0/24 224.0.0.0/24 255.255.255.255/0 }"
#L1AN_OFFICE="192.168.0.0/24"

IP_TELES="111.111.111.111"
IP_ENFORT="222.222.222.222"
IP_LOCALHOST="127.0.0.1"
IP_LOOPBACK="127.0.0.1"
IP_OFFICE0="192.168.0.1"
IP_OFFICE1="192.168.0.4"
IP_OFFICE2="192.168.0.6"
IP_OFFICE="{" $IP_OFFICE0 $IP_OFFICE1 $IP_OFFICE2 "}" # Алиасы
#IP_REGION="192.168.10.1"
IP_MYVPN="192.168.10.1"
IP_ORENVPN="172.16.35.78"
IP_INET="{" $IP_TELES $IP_ENFORT "}"
IP_ME="{" $IP_TELES $IP_ENFORT $IP_LOCALHOST $IP_OFFICE0 $IP_OFFICE1 $IP_OFFICE2 $IP_MYVPN "}"
IP_GW="192.168.0.1"
#IP_DNS_SLAVE="ns.esoo.ru"
IP_SERVER1C="192.168.0.99"
IP_MAIL=$IP_GW

IP_ADMIN_HOME="{ 333.333.0.0/16 }"

LAN_OFFICE="{ 192.168.0.0/24 !192.168.0.1 }"
LAN_OFFICE_SERVICE="{" $IP_MAIL $IP_SERVER1C $IP_GW  "}"

port_icmp_types="{ echoreq, unreach }"

port_tcp_office="{ 20, 21, 22, 25, 80, 110, 143, 1723, 3128, 5222, 5223, 45111><45499 }"
port_tcp_orenvpn="{ 20, 21, 22, 80, 110, 1723, 3128, 5222, 5223, 45111><45499 }"
port_tcp_myvpn="{ 22, 80, 5222 }"

#port_tcp_w1orld="{ 20, 21, 22, 25, 110, 143, 1723, 45111><45499 }"
port_tcp_world="{ 20, 21, 22, 25, 53, 1723, 8080, 45112><45500 }"
port_tcp_dns="{ 53, 953 }"
port_tcp_mail="{ 10011 }"
port_tcp_lanout="{ 20, 21, 22, 25, 53, 80, 110, 443 }"
port_tcp_brute="{ 22 }"
port_tcp_mailspam="25000"
port_tcp_forproxy="{ 80, 8080 }"
port_tcp_proxy="3128"
port_udp_world="53"

port_tcp_vpn="1723"

port_udp_office="53"
port_udp_orenvpn="53"
port_udp_myvpn="53"

port_tcp_to_server1c="3389"
port_tcp_proxy="3128"
port_tcp_to_proxy="{ 80 8080 8081 8082 8083 8084 8085 8086 8087 8088 8089 }"

list_net_nonat="{ 0.0.0.0/8 10.0.0.0/8 127.0.0.0/8 192.168.0.0/16 169.254.0.0/16 172.16.0.0/16 224.0.0.0/4 240.0.0.0/4 255.255.255.255 }"

table_orenvpn="<table_orenvpn>"
table_myvpn="<table_myvpn>"
table_privatenets="<table_privatenets>"
table_admins="<table_admins>"
table_myip="<table_myip>"
table_blockin="<table_blockin>"
table_privatenetsalien="<table_prvnetsalien>"
table_brute="<table_bruteforce>"
table_mailspam="<table_mailspam>"


set limit table-entries 20000000

#
# DEFINE TABLES
#

table $table_orenvpn const file "/root/scripts/pf/tables/orenvpn.ip"
table $table_myvpn persist file "/root/scripts/pf/tables/myvpn.ip"
table $table_privatenets const file "/root/scripts/pf/tables/private.net"
table $table_admins const file "/root/scripts/pf/tables/admins.ip"
table $table_myip const file "/root/scripts/pf/tables/myaddr.ip"
table $table_blockin file "/root/scripts/pf/tables/blockin.ip"
table $table_privatenetsalien file "/root/scripts/pf/tables/alien_private.net"
table $table_brute persist file "/root/scripts/pf/tables/bruteforce.ip"
table $table_mailspam persist file "/root/scripts/pf/tables/mailspam.ip"
#
# DEFINE OPTIONS
#

# Block all inputs connections
#
#

set block-policy drop

#scrub in all fragment reassemble random-id


#@@@@@@@@@@@@@@@@@@@@@@@@@@@
#
# REDIRECTIONS
#

#@@@@@@@@@@@@@@@@@@@@@@@@@@@
#
# NETWORK ADDRESS TRANSLATIONS
#

no nat on $IFACE_ENFORT from $LAN_OFFICE to $list_net_nonat
nat pass log on $IFACE_ENFORT from $LAN_OFFICE to $LAN_ANY -> $IP_ENFORT
nat pass log on $IFACE_TELES from $LAN_OFFICE to $LAN_ANY -> $IP_TELES
nat pass log on $IFACE_OFFICE from $table_myvpn to $LAN_OFFICE -> $IP_OFFICE
#nat pass log on $IFACE_OFFICE from $IP_OFFICE to $LAN_ANY -> $IP_INET
#nat pass log on $IFACE_ENFORT from $table_myvpn to $LAN_ANY -> $IP_ENFORT
#nat pass log on $IFACE_OFFICE from $table_myvpn to $LAN_OFFICE -> $IP_OFFICE
#nat pass log from $LAN_OFFICE to $table_myvpn -> $IP_MYVPN

#@@@@@@@@@@@@@@@@@@@@@@@@@@@
#
# REDIRECTIONS
#
# Redirect ports
# --------------

rdr-anchor "myvpn/*" from $LAN_MYVPN to any
#rdr on $IFACE_ENFORT proto tcp from $IP_ADMIN_HOME to $IP_ENFORT port 3389 -> $IP_SERVER1C port 3389
#rdr on $IFACE_OFFICE proto tcp from $LAN_OFFICE to $IP_OFFICE port 3389 -> $IP_SERVER1C port 3389

rdr on $IFACE_OFFICE proto tcp from $IP_OFFICE to $LAN_WORLD port $port_tcp_forproxy -> $IP_OFFICE port $port_tcp_proxy
no rdr on $IFACE_OFFICE proto tcp from $LAN_OFFICE to $IP_OFFICE port $port_tcp_forproxy
rdr on $IFACE_OFFICE proto tcp from $LAN_OFFICE to $LAN_WORLD port $port_tcp_forproxy -> $IP_OFFICE port $port_tcp_proxy

#@@@@@@@@@@@@@@@@@@@@@@@@@@@
#
# FILTERING
#

block in log all
block out log all

block in quick from $LAN_ANY os NMAP

set skip on { $IFACE_LOOPBACK }

pass log from $IP_ME to $IP_ME keep state

#block in log quick proto tcp from $table_brute to $IP_INET port $port_tcp_brute
#block in log quick proto tcp from $table_mailspam to $IP_INET port $port_tcp_mailspam

#pass in log quick on $IFACE_ENFORT proto { tcp, udp } to $IP_ENFORT port $port_tcp_brute keep state ( max-src-conn 3, max-src-conn-rate 3/20, overload $table_brute flush global )
#pass in log quick on $IFACE_TELES proto { tcp, udp } to $IP_TELES port $port_tcp_brute keep state ( max-src-conn 3, max-src-conn-rate 3/20, overload $table_brute flush global )

pass in log quick on $IFACE_ENFORT proto { tcp, udp } to $IP_ENFORT port $port_tcp_mailspam keep state ( max-src-conn 4, max-src-conn-rate 3/20, overload $table_mailspam flush global )
pass in log quick on $IFACE_TELES proto { tcp, udp } to $IP_TELES port $port_tcp_mailspam keep state ( max-src-conn 4, max-src-conn-rate 3/20, overload $table_mailspam flush global )



#
# Где-то нашел, что против сканеров помогает, и определения оси, но отключение этого не помогает
#

#block in log quick on $IFACE_ENFORT proto tcp from any to any flags /S
#block in log quick on $IFACE_ENFORT proto tcp from any to any flags /SFRA
#block in log quick on $IFACE_ENFORT proto tcp from any to any flags /SFRAU
#block in log quick on $IFACE_ENFORT proto tcp from any to any flags A/A
#block in log quick on $IFACE_ENFORT proto tcp from any to any flags F/SFRA
#block in log quick on $IFACE_ENFORT proto tcp from any to any flags U/SFRAU
#block in log quick on $IFACE_ENFORT proto tcp from any to any flags SF/SF
#block in log quick on $IFACE_ENFORT proto tcp from any to any flags SF/SFRA
#block in log quick on $IFACE_ENFORT proto tcp from any to any flags SR/SR
#block in log quick on $IFACE_ENFORT proto tcp from any to any flags FUP/FUP
#block in log quick on $IFACE_ENFORT proto tcp from any to any flags FUP/SFRAUPEW
#block in log quick on $IFACE_ENFORT proto tcp from any to any flags SFRAU/SFRAU

#block in log quick on $IFACE_TELES proto tcp from any to any flags /S
#block in log quick on $IFACE_TELES proto tcp from any to any flags /SFRA
#block in log quick on $IFACE_TELES proto tcp from any to any flags /SFRAU
#block in log quick on $IFACE_TELES proto tcp from any to any flags A/A
#block in log quick on $IFACE_TELES proto tcp from any to any flags F/SFRA
#block in log quick on $IFACE_TELES proto tcp from any to any flags U/SFRAU
#block in log quick on $IFACE_TELES proto tcp from any to any flags SF/SF
#block in log quick on $IFACE_TELES proto tcp from any to any flags SF/SFRA
#block in log quick on $IFACE_TELES proto tcp from any to any flags SR/SR
#block in log quick on $IFACE_TELES proto tcp from any to any flags FUP/FUP
#block in log quick on $IFACE_TELES proto tcp from any to any flags FUP/SFRAUPEW
#block in log quick on $IFACE_TELES proto tcp from any to any flags SFRAU/SFRAU


block in log quick from $table_blockin to any

pass in log from $IP_ME to $IP_ME keep state
pass out log from $IP_ME to $IP_ME keep state

#pass in log on $IFACE_ENFORT proto tcp from $IP_ADMIN_HOME to $IP_ENFORT port 3389 flags S/SA keep state

pass quick log proto gre all
pass in log on $IFACE_ENFORT proto tcp from $LAN_WORLD to $IP_ENFORT port $port_tcp_world flags S/SA synproxy state
pass in log on $IFACE_ENFORT proto udp from $LAN_WORLD to $IP_ENFORT port $port_udp_world keep state
pass in log on $IFACE_ENFORT proto icmp from $LAN_WORLD to $IP_ENFORT icmp-type $port_icmp_types keep state

pass in log on $IFACE_TELES proto tcp from $LAN_WORLD to $IP_TELES port $port_tcp_world flags S/SA synproxy state
pass in log on $IFACE_TELES proto udp from $LAN_WORLD to $IP_TELES port $port_udp_world keep state
pass in log on $IFACE_TELES proto icmp from $LAN_WORLD to $IP_TELES icmp-type $port_icmp_types keep state

block in quick log on $IFACE_ENFORT from $table_privatenets to any
block out quick log on $IFACE_ENFORT from any to $table_privatenets

block in quick log on $IFACE_TELES from $table_privatenets to any
block out quick log on $IFACE_TELES from any to $table_privatenets

# Enable access from server to any
# --------------------------------
# -- to lan_office
pass out log on $IFACE_OFFICE from $IP_OFFICE to $LAN_OFFICE keep state
pass out log on $IFACE_OFFICE proto tcp from $LAN_OFFICE to $LAN_OFFICE port 3389 keep state

pass out log on $IFACE_ENFORT from $IP_ENFORT to $LAN_ANY keep state
pass out log on $IFACE_TELES from $IP_TELES to $LAN_ANY keep state

#pass out log on $IFACE_OFFICE from $IP_OFFICE to $LAN_OFFICE keep state
#pass out log on $IFACE_OFFICE proto tcp from $LAN_OFFICE to $LAN_OFFICE port 3389 keep state


# Enable output from lan_office
pass in quick log on $IFACE_OFFICE proto tcp from $LAN_OFFICE to $IP_ME port $port_tcp_office flags S/SA keep state
pass in quick log on $IFACE_OFFICE proto udp from $LAN_OFFICE to $IP_ME port $port_udp_office keep state
pass in quick log on $IFACE_OFFICE proto icmp from $LAN_OFFICE to $IP_ME icmp-type $port_icmp_types keep state

pass in log on $IFACE_OFFICE from $LAN_OFFICE to $LAN_ANY keep state
block in log on $IFACE_OFFICE from $LAN_OFFICE to $table_privatenetsalien
#block in log on $IFACE_OFFICE from $LAN_OFFICE to $IP_ME

# Мои впн-клиенты получают ряд правил
anchor "myvpn/*" from $LAN_MYVPN to any
А также кусок # tcpdump -nettti pflog0:

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

000000 rule 0/0(match): block in on ale0: 192.168.0.225.1990 > 64.12.24.54.5190: [|tcp]
080466 rule 0/0(match): block in on tun0: 81.30.199.66.5222 > 111.111.111.111.61951: [|tcp]
028435 rule 0/0(match): block in on ale0: 192.168.0.111.2075 > 192.168.0.1.3128: [|tcp]
178191 rule 0/0(match): block in on ale0: 192.168.0.31.2142 > 192.168.0.1.3128: [|tcp]
023904 rule 0/0(match): block in on ale0: 192.168.0.253.1596 > 192.168.0.1.3128:  tcp 23 [bad hdr length 0 - too short, < 20]
604716 rule 0/0(match): block in on ale0: 192.168.0.111.2126 > 192.168.0.1.3128: [|tcp]
077530 rule 0/0(match): block in on ale0: 192.168.0.219.1606 > 192.168.0.1.3128: [|tcp]
012589 rule 0/0(match): block in on ale0: 192.168.0.225.1988 > 94.100.181.57.2041: [|tcp]
305569 rule 0/0(match): block in on tun0: 81.30.199.66.5222 > 111.111.111.111.61951: [|tcp]
366027 rule 0/0(match): block in on rl0: 172.17.0.99.137 > 172.17.255.255.137: [|SMB]
232538 rule 0/0(match): block in on ale0: 192.168.0.208.3229 > 192.168.0.1.3128: [|tcp]
035559 rule 295/0(match): pass in on tun0: 93.85.56.153.22462 > 111.111.111.111.25: [|tcp]
131799 rule 0/0(match): block in on tun0: 74.125.79.19.80 > 111.111.111.111.62982: [|tcp]
015994 rule 0/0(match): block in on tun0: 64.12.25.24.5222 > 192.168.0.198.2413: [|tcp]
095095 rule 0/0(match): block in on ale0: 192.168.0.180.1832 > 192.168.0.1.3128: [|tcp]
004944 rule 0/0(match): block in on tun0: 94.100.189.29.2041 > 111.111.111.111.61660: [|tcp]
167136 rule 0/0(match): block in on ale0: 192.168.0.223.1587 > 192.168.0.1.3128: [|tcp]
062825 rule 0/0(match): block in on ale0: 192.168.0.253.1598 > 192.168.0.1.3128: [|tcp]
003103 rule 0/0(match): block in on rl0: 172.17.0.99.137 > 172.17.255.255.137: [|SMB]
024531 rule 0/0(match): block in on ale0: 192.168.0.209.4180 > 192.168.0.1.3128: [|tcp]
372187 rule 392/0(match): pass in on ale0: 192.168.0.219.1620 > 192.168.0.1.3128: [|tcp]
001813 rule 21/0(match): nat out on tun0: 111.111.111.111.54863 > 217.69.128.52.80: [|tcp]
051224 rule 519/0(match): pass in on ale0: 192.168.0.186.1032 > 192.168.0.1.53: [|domain]
000338 rule 21/0(match): nat out on tun0: 111.111.111.111.55168 > 87.241.223.134.53: [|domain]
075143 rule 21/0(match): nat out on tun0: 111.111.111.111.60625 > 80.237.76.3.53: [|domain]
018481 rule 393/0(match): pass in on ale0: 192.168.0.176.2893 > 192.168.0.1.5222: [|tcp]
157438 rule 0/0(match): block in on ale0: 192.168.0.111.2124 > 192.168.0.1.3128: [|tcp]
012891 rule 0/0(match): block in on ale0: 192.168.0.209.4507 > 192.168.0.1.3128: [|tcp]
001489 rule 392/0(match): pass in on ale0: 192.168.0.209.4519 > 192.168.0.1.3128: [|tcp]
001530 rule 21/0(match): nat out on tun0: 111.111.111.111.53753 > 64.12.202.40.80: [|tcp]
022107 rule 21/0(match): nat out on tun0: 111.111.111.111.63741 > 87.241.223.134.53: [|domain]
011802 rule 0/0(match): block in on rl0: 172.17.0.99.137 > 172.17.255.255.137: [|SMB]
064245 rule 21/0(match): nat out on tun0: 111.111.111.111.65333 > 80.237.76.3.53: [|domain]
153340 rule 0/0(match): block in on ale0: 192.168.0.186.2509 > 192.168.0.1.3128:  tcp 1480 [bad hdr length 0 - too short, < 20]
т.е хорошо видно, что при

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

pass in quick log on $IFACE_OFFICE proto tcp from $LAN_OFFICE to $IP_ME port $port_tcp_office flags S/SA keep state
происходит

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

028435 rule 0/0(match): block in on ale0: 192.168.0.111.2075 > 192.168.0.1.3128: [|tcp]
Еще раз повторюсь, что до подключения второго канала, все работало как надо: из офиса, из интернета и т.д., т.е. произошли изменения: подключен второй провайдер и изменен defaultroute, добавлены алиасы к офисному интерфейсу (на провайдеров грешить не стоит, потому что на линуксе с аналогичной схемой работало без замечаний).

С включенным PF работать невозможно, а без выключеного опасно: днем такое впечатление что провайдерам далеко и пополам, что их клиенты один большой ботнет, а по ночам китайские и бразильские студенты зачеты по информатике сдают.

Подскажите куда смотреть

Re: Непонятное поведение PF

Добавлено: 2009-09-04 10:16:30
Fioktist
по ссылке в самом низу два последних правила http://cvs.openbsd.org/faq/pf/pools.html

Re: Непонятное поведение PF

Добавлено: 2009-09-04 11:35:47
Гость
по ссылке в самом низу два последних правила http://cvs.openbsd.org/faq/pf/pools.html
Прописал так, эффекта 0:

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

pass out on $IFACE_TELES route-to ($IFACE_ENFORT $GW_ENFORT) from $IFACE_ENFORT to any
pass out on $IFACE_ENFORT route-to ($IFACE_TELES $GW_TELES) from $IFACE_TELES to any
мне не нужна балансировка, надо чтобы два канала на одной машине уживались, а переключать на второй стану в случае падения первого (думаю методом пинга).

Спасибо за направление, буду думать, рад буду узнать еще мнения