PF (pf.conf)

Configuração do firewall PF para OpenBSD

Categoria: Segurança

Software: PF

[ Hits: 14.938 ]

Por: Braulio Gomes Rodrigues


Esta é a configuração de um ótimo script de firewall usando o PF para OpenBSD, com opções de NAT's, controle de banda e filtros.


# Variaveis
#-----------------------------
int_int="rl0"
int_ext="rl1"
rede="192.168.10.0"

PING = "echoreq"
TCP_IN = "{ ssh, ftp, 20, 21, 443 }"
#UDP_IN = "{  }"


TCP_OUT = "{ ssh, 20, 21, ftp, 443, http, ntp, 8080, 5999 }"
UDP_OUT = "{ domain, ntp }"

# Link
down="2.5Mb"
uplo="2.5Mb"


server2="192.168.10.10"
server1="127.0.0.1"
#----------------------------------------------------------------------------
# tabela de Ips internos

table <baixa> { 192.168.10.1, 192.168.10.5, 192.168.10.12, 192.168.10.17, 192.168.10.21, 192.168.10.23, 192.168.10.30 192.168.10.38 192.168.10.42 }

table <bmedia> { }
      
table <media> {  }

table <alta> { 192.168.10.10, 192.168.10.27, 192.168.10.11 }

table <center> { 192.168.254.0/24 }

# normalizando os pacotes
#----------------------------------------

set timeout { tcp.first 60 tcp.opening 15 tcp.established 86400 \
            tcp.closing 300 tcp.finwait 15 tcp.closed 15 }
set timeout { udp.first 30 udp.single 15 udp.multiple 30 }
set timeout { icmp.first 10 icmp.error 5 }
set timeout { other.first 30 other.single 15 other.multiple 30 }
set timeout { frag 30 interval 10 }
set limit { states 50000 frags 25000 }
set optimization aggressive
set loginterface $int_ext
set loginterface $int_int
set loginterface $int_ext
set block-policy return
set require-order yes
scrub all fragment reassemble random-id no-df

# Habilita enfileiramento 
#------------------------------------------------
# Upload
altq on $int_ext cbq bandwidth $uplo queue  { baixa bmedia media alta center }
   queue baixa   bandwidth 128Kb   cbq(default)
   queue bmedia      bandwidth 128Kb   priority 1 
   queue media      bandwidth 200Kb   priority 2 
   queue alta       bandwidth 350Kb   priority 3
   queue center       bandwidth 512Kb   priority 4 

# Download
# define os parametros para as subfilas.
altq on $int_ext cbq bandwidth $down queue  { baixa_in bmedia_in media_in alta_in center_in }
    queue baixa_in   bandwidth 200Kb   cbq(default)
    queue bmedia_in     bandwidth 200Kb   priority 1
    queue media_in      bandwidth 300Kb   priority 2
    queue alta_in       bandwidth 512Kb   priority 3
    queue center_in     bandwidth 768Kb   priority 4 


# Fazendo o NAT
nat on $int_ext from $rede to any -> $int_ext
nat on $int_ext from <baixa> to any -> $int_ext
nat on $int_ext from <bmedia> to any -> $int_ext
nat on $int_ext from <media> to any -> $int_ext
nat on $int_ext from <alta>  to any -> $int_ext
nat on $int_ext from <center>  to any -> $int_int


# Redicrecionamento
#--------------------------------
rdr on $int_ext proto tcp from any to any port 8080 -> $server2 port 8080
rdr on $int_int proto tcp from any to any port 21 ->   $lo     port 8021
rdr on $int_ext proto tcp from any to any port 6667 -> $server2 port 6667
rdr on $int_ext proto tcp from any to any port 6891 -> $server2 port 6891
rdr on $int_ext proto tcp from any to any port 6893 -> $server2 port 6893
rdr on $int_ext proto tcp from any to any port 6900 -> $server2 port 6900
rdr on $int_ext proto tcp from any to any port 5900 -> $server2 port 5900
rdr on $int_ext proto tcp from any to any port 1213 -> $server2 port 1213
rdr on $int_ext proto tcp from any to any port 1214 -> $server2 port 1214
rdr on $int_ext proto tcp from any to any port 1832 -> $server2 port 1832
rdr on $int_ext proto tcp from any to any port 3094 -> $server2 port 3094
rdr on $int_ext proto tcp from any to any port 3622 -> $server2 port 3622
rdr on $int_ext proto udp from any to any port 1213 -> $server2 port 1213
rdr on $int_ext proto udp from any to any port 1214 -> $server2 port 1214
rdr on $int_ext proto udp from any to any port 1832 -> $server2 port 1832
rdr on $int_ext proto udp from any to any port 3094 -> $server2 port 3094
rdr on $int_ext proto udp from any to any port 3622 -> $server2 port 3622
#rdr on $int_int proto tcp from any to any port 80 -> $server1 port 3128
#rdr on $int_int proto udp from any to any port 80 -> $server1 port 3128

# ... sessão de filtragem

# blockeando tudo por default
block in log on $int_ext from any to any

# bloqueando spoof
antispoof for { $int_ext } inet

# bloqueando scanners
block drop in quick on { $int_ext } from any os { NMAP }

# bloqueando trafego ipv6
block log quick inet6

#Liberando loopback
pass quick on lo0 all

# liberando ping/traceroute
pass out log on $int_ext inet proto icmp all icmp-type 8 code 0 keep state
pass in log on $int_ext inet proto icmp all icmp-type 8 code 0 keep state

