[FUG-BR] please socorro regras ipfw +dummynet !!!!!

Joao Paulo Marques Mattos jampa25 em gmail.com
Qui Jan 19 22:28:42 BRST 2006


ipfw + natd + squid + dummynet

Putz... esta tudo muito confuso, vamos comecar do zero?!?!?

Vou tentar colocar todas as opcoes dentro de uma estrutura criada pela
minha cabeca, vc nao precisa segui-la, mas serve como exemplo.

Divido o firewall em basicamente tres partes e trabalho com regras
dinamicas, logo estaremos usando um firewall statefull:

1-rede interna: rl0 in e out (ex.: squid)

Nesta primeira parte eu controlo o acesso ao meu servidor atraves da
minha rede interna, nela tambem crio regras especificas (skipto's)
para encaminhar o acesso ao "natd saida" e uma para tratar o retorno,
ou entrada atraves da minha rede externa

2-saida controlada para rede externa: to any out via rl1 (ex.: natd saida)

Os IP's/MAC da minha rede interna que forem liberados para usar o natd
serao encaminhados atraves de regras skito para esta parte, aqui
podemos restringir a saida atraves de regras especificas e ou
limitacao de banda com o dummynet

3-entrada na rede externa: to me in via rl1 (ex: natd retorno, redir)

Tudo que entrar atraves da minha rede externa direcionado para o
servidor, seja retorno do natd ou entrada externa sera encaminhado
para esta parte tambem atraves de regras skipto.

Mao na massa intaum... o script ficaria mais ou menos assim:

#!/bin/sh
# Regras de Firewall (ipfw - IP firewall and traffic shaper control program)
# Escrito por Joao Paulo Marques Mattos
# Data: 19/01/2006
#
#
# para que este script funcione eh necessario que seja indicado
# a localizacao dele no arquivo "/etc/rc.conf", procure por:
# firewall_enable="YES"
# e insira na proxima linha:
# firewall_script="/etc/firewall/fwrules"

# define o comando do firewall (igual ao /etc/rc.firewall) para simplificar
# a referencia. facilita a leitura.

fwcmd="/sbin/ipfw"

# define as interfaces interna e externa
exteth="rl1"
inteth="rl0"

# redes invalidas bloqueadas RFCs 1045 1918 1192
NET_DENY_RFC="10.0.0.0/8 172.16.0.0/12 0.0.0.0/8 169.254.0.0/16
192.0.2.0/24 224.0.0.0/4 240.0.0.0/4"

# forca a remocao das regras atuais antes de carregar
$fwcmd -f flush

####################################
# BLOQUEIOS - bloquear todo trafego nao autorizado
####################################

# BLOQUEIO DE REDES INVALIDAS  - RFC 1045 1918 1192
if [ -n "$NET_DENY_RFC" ] ; then
        for DENY_RFC in $NET_DENY_RFC ; do
                $fwcmd add deny all from $DENY_RFC to any
                $fwcmd add deny all from any to $DENY_RFC
        done
fi

# TCP
$fwcmd add reset tcp from any to any 113 in recv $exteth
$fwcmd add deny tcp from any to any 135 in recv $exteth
$fwcmd add deny tcp from any to any 139 in recv $exteth
$fwcmd add deny tcp from any to any 445 in recv $exteth
$fwcmd add deny tcp from any to any 8859 in recv $exteth

# UDP
$fwcmd add deny udp from any to any 113 in recv $exteth
$fwcmd add deny udp from any to any 137 in recv $exteth
$fwcmd add deny udp from any to any 520 in recv $exteth
$fwcmd add deny udp from any to any 8859 in recv $exteth


####################################
# Verifica todo o trafego entrante, em cosa positivo pula para a regra 25000
####################################

$fwcmd add skipto 25000 all from any to me in recv $exteth

####################################
# Filtra e verifica todo trafego sainte e
# (com regras dinamicas) todo trafego entrante
####################################

# ICMP GERAL (vc pode liberar tudo ou restringir como abaixo)
$fwcmd add skipto 20000 icmp from any to any icmptypes 0
$fwcmd add skipto 20000 icmp from any to any icmptypes 3
$fwcmd add skipto 20000 icmp from any to any icmptypes 8
$fwcmd add skipto 20000 icmp from any to any icmptypes 11

# IP's Liberados para navegacao pelo NAT
$fwcmd add skipto 20000 tcp from 192.168.1.5/32 to any out xmit
$exteth keep-state
$fwcmd add skipto 20000 tcp from 192.168.1.6/32 to any out xmit
$exteth keep-state
$fwcmd add skipto 20000 tcp from 192.168.1.17/32 to any out xmit
$exteth keep-state
$fwcmd add skipto 20000 tcp from 192.168.1.55/32 to any out xmit
$exteth keep-state

####################################
# permite todas as conexoes confiaveis - interface interna
####################################

# localhost
$fwcmd add allow ip from any to any via lo0

# SSH liberado somente para interface interna
$fwcmd add allow tcp from any 1024-65535 to any 22 via $inteth
$fwcmd add allow tcp from any 22 to any 1024-65535 via $inteth

# SNMP liberado para interface interna, IP interno
$fwcmd add allow udp from any 161 to me 1024-65535 via $inteth
$fwcmd add allow udp from me 1024-65535 to any 161 via $inteth

# Se quiser limitar a banda de algum usuario, alem da propria limitacao
# do squid, insira as regras nesse espaco

# Tunel de Limitacao de banda para o SQUID
$fwcmd pipe 10 config mask src-ip 0x000000ff bw 128kbit/s queue 16Kbytes
$fwcmd pipe 11 config mask dst-ip 0x000000ff bw 128kbit/s queue 16Kbytes

# Relacao de IP's que passarao pelo tunel, ele eh aplicado
# na interface interna, pois a externa sai com o IP do servidor
$fwcmd add pipe 10 tcp from 192.168.1.16/32 to me 3128 in via $inteth
$fwcmd add pipe 11 tcp from me 3128 to 192.168.1.16/28 out via $inteth

# SQUID liberado para interface interna, IP interno
$fwcmd add allow tcp from any 1024-65535 to me 3128 via $inteth
$fwcmd add allow tcp from me 3128 to any 1024-65535 via $inteth

# conexoes iniciadas pelo servidor
$fwcmd add allow tcp from any to any out xmit $exteth setup
$fwcmd add allow udp from any to any out xmit $exteth

# uma vez que uma conexao foi estabelecida, permite que fique aberta
$fwcmd add allow tcp from any to any via $exteth established

# Libera e loga o resto do trafego da interface interna
# use esta regra somente para debug
$fwcmd add allow log ip from any to any via $inteth

# Pra ter certeza de que nao passara nada que nao for permitido
$fwcmd add 19999 deny log ip from any to any

####################################
# Somente passarao por estas regras em duas circunstancias:
# 1) Qualquer pacote sainte que recebeu a flag keep-state
# 2) Qualquer pacote entrante que encontrar uma regra dinamica
####################################

# NAT
$fwcmd add 20000 divert natd all from any to any out xmit $exteth

# Tunel de Limitacao de banda para o NAT
ipfw pipe 20 config mask src-ip 0x000000ff bw 512kbit/s queue 30Kbytes
ipfw pipe 21 config mask dst-ip 0x000000ff bw 512kbit/s queue 30Kbytes

# Relacao de IP's que passarao pelo tunel, ele eh aplicado
# na interface interna, pois a externa sai com o IP do servidor
ipfw add pipe 20 tcp from 192.168.1.5 to any in via $inteth
ipfw add pipe 21 tcp from any to 192.168.1.5 out via $inteth

####################################
# permite todas as conexoes confiaveis
####################################

# Interface interna
$fwcmd add allow ip from any to any via $inteth

# conexoes iniciadas pela rede
$fwcmd add allow tcp from any to any out xmit $exteth setup
$fwcmd add allow udp from any to any out xmit $exteth

# uma vez que uma conexao foi estabelecida, permite que fique aberta
$fwcmd add allow tcp from any to any via $exteth established

# ICMP (para ping e traceroute funcionarem)
$fwcmd add allow icmp from any to any

# Libera e loga o resto do trafego
# use esta regra somente para debug
$fwcmd add allow log all from any to any

# Pra ter certeza de que nao passara nada que nao for permitido
$fwcmd add 24999 deny log all from any to any

####################################
# Somente passarao por estas regras trafego entrante. Precisamos
# definir o que queremos aceitar ou nao. A flag ckeck-state
# ira disparar a regra dinamica e pular para a 20000
####################################

$fwcmd add 25000 divert natd all from any to any in recv $exteth
$fwcmd add check-state

# uma vez que uma conexao foi estabelecida, permite que fique aberta
$fwcmd add allow tcp from any to any via $exteth established

# FTP-DATA
$fwcmd add allow tcp from any 20 to any 1024-65535 in recv $exteth

# ICMP (para ping e traceroute funcionarem)
$fwcmd add allow icmp from any to any

# rejeita o resto
$fwcmd add deny log all from any to any

....

Bom, por enquanto, eh isso...

Se voce quiser um redir funcionando tanto para rede interna como
externa tambem dah pra inserir no monstrinho acima

O controle nao soh por IP mas tambem por MAC tambem funciona, basta
acrescentar nas regras de skipto

Perguntas?

[]'s

JP-Ux

'eius simius in cuius ramus'

_______________________________________________
Freebsd mailing list
Freebsd em fug.com.br
http://mail.fug.com.br/mailman/listinfo/freebsd_fug.com.br




Mais detalhes sobre a lista de discussão freebsd