Eu quero usar o OpenBSD 5.7 como uma ponte de filtragem na frente do meu roteador e, como parte disso, executar um proxy transparente (squid 3.5.1) para gerenciar o acesso à web. Eu configurei a máquina openbsd como uma ponte, e isso funciona bem. No entanto, não consigo fazer com que pf desvie o tráfego da web para o squid.
É assim que minha rede parece
[Internet]
|
|
[OpenBSD]
|
|
[ (Router) ]
| |
| |
[Wired Workstations] [Wi-Fi]
O Squid funciona corretamente se eu conectar a máquina do OpenBSD à minha rede e configurar manualmente uma estação de trabalho para usá-la como proxy. Eu tenho o seguinte na minha configuração do squid para permitir a interceptação transparente
http_port 127.0.0.1:3129 tproxy
Esta é a configuração do meu pf:
# internet facing
ext_if = "em1"
# internal facing
int_if = "em0"
#scrub provides a measure of protection against certain kinds of attacks based on incorrect handling of packet fragments
match in all scrub (no-df max-mss 1440)
# Prevent spoofing
antispoof log for $ext_if label "antispoof"
# Block anything coming form source we have no back routes for
block in log from no-route to any label "no back route"
# Proxy http
pass in quick on $int_if inet proto tcp to port www divert-to 127.0.0.1 port 3129
pass out quick from 127.0.0.1 divert-reply
pass in on $int_if
pass out on $int_if
pass in on $ext_if
pass out on $ext_if
Alguém sabe por que minha regra "desviar para" não funciona? Eu olhei nos logs
pass in quick on em0 inet proto tcp from any to any port = 80 flags S/SA divert-to 127.0.0.1 port 3129
[ Evaluations: 36248 Packets: 544 Bytes: 355122 States: 29 ]
[ Inserted: uid 0 pid 15666 State Creations: 29 ]
desdobre o inet rápido de 127.0.0.1 para qualquer sinalizador de desvio / resposta S / SA
[Avaliações: 72399 Pacotes: 0 Bytes: 0 Estados: 0]
[Inserido: uid 0 pid 15666 State Creations: 0]
Posso ver que a regra está "funcionando", mas nada aparece nos logs do squid e ainda posso acessar sites. Isso é basicamente as regras recomendadas pela lula como. Eu tentei usar essa regra em vez disso
pass in log quick on $int_if inet proto tcp from any to any port www rdr-to 127.0.0.1 port 3129
Quando eu uso isso, vejo que o redirecionamento de regra ocorre, no entanto, nada aparece nos logs do squid. Também solicitações de tempo limite de sites.
pass in log quick on em0 inet proto tcp from any to any port = 80 flags S/SA rdr-to 127.0.0.1 port 3129
[ Evaluations: 25213 Packets: 8 Bytes: 496 States: 1 ]
Esta é a saída do ifconfig
ifconfig
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 32768
priority: 0
groups: lo
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x4
inet6 ::1 prefixlen 128
inet 127.0.0.1 netmask 0xff000000
em0: flags=8b43<UP,BROADCAST,RUNNING,PROMISC,ALLMULTI,SIMPLEX,MULTICAST> mtu 1500
lladdr 00:e8:4c:68:1a:f1
priority: 0
groups: egress
media: Ethernet autoselect (1000baseT full-duplex,rxpause,txpause)
status: active
em1: flags=8b43<UP,BROADCAST,RUNNING,PROMISC,ALLMULTI,SIMPLEX,MULTICAST> mtu 1500
lladdr 00:e8:4c:68:1a:f2
priority: 0
media: Ethernet autoselect (100baseTX full-duplex,rxpause,txpause)
status: active
enc0: flags=0<>
priority: 0
groups: enc
status: active
bridge0: flags=41<UP,RUNNING>
groups: bridge
priority 32768 hellotime 2 fwddelay 15 maxage 20 holdcnt 6 proto rstp
em0 flags=7<LEARNING,DISCOVER,BLOCKNONIP>
port 1 ifpriority 0 ifcost 0
em1 flags=7<LEARNING,DISCOVER,BLOCKNONIP>
port 2 ifpriority 0 ifcost 0
pflog0: flags=141<UP,RUNNING,PROMISC> mtu 33144
priority: 0
groups: pflog
Como posso fazer isso funcionar? O que há de errado com minhas regras pf?
Atualizar
Isso está ficando um pouco estranho
Se eu usar
pass in quick log on $int_if inet proto tcp to port 80 divert-to 127.0.0.1 port 3129
pass out quick log from 127.0.0.1 divert-reply
Eu obtenho o seguinte no log:
rule 3/(match) pass in on em0: 233.297.39.227.32880 > 153.94.152.119.87: S 2656450467:2656450467(0) win 65535 <mss 1460,nop,wscale 5,nop,nop,timestamp 605332037 0,[|tcp]> (DF)
Se eu mudar para
pass in quick log on $int_if inet proto tcp to port 80 rdr-to 127.0.0.1 port 3129
pass out quick log from 127.0.0.1 divert-reply
Eu recebo o seguinte no log, no entanto, nada aparece nos logs do squid e, sem surpresa, os pedidos para os sites terminam
rule 3/(match) pass in on em0: 233.297.39.227.39091 > 127.0.0.1.3129: S 409217949:409217949(0) win 65535 <mss 1460,nop,wscale 5,nop,nop,timestamp 605394683 0,[|tcp]> (DF)