# Liberando portas
#INCOMING
#TCP
pass in quick on $int_ext inet proto tcp from any to $int_ext port $TCP_IN flags S/SA keep state
#UDP
#pass in quick on $int_ext inet proto udp from any to $int_ext port $UDP_IN keep state
#PING
pass in quick on $int_ext inet proto icmp from any to $int_ext icmp-type $PING keep state

pass in on $int_ext inet proto { tcp udp } from any to any port 22
pass in on $int_ext inet proto { tcp udp } from any to any port 21
pass in on $int_ext inet proto { tcp udp } from any to any port 20
pass in on $int_ext inet proto { tcp udp } from any to any port 25
pass in on $int_ext inet proto { tcp udp } from any to any port 53
pass in on $int_ext inet proto { tcp udp } from any to any port 80
pass in on $int_ext inet proto { tcp udp } from any to any port 443
pass in on $int_ext inet proto { tcp udp } from any to any port 110
pass in on $int_ext inet proto { tcp udp } from any to any port 8080
pass in on $int_ext inet proto { tcp udp } from any to any port 6667
pass in on $int_ext inet proto { tcp udp } from any to any port 6891
pass in on $int_ext inet proto { tcp udp } from any to any port 6893
pass in on $int_ext inet proto { tcp udp } from any to any port 6900
pass in on $int_ext inet proto { tcp udp } from any to any port 1213
pass in on $int_ext inet proto { tcp udp } from any to any port 1214
pass in on $int_ext inet proto { tcp udp } from any to any port 1832
pass in on $int_ext inet proto { tcp udp } from any to any port 3094
pass in on $int_ext inet proto { tcp udp } from any to any port 3622
pass in on $int_ext inet proto { tcp udp } from any to any port 2216
pass in on $int_ext inet proto tcp from port 20 to ($int_ext) user proxy flags S/SA keep state

#OUTGOING
#EXTERNAL INTERFACE

#TCP
pass out quick on $int_ext inet proto tcp from $int_ext to any port $TCP_OUT flags S/SA  keep state

#UDP
pass out quick on $int_ext inet proto udp from $int_ext to any port $UDP_OUT keep state

#ICMP
pass out quick on $int_ext inet proto icmp from $int_ext to any icmp-type $PING keep state

# Liberando acesso
pass in log on $int_ext from <baixa> to any queue baixa_in
pass in log on $int_ext from <bmedia> to any queue bmedia_in
pass in log on $int_ext from <media> to any queue media_in
pass in log on $int_ext from <alta> to any queue alta_in
pass in log on $int_ext from <center> to any queue center_in

pass in log on $int_ext from $baixa to any  
pass in log on $int_ext from $bmedia to any 
pass in log on $int_ext from $media to any 
pass in log on $int_ext from $alta to any  
pass in log on $int_ext from $center to any 
  


Comentários
[1] Comentário enviado por seragval em 05/12/2006 - 14:19h

Não entendi as duas linhas comentadas no redirecionamento???

[2] Comentário enviado por seragval em 05/12/2006 - 14:20h

Não entendi o porque das linhas comentadas no redirecionamento???
Sou novato no freeBSD.

[3] Comentário enviado por squidfjv em 05/12/2006 - 15:20h

Cara foi comentado as linhas referentes a porta 3128 que é a porta do Squid, que eu não estava usando no momento.

[4] Comentário enviado por seragval em 06/12/2006 - 22:16h

Sou novato e estou apreendendo, desculpe a primeira pergunta, mais é que na minha idéia você estava usando o squid. Então em caso positivo elas são importantes?

Agora só para exclarecer me responda, as perguntas abaixo?

1 - Nos redirecionamentos, não poderia ter sido usado uma tabela com o conteudo de todas as portas ao invés de repetir tantas linhas?

2 - A mesmas tabelas não poderia ter sido usadas na função "pass" para evitar tantas linhas repetidas?


[5] Comentário enviado por seragval em 09/12/2006 - 20:38h

Desculpe pela insistência, mas estou aguardando uma resposta, e se me permite gostaria de fazer algumas outras, mas lembre-se o meu intuito é o de apreender mas de aprender fazer direito, é por isto estou malhando um pouco a leitura sobre o PF, pois eu quero montar meu servidor com controle e tudo que tenho direito.

Perguntas:

1 - Porque fazer nat em cima de cada grupo de rede, e não para toda a rede. Ou seja bastaria a primeira linha com pequena alteração.

2 - Ta tudo certo na liberação do acesso?

Agradeço desde já as suas respostas, sem as quais, não tem sentido este espaço neste site.

[6] Comentário enviado por seragval em 23/01/2007 - 09:15h

Eu acho que este artigo deveria sair fora, uma vez que esta cheio de erros, e com muitas linhas redundantes. Como aprendiz fico desapontado não só com o artigo, mas com a sua publicação sem uma devida verificação.

[7] Comentário enviado por squidfjv em 26/01/2007 - 16:17h

Cara, se você quiser fazer direito faça, eu não tenho que ficar lhe dando satifsfação do meu script não, cada um monta da maneira que lhe melhor convem!!, se você não ta satisfeito procure fazer melhor

[8] Comentário enviado por cristina.fsilva em 28/01/2007 - 00:07h

Amigo, enviei um e-mail para vc sobre este artigo, estou tentando fazer funcionar aqui no meu servidor FreeBSD, por caso vc tem correção para ele ? esta dando alguns erros aqui.

obrigada

[9] Comentário enviado por squidfjv em 29/01/2007 - 14:20h

Cara Cristina, reporte os erros no email para que eu possa lhe ajudar,
você compilou o kernel do FreeBSD com suporte ao PF?


Contribuir com comentário

  



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts