[FUG-BR] RES: VPN & PF

Rodrigo Roberto Barros rodrigo.barros em foton.la
Segunda Outubro 22 11:28:15 BRST 2007



-----Mensagem original-----
De: freebsd-bounces em fug.com.br [mailto:freebsd-bounces em fug.com.br] Em nome de Igor
Enviada em: domingo, 21 de outubro de 2007 17:22
Para: Lista Brasileira de Discussão sobre FreeBSD (FUG-BR)
Assunto: [FUG-BR] VPN & PF

Oi pessoal,

Depois de passar o dia inteiro fazendo testes (infelizmente mal sucedidos) e
preciso da ajuda de voces...

Estou montando um firewall simples: pf, nat, squid e openvpn

O openvpn ja esta conectando e estou fazendo os testes com ele no momento,
mas minha dificuldade é tratar os pacotes dessa interface (tun0)

A unica forma que consegui deixar acessivel foi colocar um

set skip on tun0

Ai tudo funcionou perfeito, mas por consequencia, nao consegui bloquear nada
depois heheh :-)

Segue abaixo um pedaco do log, numa tentativa de conexao SSH sem o set skip
on tun0

000000 rule 1/0(match): block unkn(255) on tun0: 10.0.2.6.1562 > 10.0.1.1.22:
tcp 28 [bad hdr length 0 - too short, < 20]
3. 018822 rule 1/0(match): block unkn(255) on tun0: 10.0.2.6.1562 >
10.0.1.1.22:  tcp 28 [bad hdr length 0 - too short, < 20]
6. 037354 rule 1/0(match): block unkn(255) on tun0: 10.0.2.6.1562 >
10.0.1.1.22:  tcp 28 [bad hdr length 0 - too short, < 20]

E agora o meu pf.conf para analise:

#######################################################################
############## Definindo nome das interfaces e Gateways ###############
#######################################################################

int_if="re0"           # interface da rede interna
ext_if="nfe0"          # interface internet

lan_net="10.0.1.0/24"  # rede interna
vpn_net="10.0.2.0/24"  # rede vpn
ext_gw="192.168.1.1"   # gateway da internet

# autoriza a rede interna acessar esses servicos externos
allow_tcp="{ ftp ftp-data ssh domain https }"
allow_udp="{ ftp ftp-data domain }"

# autoriza conexoes nesse servidor para rede externa e interna
services_ext_tcp="{ ssh http }"
services_int_tcp="{ ftp ssh http }"

# Diretoria
table <diretoria> { 192.168.1.59 }

# nao filtra na interface loopback
set skip on lo0

# faz scrub em pacotes que chegam
scrub in all

# SQUID - redireciona acessos http para squid (3128)
#rdr on $ext_if inet proto tcp from any to any port www -> 127.0.0.1 port
3128

# redireciona todos os pacotes enviados para o servidor atraves da vpn para
o ip interno
rdr on tun0 inet from any to 10.0.2.1 -> 10.0.1.1

# nat
#nat on $ext_if from !($ext_if) to any -> ($ext_if)

# define o politica padrao (bloqueia tudo)
block log all

# Antispoof para rede interna
antispoof log quick for $int_if inet

# vpn
set skip on tun0
block in quick proto tcp from 10.0.2.6 to 10.0.1.1 port 22

# aceita conexoes de computadores da diretoria (VPN)
pass in  quick on $ext_if from <diretoria>
pass out quick on $ext_if from <diretoria>

# permite conexoes ssh na interface externa
pass in quick on $ext_if proto tcp from any \
     to port ssh flags S/SA synproxy state

# libera os servicos para internet (services_ext)
pass in on $ext_if proto tcp from any to port $services_ext_tcp

# libera servicos para a rede interna (services_int)
pass in on $int_if proto tcp from any to port $services_int_tcp

# aceita trafego indo e vindo para a rede interna
pass in  on $int_if from $lan_net to any
pass out on $int_if from any to $lan_net

# libera tcp, udp e icmp saindo pela interface externa (Internet)

# para portas definidas em allow_[tcp/udp]
# mantem o estado em udp e icmp e usa modulate state em tcp.
pass out on $ext_if proto tcp from any to port $allow_tcp modulate state
flags S/SA
pass out on $ext_if proto udp from any to port $allow_udp keep state
pass out on $ext_if proto icmp all keep state

-------------------------------------

Muito obrigado pela ajuda

Abracos

Igor
-------------------------
Histórico: http://www.fug.com.br/historico/html/freebsd/
Sair da lista: https://www.fug.com.br/mailman/listinfo/freebsd



Igor,
	Cria uma interface para a tun0 tipo:

Vpn_if="tun0" 

E depois aplica as regras como vc esta fazendo nas outras interfaces.

Há outra coisa, a opção "block log all" eu costumo colocar no final do Arquivo, não tenho muita experiência com PF. O pessoal da lista pode dizer qual o melhor local para colocar o bloqueio de tudo. 

No resto do Firewall preciso de mais informações sobre o ambiente e o que vc quer liberar ou bloquear para dar uma opinião correta.

Bom, espero ter ajudado.  

Atenciosamente.

Rodrigo Roberto Barros
Analista de Sistemas - NIE
rodrigo.barros em foton.la


Mais detalhes sobre a lista de discussão freebsd