Você está na página 1de 43

IPFW-HOWTO

Ateno: este documento apesar de datado, ainda considerado prtico, e a melhor introduo ao
IPFIREWALL(4) disponvel publicamente na Internet. Todas as informaes aqui disponveis continuam
vlidas e aplicveis nas verses mais recentes do FreeBSD. Contudo, uma srie de recursos no so
documentados neste documento, a saber:
Controle de Banda e QoS com WF2Q+
;Suporte ALTQ;
Blocos OR;
Tabelas e anlise binria avanada;
Grupos de Regras;
Marcao de Pacotes;
Filtro de Camada 2;
Filtro de Camada 7 em conjunto com Netgraph;
Balanceamento e Redundncia de Firewall (IPFW TEE);
Recursos anti-spoof nativos;
Filtro IPv6;
Outros de menor relevncia;
O leitor deste documento fortemente indicado a obter mais informaes sobre os recursos acima. As
fontes de informao recomendadas so o histrico da lista de discusses FUG-BR e o livro FreeBSD:
Poder para Servir, de Patrick Tracanelli e Jean M. Melo, este que por sua vez documenta todos os tpicos
no abordados aqui, com amplos detalhes.
Este documento est em plena sincronia com a verso 0.4 deste HOW-TO. A diferena entre a verso 0.3 e a
0.4 so correes ortogrficas em lngua inglesa.
Este documento encontra-se disponvel no website da FreeBSD Brasil por referncia histrica
(especialmente links referenciados por engines de busca). O endereco permanente deste documento em
sua verso original :
http://free.bsd.com.br/~eksffa/freebsd/ipfw.txt
http://www.freebsdbrasil.com.br
Reproduo integral ou parcial permitida desde que as fontes originais sejam mencionadas.
IPFW-HOWTO

http://www.freebsdbrasil.com.br
Reproduo integral ou parcial permitida desde que as fontes originais sejam mencionadas.
IPFW-HOWTO

V.0.3br_pt
Se existirem perguntas ou comentrios, por favor, envie-os para
walt@erudition.net. A verso mais recente desse documento vai estar sempre
disponvel em www.freebsd-howto.com. s direitos de reprodu!o desse documento
so reservados. "erso em portugu#s desse documento sob responsabilidade de
$atric% &racanelli 'e%sffa@freebsdbrasil.com.br( e )aurcio *oto 'freebsd-
brasil@uol.com.br(. A verso mais recente do mesmo estar sempre disponvel em
http+,,free.bsd.com.br,-e%sffa,freebsd,ipfw.txt
Sumrio.
.. /nformacoes gerais sobre a 0iltragem de $acotes de 1ede
2. Acionando o /pfirewall'3(

2... ,etc,rc.firewall e firewalls com poltica aberta
'$45 firewalls(
2.2. 6arregando 1ulesets 'con7unto de regras(
2.2... &ipos de 0irewall pr8-definidos
2.2.2. &ipos de 0irewall $ersonali9ado
:. Sintaxe de regras bsicas do /pfw';(

:... <istando 1egras Ativas
:.2. 6omandos bsicos e suas fun!=es
:.:. 4specificando $rotocolos
:.3. 4specificando endere!os de rigem e de >estino
:.3... ?ma introdu!o @ 5etmas% e Aitmas%
:.3.2. 4specificando $ortas e 0aixas de $ortas
3. Sintaxe de regras avan!adas do ipfw';(
3... A a!o BunreachB
3.2. 6ontrole de /nterface e de 0luxo
3.:. 6ombinando tipos de pacotes /6)$ e &6$ especficos
3.:... icmptCpes
3.:.2. tcpflags, setup D established
3.:.:. ipoptions
3.3. 1econhecendo $acotes 0ragmentados
3.E. 0iltragem baeada em ?/> e */>
E. <ogs '<ogging(
E... $ropriedades de <ogs
E.2. 6onfigura!=es de <ogs do sistema
E.2... p!=es do Fernel
http://www.freebsdbrasil.com.br
Reproduo integral ou parcial permitida desde que as fontes originais sejam mencionadas.
IPFW-HOWTO

E.2.2. 6onfigurando o sCslog';(
E.2.:. 6onfigura!o do newsCslog';( pra fa9er
rotacionamento de logs 'log rotation(
E.:. 6onfigura!o de log nas regras
G. /ntrodu!o @ filtragem HStatelessH e HStatefulH de pacotes
G... 6onfigura!=es HStatefulH /niciais
G.2. 6onfigura!=es HStatefulH Avan!adas
G.:. Anatomia de uma 1egra >inImica
J. &raffic Shapping 'controle de trfego(
J... $robabilidade de corr#ncias '$robabilitC )atching(
J.2. >ummCnet

J.2... 4nfileiramento de pipes '$ipe Kueues(
J.2.2. )scaras de pipes '$ipe )as%s(
J.2.:. 1emane7amento de pacotes por pipes '$ac%et
1ein7ection(
;. 0luxo do &rfego pelo 0irewall
Ap#ndice A+ 4xemplos de 6onfigura!=es de 0irewallL
.. /nformacoes gerais sobre a 0iltragem de $acotes de 1edeL

/$0M';(, a interface de comando do /$0/14MA<<'3( 8 o utilitrio mais
comum e mais popular pra implementar a filtragem de pacotes /$ e controle de
trfego de rede no 0reeAS>, e 8 a ferramenta de 0/14MA<< nativa com a Nual o
0reeAS> trabalha por padro 'mesmo considerando Nue, inicialmente o firewall 8
desabilitado a nvel de %ernel(. A forma lOgica como o /$0M trabalha suas
regras 8 parecida com a adotada em muitos outros filtros de pacotes '$ac%et
0ilters(, com excesso do /$0ilter, Nue opera com um padro pra tratar as
regras Nue 8 menos eficiente e reNuer bem mais cuidado na hora de a7ustar o
firewall 'se voc# tem familiaridade com o ipf';(, por exemplo, perceba a
utili9a!o da chave HNuic%H, necessria para Nue o ipf';( no traverse a regra
inteira, todas as ve9es Nue ela 8 lidaL entre outros fatores particulares de
utili9a!o do /$0ilter(. )as isso no tira a Nualidade e o poder de
implementa!o de firewalls do ipf';(, Nue tem tamb8m suas prOprias vantagens. A
escolha final em rela!o a Nual ferramenta de 0iltragem de $acotes utili9ar, 8
uma deciso pessoal, a no ser Nue voc# tenha necessidade de alguma
caracterstica de um 0irewall Nue o outro no possua, contudo, nOs vamos
abordar uma compara!o entre as duas ferramentas posteriormente.
6omo 7 dito antes, ipfirewall'3( 8 um firewall por filtragem de
pacotes, o Nue significa Nue ele atua monitorando pacote-a-pacote todas as
conex=es, e a partir da s8rie 3.x do 0reeAS> '0reeAS> 3.P(, o ipfirewall'3(
tamb8m pode gerenciar uma filtragem por estado 'stateful( de conex=es mais
rudimentares, de acordo com estados de conexo. 4sse comportamento 8 sempre
transparente pros usurios, ou se7a, ningu8m vai notar Nue existe um firewall
presente, at8 Nue um evento aguardado se7a bloNueado.
http://www.freebsdbrasil.com.br
Reproduo integral ou parcial permitida desde que as fontes originais sejam mencionadas.
IPFW-HOWTO

?m firewall costuma ser arNuitetado de diversas formas, mas todas as
maneiras podem ser simplificadas com base em duas polticas de filtragem+
aberto e fechado. 0irewall Nue segue uma poltica aberta permite Nue todos os
pacotes se7am roteados por padro, e bloNueia aNueles Nue pertencem a um tipo
de conexo Nue no 8 dese7ado, ou se7a, Babre tudo e bloNueia os indese7adosB.
Q o firewall Nue segue uma poltica fechada, fa9 o inverso, bloNueando todo o
roteamento de pacotes, e libera um a um o trfego de conex=es permitidas. 4ssa
segunda implementa!o proporciona um firewall muito mais rgido, contudo sua
configura!o 8 bem mais trabalhosa, porNue voc# pode facilmente bloNuear o
trfego de algum servi!o Nue este7a sendo utili9ado na rede. Alguns protocolos
estabelecem conex=es dinImicas, Nue so bem mais difceis de se prever, mas
voc# tem como estar atento a esse tipo de situa!o.
2. Acionando o /pfirewall'3(L
ipfirewall'3( pode ser iniciado de duas formas+ voc# pode adicionar
as op!=es apropriadas no seu %ernel atrav8s do seu arNuivo de configura!=es, e
compilar um novo %ernel pro seu sistemaL ou voc# pode usar o %ldload';( pra
carregar dinImicamente o mOdulo base do ipfw';(, o ipfw.%o, no %ernel. As duas
abordagens funcionam bem pra adicionar um firewall'3( com configura!=es
bsicas, contudo, a compila!o esttica proporciona, com pouca diferen!a, uma
melhor performance, mas permite ainda Nue se adicione op!=es mais detalhadas de
configura!o, como por exemplo, a gera!o e limita!o de logs.
$ra carregar o ipfw de forma dinImica, simplesmente use o comando+
root@eeviac-R %ldload ipfw
root@eeviac-R
$ra acionar o ipfirewall'3( de forma esttica, o eNuivalente seria
adicionar a seguinte linha no arNuivo de configura!=es do seu %ernel+
options /$0/14MA<<
4m seguida a compila!o e instala!o acionaria o ipfirewall'3( esttico
no %ernel, logo apOs a prOxima iniciali9a!o do sistema.
6ontudo, as coisas no so to simples Nuanto parecem, se voc#
simplesmente seguir os passos descritos acima Nuando estiver na frente da
mNuina, vai perceber Nue existe a necessidade de algumas op!=es adicionais pra
poder usar a esta!o. Se voc# prestar aten!o nos conceitos de poltica de
firewall citados acima 'aberto e fechado(, vai entender porNue o uso do
eNuipamento vai se complicar muito, se voc# no perceber Nue o firewall usa uma
poltica padro fechada. Se voc# simplesmente adicionar o ipfirewall'3( sem
nenhuma configura!o posterior, todo o trfego de rede vai ser bloNueado, ou
se7a, nenhum pacote ser roteado. /sso fatalmente pode se tornar um tormento se
voc# for adicionar o firewall remotamente. S claro Nue esse tipo de dor de
cabe!a pode ser evitada, mesmo considerando Nue no 8 recomendado acionar o
ipfirewall'3( remotamente, tanto de forma esttica Nuanto dinImica.
Se, de NualNuer maneira, voc# Nuiser carregar o ipfirewall'3( de um
computador remoto, ento recomendados Nue se fa!a da seguinte forma+
http://www.freebsdbrasil.com.br
Reproduo integral ou parcial permitida desde que as fontes originais sejam mencionadas.
IPFW-HOWTO

root@eeviac-R %ldload ipfw DD T
ipfw -N add GEPPP allow all from anC to anC
root@eeviac-R
Assim voc# vai automaticamente adicionar uma regra pra permitir todo o
trfego da rede, ao inv8s de bloNuea-lo, evitando assim Nue voc# perca a
conexo com a mNuina remota. >e NualNuer forma, 8 recomendvel Nue se carregue
o ipfirewall'3( dessa maneira em mNuinas locais tamb8m, especialmente se elas
estiverem conectadas em rede, pra no perder uma conexo em andamento.
Acionar o ipfirewall'3( no %ernel, de forma esttita em uma mNuina
remota, contudo, reNuer um pouco mais de trabalho. motivo 8 simples, Nuando
voc# termina de instalar um novo %ernel, voc# 8 obrigado a rebootar a sua
mNuina, ai sim, a partir da prOxima iniciali9a!o ela ir utili9ar o novo
%ernel. 6ontudo se voc# somente adicionar o ipfirewall'3( no %ernel, assim Nue
o sistema estiver no ar, ele no vai estar roteando os pacotes, ou se7a, voc#
no vai conseguir estabelecer uma conexo remota novamente com a mNuina. 4nto
antes de iniciali9ar o sistema com um novo %ernel voc# tem Nue definir alguma
maneira pra mNuina aceitar a sua conexo, pra Nue assim voc# no se7a
bloNueado pelo seu prOprio firewall.
$ra voc# fa9er isso, basta adicionar duas linhas no seu rc.conf, uma
Nue vai acionar o firewall na iniciali9a!o da mNuina, e outra pra definir o
tipo de firewall Nue vai ser iniciado. 5o caso firewall do tipo aberto '$45(.
4nto basta adicionar as seguintes entradas no seu ,etc,rc.conf+
firewallUenableVBW4SB
firewallUtCpeVB$45B
4xistem ainda outros tipos de firewall previamente definidos no
,etc,rc.firewall, mas nOs vamos tratar deles posteriormente. $or enNuanto vamos
come!ar com uma poltica de firewall aberta '$45(. Ainda existe uma
alternativa muito boa pra se definir uma poltica aberta como padro pro
ipfw';( no %ernel. "oc# pode simplesmente adicionar a seguinte linha no arNuivo
de configura!o do seu %ernel+
options /$0/14MA<<U>40A?<&U&UA664$&
5esse caso, as op!=es Nue nOs adicionamos no rc.conf anteriormente no
sero XnecessriasX, porNue nOs no vamos XprecisarX do ,etc,rc.firewall pra
configurar uma poltica aberta de firewall, porNue essa poltica 7 vai ser
iniciada por padro no %ernel. 6ontudo, ainda Nue voc# escolha definir uma
poltica de firewall padro no %ernel, 8 interessante adicionar aNuelas op!=es
ao ,etc,rc.conf porNue posteriormente nOs vamos usar o ,etc,rc.firewall pra
carregar nossas prOprias regras de configura!=es de firewall. Adicionar essas
op!=es ao ,etc,rc.conf tamb8m 8 vlido se voc# vai carregar o %ernel
dinImicamente, porNue se eventualmente seu sistema for reiniciali9ado, o mOdulo
ipfw.%o no vai ser carregado de forma automtica. As fun!=es de carregamento
do firewall pelo ,etc,rc.conf permite-nos carregar o mOdulo ipfw.%o
automaticamente.
Ainda existem outras op!=es pro ipfirewall'3( Nue so possveis se nOs
formos acionar o firewall de forma esttica no %ernel, at8 o incio da s8rie
3.x do 0reeAS> algumas dessas op!=es no podiam ser acionadas se no fosse de
http://www.freebsdbrasil.com.br
Reproduo integral ou parcial permitida desde que as fontes originais sejam mencionadas.
IPFW-HOWTO

forma esttica no %ernel, mas nas vers=es mais recentes foram definidas
algumas varivies do %ernel, mutveis via sCsctl';(, Nue no restringem mais
essas op!=es ao %ernel esttico. Al8m do /$0/14MA<<U>40A?<&U&UA664$& nOs ainda
temos as seguintes op!=es+
options /$0/14MA<<U"41AS4
options /$0/14MA<<U01MA1>
options /$0/14MA<<U"41AS4U</)/&VR

A op!o /$0/14MA<<U"41AS4 permite logar o trfego de pacotes com o
ipfirewall'3(, ecoando informa!=es sobre atividade dos pacotes pro sCslogd'3(,
em cada regra Nue tiver a op!o BlogB definida. "amos aborda-la com mais
detalhes posteriormente.
A op!o /$0/14MA<<U01MA1> permite Nue os pacotes se7am redirecionados
para outros hosts, utili9ando o comando BfwdB do ipfirewall'3(. 1edirecionar o
pacote '01MA1>( 8 fa9er com Nue ele siga de um ponto especfico 'host, rede,
porta( para outro. "amos tratar desse assunto com mais detalhes ao longo do
documento.
A op!o /$0/14MA<<U"41AS4U</)/&VR define um limite de pacotes Nue
sero logados para uma regra especfica. >essa forma, o sCslogd';( no ser
sobrecarregado com mensagens relativas @ atividades do ipfirewall'3(, os
comentrios do %ernel para essa op!o di9 Nue isso 8 uma forma de evitar
nega!o de servi!o com os logs gerados para algumas regras de firewall, caso um
possvel ataNue gere muitas ocorr#ncias da mesma regra. BRB deve ser
substitudo com o nYmero de ve9es Nue se dese7e Nue as atividades de cada regra
se7a logada. >essa forma, se definirmos, por exemplo
/$0/14MA<<U"41AS4U</)/&V.PP 'padro(, Nuando existirem .PP ocorr#ncias da
mesma regra, as informa!=es sobre a atividade de pacotes daNuela regra deixar
de ser logada.
Se voc# usa /$vG, as seguintes op!=es no %ernel tero efeito
correspondente sobre as a!=es do firewall Nuanto a pacotes /$vG+
options /$"G0/14MA<<
options /$"G0/14MA<<U"41AS4
options /$"G0/14MA<<U"41AS4U</)/&V.PP
options /$"G0/14MA<<U>40A?<&U&UA664$&
$ra habilitar as mesmas op!=es do ipfirewall'3( sem recompilar o seu
%ernel, voc# vai definir as variveis correspondentes por meio do sCsctl';(,
por exemplo+
e%sffa@eeviac-R sCsctl -w net.inet.ip.fw.verboseV.
e%sffa@eeviac-R sCsctl -w net.inet.ip.fw.verboseUlimitV.PP
e%sffa@eeviac-R sCsctl -w net.inet.ip.forwardingV.

Ainda existem mais Nuatro op!=es relacioadas ao ipfirewall'3( Nue podem
ser definidas no %ernel, mas no sero discutidas no momento, porNue no so
necessrias para a implementa!o bsica de um firewall. 4ssas op!=es envolvem
situa!=es mais complexas e especficas de roteamento de pacotes, e vamos tratar
delas assim Nue come!armos a tratar essas configura!=es.
http://www.freebsdbrasil.com.br
Reproduo integral ou parcial permitida desde que as fontes originais sejam mencionadas.
IPFW-HOWTO

2... ,etc,rc.firewall e firewalls com poltica aberta '$45 firewalls(L
Ainda Nue voc# defina ou no o tipo de firewall Nue voc# vai estar
trabalhando, sempre Nue a op!o firewallUenableVBW4SB 8 adicionada no rc.conf e
o sistema 8 iniciado, o ,etc,rc.firewall 8 lido e executado tamb8m, a partir
das configura!=es definidas no rc.conf, e os seguintes comandos so sempre
adicionados ao ipfw';(+
Z[fwcmd\ add .PP pass all from anC to anC via loP
Z[fwcmd\ add 2PP denC all from anC to .2J.P.P.P,;
A varivel Z[fwcmd\ 8 definida anteriormente no rc.firewall, implicando
Nuando o ipfw';( vai ser executado de forma silenciosa 'op!o -N( ou no. A
primeira regra em Nuesto, permite todo trfego proveniente da interface de
loopbac% 'a loP(, e a segunda regra bloNueia todo o trfego direcionado @ rede
localhost '.2J.P.P.P(. A primeira regra 8 necessria pra permitir comunica!o
inter-processos locais 'local /$6(, e a segunda regra evita Nue NualNuer pacote
externo adentre o endere!o de host local 'localhost address(, Nue 8 o endere!o
de loopbac%, protegendo assim o trfego local. Se essas regras no existirem e
o firewall tiver uma poltica padro fechada, voc# vai encontrar problemas na
iniciali9a!o de alguns servi!os, especialmente servi!os 1$6':(, entre outros
problemas.
$or isso vale ressaltar a impostIncia de se definir o firewall da forma
correta, onde o uso do ,etc,rc.firewall via rc.conf 8 altamente recomendvel.
Se voc# fi9er a op!o por um script shell Nue carregue todas as suas regras e
Nue se7a executado sempre Nue o sistema iniciar, voc# deve ficar atento a essas
e outras regras Nue no devem faltar ao seu firewall.
4m seguida, Nuando voc# define um firewall do tipo B$45B 'aberto( no
rc.conf, o rc.firewall ativa a seguinte regra no firewall+
Z[fwcmd\ add GEPPP pass all from anC to anC
4ssa regra permite Nue todo trfego externo se7a aceito como entrada
'com excesso pro loopbac%, 7 Nue a rede localhost 8 previamente bloNueada( e
todo o trfego interno se7a aceito como sada. A mesma fun!o do
/$0/14MA<<U>40A?<&U&UA664$& no %ernel. Se a poltica aberta 8 definida no
%ernel, a regra nYmero GEE:E vai ser automaticamente carregada como Ballow ip
from anC to anCB no lugar de BdenC ip from anC to anCB, posteriormente
adicionando a regra nYmero GEPPP. /sso cria uma redundIncia de poltica de
firewall aberta. 4nto, 8 mais indicado definir o tipo de firewall como
B?5F5M5B 'desconhecido( se voc# adicionou a poltica aberta
'/$0/14MA<<U>40A?<&U&UA664$&( no %ernel, e no Nuer permitir mais nenhuma
regra do rc.firewall. $ara isso, inclua as seguintes linhas no seu
,etc,rc.conf+

firewallUenableVBW4SB
firewallUtCpeVB?5F5M5B
Se voc# Nuer simplesmente habilitar o firewall para trabalhar algumas
http://www.freebsdbrasil.com.br
Reproduo integral ou parcial permitida desde que as fontes originais sejam mencionadas.
IPFW-HOWTO

regras e ver como o ipfirewall'3( do 0reeAS> funciona, ou ainda, apenas
bloNuear alguns hosts especficos, e manter as suas configura!=es propcias @s
suas prOprias regras, ento voc# pode seguramente pular pro nosso capulo :.
6ontudo, se sua inten!o 8 usar algum dos con7untos de regras nativas
7 existentes no rc.firewall, ou criar seu prOprio con7unto de regras, ento as
op!=es B$45B ou B?5F5M5B no so suficientes. 4nto no pule pra se!o :
'lol(.

2.2. 6arregando 1ulesets 'con7unto de regras(L
4xistem duas op!=es distintas em rela!o @ um com7unto de regras pro
seu firewall+ a primeira op!o 8 usar uma das defini!=es de firewall 7
existentes no rc.firewall, e a segunda 8 criar sua prOpria defini!o, com seu
prOprio con7unto de regras. s autores do firewwall nativo do 0reeAS>,
ipfirewall'3(, recomendam o segundo caso, por duas ras=es simples+
- "oc# pode customi9ar suas regras de firewall pra satisfa9erem da
melhor forma as suas necessidades, sem nunca tocar no rc.firewall, Nue pode ser
mantido como uma refer#ncia geral sempre Nue voc# precisar.

- "oc# vai ser obrigado a se familiari9ar com o uso do ipfw';( e sua
sintaxe, se tornando mais experiente na defini!o de firewall, e ficando mais a
vontade com o ipfw';(.
2.2... &ipos de 0irewall pr8-definidosL
S Obvio Nue a deciso final 8 a do administrador da rede, ou do
responsvel pelo firewall, no caso voc# Nue est lendo esse documento. Se voc#
preferir usar os con7untos de regras de firewall pr8-definidos no rc.firewall,
ento 8 recomendado Nue voc# leia todas elas, pra se tornar familiar e saber
exatamente como cada tipo de firewall funciona, antes de ativar NualNuer um dos
tipos pr8-definidos. controle Nue gerencia Nual defini!o de firewall
carregar 8 feito pela op!o firewallUtCpeVBB no rc.conf. Al8m de B$45B existem
ainda mais : tipos de firewall disponveis+
B6</45&B - 4ssa defini!o de tipo de firewall 'firewallUtCpe( permite
todo o trfego proveniente da rede local 'por exemplo, uma rede interna atrs
de 5A&( pra ela mesma. AloNueia pacotes fragmentados, permite Nue mensagens de
email, resolu!=es de nomes '>5S( e 5&$ se7am enviadas pra dentro e fora da
rede, e no permite nenhuma mNuina Nue este7a fora da rede interna iniciar
conex=es &6$ com mNuinas dentro da rede. Se a rede estiver por trs de uma
implementa!o bsica de 5A& sem nenhuma op!o de proxie carregada isso 7 seria
impossvel. 4sse tipo de firewall funciona com poltica aberta ou fechada,
definida no %ernel, ou se7a, no fa9 diferen!a se voc# colocou
/$0/14MA<<U>40A?<&U&UA664$& ou /$0/14MA<<U>40A?<&U&U>45W como padro.
BS/)$<4B - 4sse tipo de firewall 8 uma contradi!o. Apesar do nome
S/)$<4, ele 8 muito mais complexo Nue a defini!o 6</45&, e reNuer Nue o
usurio tenha algum conhecimento nos padr=es 106 de /nternet pra poder entender
suas defini!=es de regras de firewall. 4ssa regra vai evitar spoofing 't8cnica
onde uma mNuina se fa9 passar por outra, alterando seu endere!amento /$( no
http://www.freebsdbrasil.com.br
Reproduo integral ou parcial permitida desde que as fontes originais sejam mencionadas.
IPFW-HOWTO

permitindo a entrada de nenhum pacote Nue tenha um endere!o de retorno igual ao
endere!o de NualNuer host dentro da rede interna. "ai bloNuear todos os pacotes
endere!ados como de redes privadas, conforme definido na 106 .]2;, evitando o
trfego pra dentro ou fora da rede, e vai bloNuear ainda todas as redes no-
roteaveis, conforme definido no /nternet->rafts da /4&0 'disponvel em
http+,,www.ietf.org,internet-drafts,draft-manning-dsua-P:.txt(. 4sse tipo de
firewall vai permitir trfego de e-mail, de MMM, de >5S, e 5&$, e vai permitir
tamb8m pacotes fragmentados, e em rela!o @s conex=es &6$ iniciadas por hosts
fora da rede, o firewall no vai apenas bloNuear, como na defini!o 6</45&, vai
tamb8m logar todas essas tentativas.
B6<S4>B - &ecnicamente essa defini!o no 8 um con7unto de regras de
firewall, porNue no adiciona nenhuma regra. 5a verdade, aNui acontece tudo Nue
nOs insistimos Nue voc# deve evitar, ou se7a, estabelece uma poltica fechada,
negando todo e NualNuer trfego da rede 'exceto o trfego via loP Nue nOs vimos
anteriormente Nue 8 controlado por padro(. 4ssa defini!o simplesmente
desabilita todos os servi!os /$ na rede, a no ser Nue no seu %ernel voc# tenha
adicionado a regra de poltica aberta. 4nto, a7ustar o firewall pra 6<S4> vai
ser necessrio em casos XextremosX onde voc# prefere 'ainda Nue
temporariamente( tirar toda a sua rede de funcionamento. u se7a, no defina
como padro no rc.conf.
2.2.2. &ipos de 0irewall $ersonali9adoL
Se voc# decidiu estabelecer um con7unto de regras customi9ado, ento 8
recomendvel Nue voc# especifiNue um arNuivo, ao inv8s de um dos tipos de
firewall abordados acima. A maneira de se estabelecer esse tipo personali9ado
de firewall 8 a mesma, utili9ando a op!o firewallUtCpe no rc.conf, contudo,
basta indicar o caminho 'path( pro seu arNuivo de regras+
firewallUenableVBW4SB
firewallUtCpeVB,etc,rc.firewall.rulesB
>essa forma voc# vai poder definir sua prOpria configura!o de firewall
no arNuivo ,etc,rc.firewall.rules, o Nual ser carregado sempre Nue seu
firewall for iniciado. Se voc# preferir ainda Nue seu firewall se7a iniciado de
forma silenciosa, basta incluir no rc.conf+
firewallUNuietVBW4SB
formato do seu con7unto de regras ser apresentado de forma um
pouNuinho diferente nesse arNuivo, em rela!o ao Nue voc# encontra no
rc.firewall. motivo 8 simples, o rc.firewall 8 um Hshell scriptH sh'.(
escrito de forma Nue possa rodar por si prOprio, enNuanto o arNuivo Nue define
as suas regras personali9adas esto ali simplesmente para serem processadas
pelo ipfw';(. A principal diferen!a 8 Nue voc# no vai usar nada correspondente
@ varivel Z[fwcmd\ usada no rc.firewall. Simplesmente as regras.
$osteriormente, vamos construir um arNuivo de regras prOprio, e ento vamos ver
isso passo-a-passo.
:. Sintaxe de regras bsicas do /pfw';(L
http://www.freebsdbrasil.com.br
Reproduo integral ou parcial permitida desde que as fontes originais sejam mencionadas.
IPFW-HOWTO

A sintaxe das regras de firewall no 0reeAS> so simples. KualNuer regra
pode ser adicionada pelo console, com o comando ipfw';(. Antes de nos
aprofundarmos nas sintaxes das regras do ipfirewall'3(, contudo, vamos
verificar como podemos listar as regras Nue esto ativas no momento.
:... <istando 1egras AtivasL
A forma mais simples possvel de se listar as regras ativas no
firewall+
root@eeviac-R ipfw list
>essa forma, voc# vai estar listando todas as regras ativas no momento,
seguindo a ordem do nYmero da regra. $or exemplo+
root@eeviac-R ipfw list
PP.P. denC log logamount .PP tcp from anC to .]2..G;...P,23 .2:3E
PP.P2 denC log logamount .PP tcp from anC to .]2..G;...P,23 2.
PP.P: allow tcp from anC anC
GEE:E denC all from anC to anC
>essa forma, ainda Nue, a regra nYmero PP.P: tenha sido adicionada
antes da regra PP.P., a de nYmero menor ser mostra antes, porNue a ordem das
regras tamb8m influi na forma como o ipfirewall'3( vai se comportar.
$ra mostrar a data e hora da Yltima ve9 Nue um pacote coincidiu com uma
regra basta usar a op!o timestamp do ipfw';(+
root@eeviac-R ipfw -t list
PP.P. 0ri Sep 2. PG+:.+2: 2PP. denC log logamount .PP tcp from anC to
.]2..G;...P,23 .2:3E
PP.P2 &ue Sep .; PP+::+.2 2PP. denC log logamount .PP tcp from anC to
.]2..G;...P,23 2.
PP.P: Sat Sep 22 .]+.2+.E 2PP. allow tcp from anC anC
GEE:E denC all from anC to anC
root@eeviac-R date
Sat Sep 22 .]+.2+23 *)& 2PP.
u se7a, nesse caso, a Yltima ve9 Nue a regra PP.P. bloNueou um pacote
foi na madrugada do dia anterior, a regra PP.P2 bloNueou um pacote tamb8m aos
:: minutos de 2 dias atrs, e o Yltimo pacote permitido pelo firewall foi h ]
segundos. >etalhe no comando date posterior Nue ilustra a data corrente.
$or Yltimo, se nOs Nueremos listar o nYmero de ve9es Nue um pacote
passou 'ou foi bloNueado( por uma regra, e o nYmero de bCtes Nue esse trfego
gerou, podemos fa9er o seguinte+
root@eeviac-R ipfw -a list
ou
root@eeviac-R ipfw show
http://www.freebsdbrasil.com.br
Reproduo integral ou parcial permitida desde que as fontes originais sejam mencionadas.
IPFW-HOWTO

s dois comandos vo apresentar as mesmas informa!=es, dispostas da
mesma maneira. A primeira coluna 8 o nYmero da regra, em ordem como ela 8
verificada. A segunda coluna informa Nuantas ve9es aNuela regra coincidiu com
um pacote, seguido do 'terceira coluna( nYmero de bCtes Nue trafegaram pela
regra, e finalmente a regra em s. 4xistem algumas sintaxes curtas pra esses
comandos. $or exemplo, Bipfw sB tem o mesmo efeito Nue Bipfw showBL Bipfw lB o
mesmo Nue Bipfw listB, etc.

:.2. 6omandos bsicos e suas fun!=esL
A partir de agora nOs vamos, gradualmente, analisarmos cada op!o e
comandos disponveis pra se construir um con7unto de regras de firewall. $or
enNuanto no vamos abordar regras com as op!=es de stateful, ou se7a, estaremos
trabalhando com regras stateless. >urante os nossos exemplos, no vamos estar
utili9ando o programa de controle do firewall 'o ,sbin,ipfw(, Nue deve preceder
cada um dos nossos comandos, caso este7amos configurando as regras de forma
manual, pelo console do 0reeAS>. padro abordado 8 como deve ser Nuando
estamos trabalhando com um arNuivo de regras pra ser passado pro ipfw';( via
firewallUtCpeVB,caminho,pro,arNuivo.firewallB no rc.conf.
add .PPP allow all from anC to anC
4sse 8 o exemplo mais simples de uma regra. 5Os 7 encontramos a mesma
regra anteriormente, com uma Ynica diferen!a, Nue era o nYmero da regra.
<embre-se Nue, na se!o 2.. Nuando nOs discutimos sobre tipos de firewall
B$45B 'aberto( nOs trabalhamos com o parImetro BpassB, Nue 8 como ele foi
usado no rc.firewall. Aom, acontece Nue BpassB, BallowB e BpermitB so
sin^nimos pro ipfirewall'3(, eles tem o mesmo efeito, contudo as varia!=es
permitem Nue o administrador fiNue o mais a vontade possvel para escrever as
suas regras Nuase Nue de forma literal. 5essa regra, BallB 'todos( os pacotes
vindos de BanCB 'NualNuer( lugar para BanCB 'NualNuer( destino so permitidos
'BallowB(.
5o ipfirewall'3(, grande parte das ve9es, sempre Nue um pacote combinar
com uma regra, o ipfirewall'3( pra de examinar as outras regras pra aNuele
pacote, ou se7a, a ordem como as regras so processadas no firewall do 0reeAS>
so do tipo Bfirst match winsB onde, a primeira constata!o do pacote evita Nue
as outras se7am lidas. $or isso 8 extremamente importante estar atento a ordem
'nYmero( das regras. Sob circunstIncias especiais as outras regras podem ser
procesadas.
4nto, de forma geral, a sintaxe mais simples pro ipfw'3( 8+
_comando` a_nYmero da regra`b _a!o` _protocolo` from _origem` to
_destino`
s _comandos` mais importantes so BaddB e BdeleteB. ?ma simples
tradu!o seria o suficiente pra explicar Nue BaddB adiciona uma regra e
BdeleteB a exclui. _nYmero da regra` varia de P at8 GEE:E, e indica a ordem
Nue essas regras sero processadas no firewall, portanto a Yltima regra sempre
define a poltica padro do firewall no %ernel. )esmo se voc# tiver uma
poltica de firewall aberta '$45( definida no seu ,etc,rc.conf, a Yltima regra
vai sempre indicar a poltica do %ernel. /sso 8 Otimo porNue, como a ordem de
busca das regras para de processar ao encontrarem uma regra Nue combina com o
http://www.freebsdbrasil.com.br
Reproduo integral ou parcial permitida desde que as fontes originais sejam mencionadas.
IPFW-HOWTO

pacote, e se a penYltima regra 8 a de nYmero GEPPP, definida pelo rc.firewall
pra permitir todo o trfego da rede, ento todo trfego vai ser liberado, mesmo
Nue a Yltima regra 'GEE:E( negue todos os pacotes, 7 Nue essa regra nunca vai
ser processada.
B_a!o`B na sintaxe do ipfw';( pode ser uma das seguintes+
BallowB c BpassB c BpermitB c daccepte - Kuando uma regra define essa
a!o, sempre Nue um pacote combinar com essa regra, ser permitido seu
roteamento pelo firewall, e o processamento das regras Xpra esse pacoteX
termina.
BdenCB c BdropB - KualNuer pacote Nue combinar com uma regra cu7a a!o
se7a BdenCB ou BdropB so silenciosamente bloNueados pelo firewall, e o
processamento das regras Xpra esse pacoteX termina.
add ..PP denC all from anC to anC
4ssa regra nega todos os pacotes vindos de NualNuer origem e indo pra
NualNuer destino.
BresetB - Kuando um pacote encontra uma regra com essa a!o, o pacote 8
bloNueado, e o ipfirewall'3( tenta enviar um sinal 'flag( de &6$ 1eset '1S&(
pro endere!o de origem do pacote. processamento das regras Xpra esse pacoteX
termina. 6omo esse tipo de regra apenas se aplica pra pacotes &6$, o protocolo
especificado na regra deve ser BtcpB, para Nue apenas tais pacotes se7am
processados por essa regra, e no todos 'proto BallB( os protocolos de pacotes
/$.
"ale notar Nue o uso do BresetB pode ser muito interessante pra enganar
ferramentas Nue escaneiam as redes 'networ% scanners(, 7 Nue normalmente podem
detectar um servi!o por trs de uma porta filtrada, mesmo Nue ele este7a por
trs de um firewall de bloNueio. $or outro lado, se algu8m estiver praticando
um ataNue do tipo Bnetwor% floodB em uma porta especfica a Nual o
ipfirewall'3( est configurado para responder com pacotes 1S&, isso duplicaria
o uso da sua banda de rede. ?ma solu!o simples 8 bloNuear, com uma regra
pr8via o endere!o da mNuina Nue est agindo dessa forma, endere!o esse obtido
de forma dinImica por monitoramento.
add .2PP reset tcp from anC to anC
4ssa regra HprecriaH 'risos( bloNuearia todas as conex=es &6$ vindas
de NualNuer destino, indo para NualNuer origem, e responderia com um pacote 1S&
para cada uma delas.
BcountB - &odos os pacotes Nue combinarem com uma regra cu7a a!o se7a
BcountB, determinar Nue o ipfirewall'3( incremente o contagem de pacotes, ou
se7a, a sada de Bipfw showB indicar mais uma ocorr#ncia de pacotes nessa
regra. )otivos estatsticos Obvios. processamento das regras do firewall
continuam a buscar por outras regras Nue combinem com os pacotes.
add .:PP count all from anC to anC
add .:.P count all from 2PP.2:P.EP.P,23 to .]2..G;...P,23
http://www.freebsdbrasil.com.br
Reproduo integral ou parcial permitida desde que as fontes originais sejam mencionadas.
IPFW-HOWTO

4ssa 'primeira( regra incrementa o nYmero de ve9es Nue um pacote passou
pelo firewall, vindo de NualNuer lugar e indo pra onde Nuer Nue se7a. Q a
segunda regra conta Nuantos pacotes, dentre todos, estariam sendo enviados da
rede 2PP.2:P.EP.P,23 'origem( pra rede .]2..E;...P,23 'destino(. ?ma observa!o
aNui+ se o processamento das regras fosse terminado Nuando um pacote encontra
uma regra cu7a a!o se7a BcountB, ento, no exemplo acima a regra .:.P no
teria serventia alguma.
Bs%ipto _nYmero da regra`B - &odos os pacotes Nue combinem com uma
regra cu7a a!o se7a Bs%ipto _nYmero`B vo fa9er com Nue o ipfirewall'3(
continue processando esse pacote e buscando ocorr#ncia nas regras Nue se7am de
ordem maior ou igual ao _nYmero da regra` indicado pela a!o.
add .3PP s%ipto .;PP all from .]2..G;...P,23 to anC
4ssa regra faria com Nue todo o trfego vindo da rede .]2..G;...P,23 e
indo pra NualNuer destino se7a processado pelas regras a partir da regra de
nYmero .;PP
Bre7ectB - 4ssa a!o 8 pouco utili9ada atualmente. Kuando um pacote
combina com uma regra cu7a a!o se7a Bre7ectB, ento o ipfirewall'3( bloNueia
esse pacote e responde com uma mensagem /6)$ do tipo Bhost unreachableB, dando
a impresso Nue a mNuina se encontra fora da rede. 4ssa 8 uma forma no
silenciosa de negar o trfego pelo firewall, contudo, assim como a a!o
BresetB, essa a!o tamb8m aumenta o uso da sua banda de rede.
:.:. 4specificando $rotocolosL
$rotocolo 'proto( em BprotocoloB na sintaxe bsica de uso do ipfw';(, 8
o protocolo de comunica!o Nue voc# Nuer Nue aNuela regra combine. >efini!=es
de protocolos do tipo BipB ou BallB so especifica!=es gerais Nue englobam
todos os protocolos. s protocolos mais comuns so BicmpB, BudpB e BtcpB, mas a
rela!o de protocolos com os Nuais o ipfirewall'3( trabalha 8 enorme. 5a
verdade so todos os protocolos possveis de uma rede. $ara uma lista completa
das possibilidades, fiNue a vontade+
root@eeviacbsd-R cat ,etc,protocols
:.3. 4specificando endere!os de rigem e de >estinoL
endere!o de destino e de origem de um pacote tem o mesmo formato em
uma regra de firewall. 4les podem ser um nome, definido no ,etc,hosts e
resolvido por >5S, pode ser um endere!o /$, um endere!o de rede com mscara de
rede 'bitmas%,netmas%( e, ainda podem definir uma ou vrias portas, se o
protocolo for tcp ou udp. ?sar nomes ou endere!os /$ 8 indiferente, basta
atentar ao fato Nue a resolu!o de nomes via >5S pode mudar sem seu
conhecimento pr8vio.
add .PPP allow all from minhamaNuina to outramaNuina
add ..PP denC all from .P.P.P.E to anC
A primeira regra permite todo o trfego vindo da BminhamaNuinaB para a
BoutramaNuinaB, e a segunda regra nega toda conexo da mNuina .P.P.P.E para
NualNuer outra esta!o. Sempre Nue um pacote coincidir com uma regra do
http://www.freebsdbrasil.com.br
Reproduo integral ou parcial permitida desde que as fontes originais sejam mencionadas.
IPFW-HOWTO

firewall, o processamento pra aNuele pacote termina, e o pacote 8 permitido ou
negado, de acordo com a a!o definida pela regra. 4sse 8 um exemplo muito
simples de um filtro baseado em esta!=es, ou dhost-based filteringe, Nue filtra
de acordo com o destino ou origem do pacote. ?m firewall por filtragem de redes
funciona de forma similar, distinguindo-se apenas a nota!o de redes, onde 8
necessrio definir a mscara de subrede 'netmas%( ou ainda o bitmas%. "e7amos+
add 2PPP allow all from .]2..G;.P.P,.G to anC
add 2.PP denC all from anC to .P.P.P.P+2EE.P.P.P
A primeira regra permite todo o trfego de pacotes vindo da rede cu7o
con7unto de endere!os /$ come!a em .]2..G;.P.P at8 .2]..G;.2EE.2EE. A regra usa
uma mscara 'bitmas%( pra indicar a abrang#ncia do endere!amento da rede. A
mscara em bits tamb8m conhecida como bitmas% especifica Nuantos bits do
endere!o de rede '.]2..G;.P.P( devem permanecer o mesmo pra cada pacote. 5esse
caso, os primeiros .G bits dos :2 bits do endere!o vo continuar os mesmos.
6omo os primeiros .G bits so os primeiros dois octetos do endere!amento da
rede, ento todos os endere!os cu7a origem se7a a indicada nos dois primeiros
octetos 'ou nos .G bits iniciais(, nesse caso a rede .]2..G;, sero permitidos
por essa regra.
A segunda regra tem uma fun!o similar, utili9ando as mscaras de rede.
A mscara de rede 'netmas%( indica Nuantos bits do endere!o de rede deve ser
monitorado pelo regra do firewall. 5o exemplo acima, a segunda regra 'nYmero
2.PP( tem a mscara de rede 2EE.P.P.P. primeiro octeto dessa regra 8 definido
como Hbits altosH, ou se7a, os primeiros ; bits so Hbits altosH, o Nue indica
pro firewall Nue apenas os pacotes cu7os primeiros ; bits do endere!o da rede
devem ser filtrados. 6omo os primeiros ; bits da rede 8 igual a .P, ento todos
os pacotes cu7o endere!o de destino se7a .P no primeiro octeto 'ou se7a, toda a
faixa de .P.P.P.P at8 .P.2EE.2EE.2EE( vo combinar com essa regra, e ento
sero bloNueados, como indicado na a!o da regra 'denC(.
firewall do 0reeAS> oferece ainda a possibilidade de inverter a
expresso apresentada na regra com o comando dnote. $or exemplo, para Nue o
ipfirewall'3( bloNueie todos os pacotes Nue no se7a da esta!o .]2..G;.P.:+
add .PPP denC all from not .]2..G;.P.:
:.3... ?ma introdu!o @ 5etmas% e Aitmas%L
princpio bsico Nue envolve mscaras de rede e bits de rede 'netmas%
e bitmas%( so simples, mas freNuentemente confundidos por pessoas Nue no
tenham muito conhecimento em redes, e ainda reNuer um pouco de no!o de nYmeros
binrios. S muito mais prtico se nOs trabalharmos com endere!o /$ em sua forma
binria, contudo, a confuso Nue existe entre os conceitos binrios e decimais
costuma ser decisiva pra algu8m sem muitos conhecimentos em rede. >e NualNuer
forma, para uma refer#ncia rpida, a seguinte tabela ilustra Nue faixa de
endere!amento /$ corresponde a Nual bitmas% e respectivo netmas% em uma classe
6 de rede. Alguns breves exemplos de bitmas% e netmas% adicionais so
ilustradas, denotando algumas defini!=es pra redes maiores.
Aitmas% 5etmas% &otal de /ps /$s ?sveis
:2 2EE.2EE.2EE.2EE . .
http://www.freebsdbrasil.com.br
Reproduo integral ou parcial permitida desde que as fontes originais sejam mencionadas.
IPFW-HOWTO

:. 2EE.2EE.2EE.2E3 2 .
:P 2EE.2EE.2EE.2E2 3 2
2] 2EE.2EE.2EE.23; ; G
2; 2EE.2EE.2EE.23P .G .3
2J 2EE.2EE.2EE.223 :2 :P
2G 2EE.2EE.2EE..]2 G3 G2
2E 2EE.2EE.2EE..2; .2; .2G
23 2EE.2EE.2EE.P 2EG 2E3
...
22 2EE.2EE..]2.P .G:2P .G:.;
2P 2EE.2EE..2;.P :2JG; :2JGG
.G 2EE.2EE.P.P GEE:G GEE:3
.2 2EE..2;.P.P ;.:;;GP;feG
;.:;;GPGfeG
; 2EE.P.P.P 2EGg:
'2EGg:(-2
P P.P.P.P 'todos /$s( 2EGg3 '2EGg3(-2
6omo voc# pode ver existe um padro definido. nYmero de endere!o
total de uma rede sempre sobra a partir da mscara Nue lhe foi atribuida, e o
nYmero total de /ps disponveis 'Nue podem ser usados por esta!=es( 8 sempre o
total disponvel na rede menos 2 'total h 2(. motivo tamb8m 8 simples, para
cada rede,subrede existem dois endere!os /$ reservados para o endere!o da rede
e para o endere!o de broadcast da rede. Yltimo octeto da mscara de rede
'netmas%( come!a com 2EE e sempre se decrementa em valores mYltiplos de 2,
enNuanto o bitmas% se decrementa em mYltiplos de ..
"amos ver, de forma sucinta como usar a tabela acima. "amos descobrir
ento Nual 8 a faixa de /$s Nue comp=e uma subrede cu7o endere!o se7a+
.J2..G..PP.:2,2;
primeiro detalhe ao Nual atentamos 8 Nue o endere!o da rede 8
.J2..G..PP.:2, ento sabemos Nue a subrede inicia nesse valor, ou se7a, o
endere!o de rede 8 .]2..G..PP.:2. 4nto percebemos Nue o bitmas% do endere!o 8
2;. /sso Nuer di9er Nue todos os primeiros 2; bits do endere!o so Hbits
altosH, ou se7a, so endere!os Nue no mudam. $ortanto, conclumos de forma
lOgica Nue temos apenas 3 bits a7ustados como Hbits baixosH, 7 Nue um endere!o
completo de rede tem :2 bits, e 2; so altos 'conforme indicado pela bitmas%(
subtraindo 2; de :2 restam-nos 3 bits 'os bits baixos(. Sabemos agora Nue
existem apenas 2 valores possveis para cada bit, 7 Nue o endere!amento no
decimal 8 binrio. 4nto elevamos dois 'possibilidades binrias( @ Nuatro
'bits(+ 2g3. Agora sim 7 temos o nYmero de esta!=es Nue aNuele bitmas% est
indicando+ 2g3 V .G.
Agora basta somar+ .J2..G..PP.:2 f .G V .J2..G..PP.3;, portanto a faixa
de endere!amento /$ varia de .J2..G..PP.:2 at8 .J2..G..PP.3;L Se olharmos na
tabela apresentada cima, veramos Nue .G endere!os /$ corresponde a um bitmas%
de 2;, Nue 8 o nosso caso. >essa forma poderamos ter evitado todo esse clculo
matemtico para encontrarmos o valor exato. )as, vale lembrar Nue, nem sempre
essa tabela vai estar disponvel pra voc# consultar, a menos Nue voc# a imprima
e ande com ela na carteira, portanto 8 muito mais valioso aprender como o
endere!amento funciona e aplicar os clculos necessrios. Aprenda uma ve9 e use
http://www.freebsdbrasil.com.br
Reproduo integral ou parcial permitida desde que as fontes originais sejam mencionadas.
IPFW-HOWTO

sempre.
:.3.2. 4specificando $ortas e 0aixas de $ortasL
"oc# pode tamb8m controlar o trfego de conex=es baseando-se em
filtragem de portas. /sso possibilita Nue voc# permita ou negue acesso a um
servi!o em especfico ao inv8s de controlar o trfego das esta!=es todas. A
defini!o das portas em uma regra de firewall com ipfw';( 8 feita apOs a
declara!o do endere!o de origem ou do endere!o de destino, simplesmente
definindo a porta apOs o endere!o. ?ma faixa de portas pode ser especificada
com um hfen, podem ser separadas por vrgula, ou ainda, em casos mais
elaborados, pode-se usar um netmas% pra definir a faixa de portas. S importante
lembrar Nue voc# no pode definir dalle como protocolo na regra Nue especifica
portas, porNue nem todos os protocolos trabalham com portas.
add .PPP allow tcp from anC to .J2..G.P.E 2E
add ..PP allow tcp from anC to .J2..G.P.E .P2.-.P2:
add .2PP allow tcp from anC to .J2..G.P.E 2.,22,2:
add .:PP denC udp from anC to .]2..G;.P.E .P23+;
5a primeira regra, todos os pacotes &6$ cu7o destino 8 a porta 2E da
esta!o .J2..G.P.E so permitidos pelo firewall. 5a segunda regra todas as
conex=es &6$ cu7o destino se7a NualNuer porta da faixa .P2. at8 .P2: da esta!o
.J2..G.P.E tamb8m so permitidas pelo ipfirewall'3(. 5a terceira regra, todos
os pacotes &6$ destinados @s portas 2., 22 ou 2: na esta!o .J2..G.P.E 8
permitida. 4, finalmente na Nuarta regra, todos os pacotes ?>$ destinados pra
faixa de portas de .P23 @ .P2; na esta!o .J2..G.P.E so bloNueados. A
apresenta!o da faixa de portas na Yltima regra 8 interessante, porNue fa9 uso
de uma netmas% pra declarar a mesma. )as a matemtica tamb8m 8 bem simples.
6omo agora estamos tratando de Aitmas% pra porta .P23, o valor pra ela 8 .P
bits, e como a mscara indica ; bits, tiramos ; possibilidades de .P, restando-
nos apenas 2 bits. 6omo o valor de cada bit 8 binrio, elevamos os bits
disponveis '2( aos valores possveis 'binrio V 2(+ 2g2, ento temos 3 portas
Nue comp=e a faixa de endere!amento da porta .P23, ou se7a, de .P23 at8 .P23f3
V .P23 at8.P2;.
uso de mscaras para defini!o de faixas de portas so raramente
usadas, mas so bem mais interessantes do Nue o uso de bitmas% ou netmas% pra
endere!os /$, 7 Nue o nYmero de bits de uma porta varia dependendo da porta em
Nuesto. $or isso o uso de hfen 8 recomendado pra se definir uma faixa de
portas, e vrgulas Nuando se dese7a definir vrias portas em uma mesma regra.
)as a declara!o de mscaras para as portas indica Nue o firewall foi
construdo por algu8m Nue domina completamente as defini!=es de endere!amento
de redes, e 8 est8titamente mais proveitoso.
3. Sintaxe de regras avan!adas do ipfw';(L
4mbora o overview anterior sobre as cria!=es de regras do ipfw';( se7a
o bastante pra cobrir a maioria dos cenrios e necessidades simples de um
firewall, ele se mostra solenimente curto pra muitas situa!=es mais complexas,
como por exemplo, Nuando o sistema possui mais de uma interface de rede 8
possvel Nue se Nueira definir a!=es especiais para algumas combina!=es de
pacotes, ou ento Nue se Nueira um maior controle sobre o direcionamento do
http://www.freebsdbrasil.com.br
Reproduo integral ou parcial permitida desde que as fontes originais sejam mencionadas.
IPFW-HOWTO

trfego. 4nto, vamos expandir o modelo de sintaxe Nue estvamos trabalhando no
ipfw';( para o seguinte+
_comando` a_nYmero da regra`b _a!o` alog alogamount _nYmero`bb _proto`
from _origem` to _destino` a_interface-spec`b a_op!=es`b
&odas as op!=es entre colchetes fa9em men!o @ novas funcionalidades
Nue iremos discutir nessa se!o. 5Os vamos inclusive cobrir uma nova Ba!oB Nue
no foi relatada anteriormente. A Sintaxe pode parecer inicialmente confusa,
mas nOs vamos com calma, e montaremos as regras aos poucos.
3... A a!o BunreachBL
$rimeiramente, vamos introdu9ir uma nova Ba!oB+
Bunreach _cOdigo`B - KualNuer pacote Nue combine com uma regra cu7a
a!o se7a BunreachB, ser respondido com um cOdigo H/6)$ unreachH 'cOdigo /6)$
de indisponibilidade(, e posteriormente a leitra do con7unto de regras ser
terminada. As possibilidades de cOdigos pro H/6)$ unreachH pode ser indicada
por nYmero ou por nome. Segue agora uma breve lista de H/6)$ unreach codesH 'os
cOdigos em Nuesto( e seus nomes correspondentes. Se voc# no sabe onde esses
cOdigos so utili9ados, no tem porNue voc# tentar usa-los+
net P net-prohib ]
host . host-prohib .P
protocol 2 tosnet ..
port : toshost .2
needfrag 3 filter-prohib .:
srcfail E host-precedence .3
net-un%nown G precedence-cutoff .E
host-un%nown J
isolated ;

3.2. 6ontrole de /nterface e 0luxoL

?ma das mais importantes funcionalidades do ipfw';(, Nue no foi
comentada anteriormente na se!o : desse documento 8 o controle de fluxo e de
interface, ou se7a, a possibilidade de criar regras Nue verifiNuem os pacotes
de acordo com uma interface em especial 'aplicvel Nuando voc# tem um sistema
com mYltiplas interfaces de rede(. 4ssas regras podem identificar de onde esses
pacotes esto vindo, e em Nue dire!o esto indo. At8 agora o senso de dire!o
Nue nOs adotamos simplesmente definia os endere!os de origem e de destino, mas
usar apenas essas op!=es pra definir de onde um pacote est vindo ou pra onde
ele est indo via firewall no 8 muito confivel. Kuando voc# Nuer filtrar
pacotes Nue esto apenas entrando ou saindo pela rede, as op!=es BinB e BoutB
podem ser utili9adas com preciso. Ambas op!=es 'BinB e BoutB( correspondem ao
campo Binterface-specB no modelo de sintaxe dado anteriormente, e normalmente,
so definidas prOximas ao final de cada regra, antecedendo NualNuer possvel
op!o extra. >essa forma, Nuando decidirmos filtrar todos os pacotes vindos de
NualNuer lugar e indo pra NualNuer lugar, poderamos definir+
add .PPP allow all from anC to anC in
$ra filtrar pacotes indo atrav8s de uma interface em particular,
http://www.freebsdbrasil.com.br
Reproduo integral ou parcial permitida desde que as fontes originais sejam mencionadas.
IPFW-HOWTO

podemos usar a op!o literal BviaB, seguida do nome da interface. >essa forma,
se estivermos usando uma placa de rede :6om :cE]x $6/, sua interface ser
BxlPB. $ra filtrarmos NualNuer pacote, vindos especialmente dessa interface,
com origem e destinos NuaisNueres, o seguinte seria o suficiente+
add ..PP allow all from anC to anC in via xlP
u talve9, se voc# tiver um sistemas com mYltiplas interfaces, e Nuiser
filtrar todos os pacotes vindos de NualNuer lugar e indo pra NualNuer lugar,
mas Nue este7a ao menos saindo via XalgumaX interface, pode fa9er o seguinte+

add .2PP allow all from anC to anC out via anC
"oc# vai notar Nue, Nuando voc# listar as regras de firewall, as
entradas Nue estiverem usando BinB ou BoutB combinadas com BviaB, no
apresentaro a utili9a!o do BviaB mas apresentar a cita!o BrecvB ou BxmitB,
dependendo da defini!o de um BinB ou um BoutB respectivamente. "e7a sO+
root@eeviac-R ipfw add JPPP allow all from anC to anC out via xlP
root@eeviac-R ipfw list c grep JPPP
PJPPP allow ip from anC to anC out xmit xlP
root@eeviac-R
$ortanto, voc# pode usar BrecvB ou BxmitB no lugar de BviaB Nuando voc#
for criar alguma regra Nue fa!a uso de BinB e BoutB, contudo isso no 8
preciso, o ipfirewall'3( distingui se a interface est recebendo o transmitindo
o dado, e, al8m do Nue, essa defini!o pode confundir usurios no experientes.
5o geral, essas op!=es oferecem muito mais controle sobre o trfego da
rede em um sistema de interfaces mYltiplas, e NualNuer outro sistema em geral,
visto Nue elas permitem a filtragem de pacotes especficos vindo para o
firewall, saindo por ele, e se deslocando atrav8s de uma interface
especificada.

3.:. 6ombinando tipos de pacotes /6)$ e &6$ especficosL
$acotes /6)$, &6$ e /$ so apresentados em vrios formatos distintos.
4sses tipos de pacotes so definidos por vrias UflagsU 'op!=es de
identifica!o(. 5Os podemos filtrar cada um desses tipos usando uma das
seguintes op!=es do ipfw';(, ao final de cada regra+
3.:... icmptCpes 'tipos icmp(L
BicmptCpes _tipo`B - 4ssa op!o filtra o pacote /6)$ do _tipo`
definido, e inverte a op!o se uma HiH 'exclama!o( for devinida antes do
_tipo`, ou se7a, todos os pacotes Nue no forem desse tipo sero combinados.
4xiste, atualmente .E tipos diferentes de pacotes /6)$ Nue podem ser filtradosL
cada um 8 definido por um nYmero. "oc# pode ainda especificar faixas de
HicmptCpesH utili9ando hfen ou separando-os por vrgula. s .E tipos de
pacotes /6)$ so+
P - 4cho 1eplC '1esposta de 4cho(
: - >estination ?nreachable '>estino /ndisponvel(
3 - Source Kuench 'rigem extinta(
http://www.freebsdbrasil.com.br
Reproduo integral ou parcial permitida desde que as fontes originais sejam mencionadas.
IPFW-HOWTO

E - 1edirect '1edire!o(
; - 4cho 1eNuest '$edido de 4cho(
] - 1outer Advertisement 'S$A) de roteamentoj +-((
.P - 1outer Solicitation '$edido de 1oteamento(
.. - &ime-to-<ive 4xceeded '&&< 4xcedido(
.2 - /$ header bad '6abe!alho /$ malformado(
.: - &imestamp 1eNuest '$edido de &imestamp(
.3 - &imestamp 1eplC '1esposta de &imestamp(
.E - /nformation 1eNuest '$edido de /nforma!o(
.G - /nformation 1eplC '1esposta de /nforma!o(
.J - Address )as% 1eNuest '$edido de )scara de 1ede(
.; - Address )as% 1eplC '1esposta de )scara de 1ede(
Se voc# ficou curioso pra saber como esses tipos /6)$, especialmente o
tipo :, correspondem aos cOdigos de indisponibilidade Nue podem ser criados com
a op!o BunreachB, ento, saiba simplesmente Nue o tipo : identifica NualNuer
um desses cOdigos, ou se7a, todos. ?sar filtros de pacotes /6)$ 8 muito Ytil,
especialmente pra controlar pingL por exemplo, voc# pode permitir Nue NualNuer
cliente dentro da sua rede interna pingue NualNuer esta!o pra fora da rede,
enNuanto voc# bloNueia Nue NualNuer esta!o externa pingue o seu gatewaC, ou
NualNuer outro cliente interno. As tr#s regras a seguir definem isso
facilmente+
add .PPP allow icmp from anC to anC out icmptCpes ;
add ..PP allow icmp from anC to anC in icmptCpes P
add .2PP denC icmp from anC to anC in icmptCpes ;
A primeira regra permite Nue todos os pacotes icmp do tipo ; 'pedido de
echo( possam trafegar pra fora do firewall. A segunda permite Nue todos os
pacotes icmp do tipo P 'resposta de echo( entrem pelo firewall, e a regra
seguinte bloNueia todos os pacotes icmp do tipo ; de entrarem. 4m resumo,
permite Nue NualNuer cliente fa!a um pedido de echo pra fora, e permite a
entrada da resposta pra dentro do firewall, e no permite Nue ningu8m de fora
fa!a um pedido de echo pra dentro do firewall, ou se7a, todomundo protegido
pelo firewall pode pingar NualNuer esta!o externa, mas ningu8m de fora pode
pingar dentro. 5aturalmente essas op!=es sO podem ser definidas Nuando o
protocolo da regra for BicmpB.
3.:.2. tcpflags, setup D establishedL
Btcpflags _flag`B - 4ssa op!o filtra NualNuer pacote &6$ cu7o
cabe!alho contenha alguma das flags 'op!=es( identificadas. ?ma defini!o
inversa tamb8m pode ser utili9ada se colocarmos uma HiH 'exclama!o( antes da
_flag`, dessa forma filtrando todos os pacotes &6$ Nue no possuam a _flag` em
Nuesto. "e7a as op!=es de HflagsH+
fin - 1eNuest for connexion termination 'pedido de
finali9a!o da conexo(
sCn - 1eNuest for connexion initiation 'pedido de
iniciali9a!o da conexo(
rst - 1eset 6onnexion '1edefini!o da 6onexo(
psh - $ush 0lag 'op!o $ush(
ac% - Ac%nowledgement 'conhecimento, concordIncia com a
conexo(
http://www.freebsdbrasil.com.br
Reproduo integral ou parcial permitida desde que as fontes originais sejam mencionadas.
IPFW-HOWTO

urg - /ndicate ?rgent A data 'indica um A de dados
urgentes(
A _flag` SW5 8 a mais interessante, visto Nue ela 8 enviada Nuando uma
conexo &6$ 8 iniciada. $or ser to importante, existe inclusive uma op!o
separada do ipfw';( dedicada especialmente pra definir pacotes &6$ cu7o
cabe!alho tenha a flag SW5 a7ustada. 4ssa op!o se chama BsetupB. S claro Nue
sO podemos trabalhar com a op!o BsetupB Nuando o protocolo indicado 8 o BtcpB.
BsetupB - KualNuer regra contendo essa op!o vai filtrar todos os
pacotes &6$ cu7o cabe!alho indiNue a flag SW5 a7ustada. >essa forma, se
Nui9ermos simplesmente negar todos os pacotes &6$ Nue estiverem entrando no
firewall com o cabe!alho SW5 definido, temos duas op!=es+
add denC tcp from anC to anC in tcpflags sCn
? S/)$<4S)45&4+
add denC tcp from anC to anC in setup
4m cada uma dessas regras, a mesma a!o 8 tomada+ todos os pacotes &6$
SW5 vindos de NualNuer 'anC( origem para NualNuer 'anC( destino sero negados.
"ale a pena ilustrarmos a necessidade do protocolo ser BtcpB Nuando
trabalharmos essas regras.
BestablishedB - 4xatamente como existe uma op!o especial Nue
identifica um pedido de iniciali9a!o de conexo &6$ 'BsetupB(, existe tamb8m
uma op!o Nue identifica Nuando uma conexo 7 est estabelecida, ou se7a, 7a
foi iniciada. $ela grande importIncia de facilitar o controle de conex=es &6$,
as op!=es BestablishedB e BsetupB foram disponibili9adas, dessa forma
oferecendo facilidade na cria!o de regras. ?tili9ando estas op!=es 'ou mesmo
suas defini!=es nativas correspondentes @s BtcpflagsB( podemos ter inicialmente
um controle de conex=es &6$ mais simples. 4ssa 8 a base de implementa!=es
BstatefulB de um firewall. "amos trabalhar com elas de forma mais detalhada
depois.
3.:.:. ipoptionsL
Bipoptions _flag`B - 0inalmente podemos trabalhar com alguns pacotes /$
especficos. A _flag` Nue define um tipo de pacote /$ 8 nomeada SS11 'para+
Strict Source 1oute(, <S11 'para+ <oose Source 1oute(, 11 'para+ 1ecord $ac%et
1oute(, e &S 'para+ &imestamp(. Se voc# no sabe pra Nue serve cada uma dessas
flags, ento no haver necessidade de construir regras Nue fa!am uso delas.
3.3. 1econhecendo $acotes 0ragmentadosL
$acotes fragmentados podem ser filtrados com a op!o BfragB do ipfw';(.
5a grande maioria dos casos, os pacotes fragmentados devem ser bloNueados pelo
firewall. 1eceber um nYmero grande de pacotes fragmentados pode indicar a
emin#ncia de um ataNue do tipo >oS '>enial of Service - ou 5ega!o de Servi!o(.
)esmo considerando Nue o 0reeAS>, e a maioria dos outros sistemas ?5/k de
verdade no so sucetveis a esse tipo de ataNue, os sistemas Mindows so
freNuentemente muito vulnerveis. >essa forma, se voc# tem clientes Mindows por
trs do firewall, dentro da sua rede, 8 recomendvel bloNuear pacotes
http://www.freebsdbrasil.com.br
Reproduo integral ou parcial permitida desde que as fontes originais sejam mencionadas.
IPFW-HOWTO

fragmentados pra protege-los.
Kuando voc# for usar a op!o BfragB pra filtrar 'e bloNuear( os pacotes
fragmentados, tem duas regrinhas bsicas Nue voc# deve seguir. A primeira 8 Nue
voc# no pode usar BfragB Nuando tamb8m estiver usando a op!o BtcpflagsBL voc#
define NualNuer pacote fragmentado, ou no define nenhum. A segunda+ voc#
tamb8m no pode utili9ar o BfragB se estiver especificando portas &6$ ou ?>$L
voc# bloNueia todos os pacotes fragmentados, no importando pra Nual porta ou
servi!o eles este7am sendo enviados. >ito isso, podemos facilmente definir uma
regra pra negar todos os pacotes fragmentados Nue estiverem entrando na rede+
add denC all from anC to anC in frag

3.E. 0iltragem baeada em ?/> e */>L
?ma poderosa fun!o Nue outros firewall 'como o /$0ilter( no possuem 8
a filtragem de pacotes baseada em */>,?/>. /pfirewall'3( tem a capacidade de
filtrar pacotes de acordo com o ?/> ou */> do dono do processo o Nual originou
uma conexo. $or motivos lOgicos sO se pode filtrar pacotes Nue tenham sido
gerados por processos locais. As op!=es a serem utili9adas so BgidB ou BuidB
seguidos do */>,?/> ou do nome do usurio,grupo Nue estivermos filtrando.
?m uso em potencial dessa fun!o 8 restringir o nYmero de /$s virtuais
em um servidor de shell. Se voc# Nuer se assegurar Nue um ou mais losts
"irtuais no podero ser usados por ningu8m mais Nue o dono do /$ virtual, voc#
pode definir uma regra baseada em filtragem de ?/>, para Nue, dessa forma, todo
o trfego do host virtual Nue no se7a do prOprio usurio se7a bloNueado+
add allow tcp from anC to .J2..G.P..P in
add allow tcp from .J2..G.P..P to anC out uid patric%
add denC tcp from .J2..G;.P..P to anC
4ssas regras permitem Nue apenas o usurio Hpatric%H vai poder utili9ar
a alias de /$ 'Apelido de /$, /$-Alias ou /$ vhost( .J2..G;.P..P pra
estabelecer conex=es &6$ pra fora da rede. 5ingu8m mais ser permitido pendurar
Aots, 6lientes de /16 ou NualNuer outra coisa Nue precise estabelecer conexo
&6$ 'Nuase tudo( nesse endere!o /$. protocolo ?>$ tamb8m pode ser usado para
filtragem de pacotes baseada em ?/>,*/>, contudo nenhum outro protocolo fora
esses dois podem.
utra utili9a!o possvel pra ?/>,*/> seria habilitar limita!o de uso
de banda para cada usurio, ao inv8s de limitar pra cada esta!o ou rede. $or
exemplo, voc# pode definir um grupo de usurios Nue tenham contas rpidas de
0&$, definindo uma regra pro */> em Nuesto, e em contrapartida ter um grupo de
usurios de shell Nue no precisam de muita banda. "amos ilustrar outras
limita!=es de bandas definidas por */> posteriormente, Nuando estivermos
cobrindo o Btraffic shapingB com ipfirewall'3(.
$or motivos de seguran!a, talve9 se7a necessrio voce logar o trfego
de rede de um usurio em particular, e nesse caso o filtro baseado em ?/>,*/>
tamb8m viria bem a acalhar. 5a verdade sempre Nue se Nueira definir um
comportamente distinto do firewall com base no usurio Nue acessa o servi!o, o
?/>,*/> do ipfw';( sempre vem bem a acalhar. ?ma peNuena dica 8 sempre definir
as regras baseadas em ?/>,*/> antes das outras regras, visto Nue o
http://www.freebsdbrasil.com.br
Reproduo integral ou parcial permitida desde que as fontes originais sejam mencionadas.
IPFW-HOWTO

ipfirewall'3( termina a verifica!o da lista das regras Nuando um pacote
combina com alguma das regras em uso. /sso garante desempenho e evita Nue se
bloNueie ou permita um pacote antes de verificar Nual usurio originou o
trfego.
E. <ogs '<ogging(L
E... $ropriedades de <ogsL
As vantagens de manter os logs do firewall ativo so Obvias. A
possibilidade de verificar posteriormente Nuais conex=es foram negadas, de Nue
endere!os elas vieram, pra Nue rede ou esta!o elas estavam indo, se o conteYdo
dos pacotes eram fragmentados 'indicantivo de muitos ataNues de nega!o de
servi!o h >oS(, enfim, possibilita saber onde as conex=es esto sendo feitas,
por Nuem e Nuando. 4m especial, os logs de firewall so importantes pra
rastrear crac%ers ou pessoas m intencionadas.
)as logar tamb8m tem o seu lado negativo, se voc# no for cuidadoso.
>ependendo do tipo de dado Nue voc# est logando voc# pode se perder com a
abundIncia de mensagens, e tamb8m utili9ar muito espa!o em disco pros arNuivos
de logs. AtaNues de nega!o de servi!o Nue tendem a sobrecarregar discos
rgidos 8 um dos tipos mais antigos de atividade m intencionada, e por
incrvel Nue pare!a ainda 8 sin^nimo de perigo pra administradores imprudentes.
$or isso a importIncia de se definir Nue tipos de regras sero logadas.
5ormalmente logar pacotes permitidos de servi!os pYblicos 'como MMM( no 8 uma
boa ind8ia, visto Nue o prOprio servi!o 'servidor MMM( tamb8m mant8m logs das
atividades de acesso, e a freNu#ncia de pacotes em um servi!o como esse 8 muito
grande.
$or outro lado, o Nue a maioria dos novos administradores Nue
experimentam Nuando eles habilitam o ipfirewall'3( pra logar, 8 o seu terminal
abarrotado com mensagens sobre a atividade de pacotes. 4sse peNueno
inconveniente 8 o resultado da combina!o de+
- estar logando regras Nue combinam com pacotes muito freNuentesL
- no ter desabilitado logs pro console e pros terminais de root
'p8ssima id8ia(L
- no estar controlando limite de logs com o /$0/14MA<<U"41AS4U</)/&L
E.2. 6onfigura!=es de <ogs do sistemaL

E.2... p!=es do FernelL
$ra habilitar os logs do ipfirewalll'3( no 0reeAS>, voc# tem Nue
incluir ao menos as seguintes op!=es no %ernel 'no se esNue!a de iniciar seu
sistema com o novo %ernel apOs a compila!o do mesmo(+
options /$0/14MA<<U"41AS4
"oc# ainda pode habilitar a seguinte op!o+
options /$0/14MA<<U"41AS4U</)/&VR
5Os 7 mencionamos essas op!=es anteriormente, Nuando estavamos revendo
http://www.freebsdbrasil.com.br
Reproduo integral ou parcial permitida desde que as fontes originais sejam mencionadas.
IPFW-HOWTO

a ativa!o do firewall. 4ssa segunda op!o do %ernel limita o nYmero de
mensagens consecutivas enviados ao sistema de logs do 0reeAS>, o sCslogd';(,
Nuando dada regra do firewall 8 ativada. $ortanto, Nuando voc# aciona essa
op!o no %ernel, o nYmero de mensagens consecutivas relacionada a uma conexo
em particular 8 limitada ao valor 'nYmero( especfico. 6onsidere o seguinte+
options /$0/14MA<<U"41AS4U</)/&V.P
6om essa entrada definida no seu %ernel, apenas .P mensagens
consecutivas a respeito de determinada conexo sero logadas no sCslogd';(, e
todas as outras ocorr#ncias seriam identificadas sob uma expresso gen8rica
como por exemplo+
Qan 2] P:+2G+EE meuservidor last message repeated 3E times
5ormalmente essas mensagens so logadas em ,var,log,messages al8m de
serem impressas no console do sistema tamb8m. Se voc# Nuiser modificar esse
comportando do sCslogd';(, voc# ter Nue editar o ,etc,sCslog.conf.
sCslog.conf'E( oferece uma flexibilidade considervel em rela!o @ configura!o
sobre as formas com Nue o sCslogd';( vai tratar as mensagens do sistema.
limite definido pra /$0/14MA<<U"41AS4U</)/& fica @ crit8rio do administrador,
mas valores acima de .P 7 proporciona um trfego alto de mensagens em
servidores muito reNuisitados. )as se voc# Nuer definir um arNuivo separado pra
logar tudo de forma distinta, ao inv8s de simplesmente logar no arNuivo padro
',var,log,messages(, isso pode ser feito tamb8m, e ainda, se voc# 7ulgar ter
espa!o em disco o bastante pra trabalhar com rotacionamento de logs '<og
1otation( voc# no precisa definir a op!o de limite de verbosidade no Fernel.
E.2.2. 6onfigurando o sCslog';(.
"oc# pode configurar o sCslogd';( pra logar as atividades do
ipfirewall'3( em um arNuivo separado, seguindo tr#s passos relativamente
simples+
.( 6rie o seu novo arNuivo de log para o ipfw';( e, como
alternativa, crie tamb8m o diretOrio de logs Nue voc# achar conveniente. "amos
assumir ento Nue voc# Nuer Nue todos os logs relativos ao ipfirewall'3( se7am
arma9enados em ,var,log,ipfw,ipfw.log. >essa forma voc# vai ter Nue criar o
diretOrio em Nuesto ',var,log,ipfw( e em seguida o arNuivo de log 'ipfw.log(
sob tal diretOrio, pra isso vai utili9ar o comando touch'.(+
e%sffa@eeviac-R m%dir ,var,log,ipfw DD touch ,var,log,ipfw,ipfw.log
e%sffa@eeviac-R
&enha certe9a Nue o diretOrio e arNuivo em Nuesto no tenham
permiss=es de leitura pra outros usurios seno o dono do arNuivo, por Nuest=es
Obvias de seguran!a.
2( 6onfigure o sCslog.conf'E( pra enviar todas as mensagens
relativas ao ipfirewall'3( pro arNuivo ,var,log,ipfw,ipfw.log. A forma mais
fcil de fa9er isso 8 adicionar as seguintes linhas no final do sCslog.conf'E(+
iipfw
X.X ,var,log,ipfw,ipfw.log
http://www.freebsdbrasil.com.br
Reproduo integral ou parcial permitida desde que as fontes originais sejam mencionadas.
IPFW-HOWTO

Atente pra usar _&AA` 'tecla tab( nesse arNuivo ao inv8s de espa!os
simplesmente. )esmo assumindo Nue usar dtabse no 8 obrigatOrio no 0reeAS> pro
arNuivo ,etc,sCslog.conf, 8 de bom costume fa9#-lo, caso voc# trabalhe tamb8m
com outros ?5/k, cu7a maioria no aceita espa!os no sCslog.conf'E(. $ortanto
mesmo voc# podendo ignorar a mensagem de advert#ncia no incio do
,etc,sCslog.conf, 8 sempre bom manter o bom hbito seguro de usar o
sCslog.conf'E( da forma indicada por ele.
"oc# vai reparar Nue as mensagnes do tipo Blast messages repeated R
timesB 'ou se7a+ Yltimas mensagens repetidas R ve9es( sero tamb8m logadas,
al8m desse arNuivo, pra NualNuer outro cu7o sCslog.conf'E( aponte as seguintes
entras+
X.err, %ern.debug, X.notice

4 ainda, o console tamb8m ir receber todas essas mensagens, como
definido na linha+
X.errL%ern.debugLauth.noticeLmail.crit ,dev,console

<embre-se Nue o console na verdade 8 apenas o ttCvP 'A<&f0.(. s
consoles virtuais e pseudo terminais se comportaro de forma distinta em
rela!o @ mensagens. $or padro as seguintes linhas definiro Nuando as
mensagens forem enviadas pra outros terminais+
X.err root
X.noticeLnews.err root
X.alert root
X.emerg X
As linhas X.err e X.notice iro logar mensagens do %ernel e tamb8m as
exibiro no terminal onde o usurio especificado estiver logado. 5ote Nue o
usurio em Nuesto 8 o HrootH, ento, como por padro voc# no deve logar como
root a toa, o usurio root ser sempre alertado. 5o se recomenda de forma
alguma Nue essas linhas se7am comentadas, informa!=es de log para o root e pro
terminal so extremamente importantes pra se manter atento a NualNuer coisa
errada Nue estiver acontecendo com o servidor. Se por bom senso voc# costuma
estar muito logado com outro usurio Nue no se7a o root, tamb8m 8 considervel
configurar o sCslogd';( pra alertar o seu usurio.
4nto vamos resumir o Nue deve ser feito Nuando voc# for configurar
seus logs pelo arNuivo de configura!o sCslog.conf'E(+
/nsira a linha com diipfwe e indiNue o caminho pra onde as informa!=es
referentes @s atividades do 0irewall devem ser logadas.
5o altere as mensagens Nue sero enviadas ao usurio 1oot se ele estiver
logado. /ndiNue os mesmos alertas pra um usurio Nue voc# usa com mais
freNu#ncia.
:( 4nvie um sinal de reiniciali9a!o pro processo do sCslogd';(. A
forma mais fcil 8 usando o comando+
e%sffa@eeviac-R %illall -l?$ sCslogd
e%sffa@eeviac-R
http://www.freebsdbrasil.com.br
Reproduo integral ou parcial permitida desde que as fontes originais sejam mencionadas.
IPFW-HOWTO

E.2.:. 6onfigura!o do newsCslog';( pra fa9er 1ota!o 'ou
1otacionamento( de <ogs 'log rotation(L
Agora Nue o ipfirewall'3( est configurado pra logar todas suas
atividades, voc# deveria pensar seriamente em configurar o newsCslog.conf'E( de
forma a garantir Nue o newsCslog';( v rotacionar os logs do ipfirewall'3(, ou,
como alternativa, optar por algum outro mecanismo de rotacionamento de logs.
$ra se ter uma boa no!o de todas as configura!=es possveis do
newsCslog.conf'E( 8 recomendado Nue voc# leia a pgina de manual 'man
newsCslog.conf( do arNuivo. 4ssa 8 uma poderosa ferramenta de logs, mas no tem
porNue nOs explicarmos ela aNui, isso 8 tarefa pra um captumo sobre
administra!o do sistema 0reeAS>, pro nosso caso de 0irewall especfico a
seguinte entrada deve ser o bastante+
,var,log,ipfw,ipfw.log GPP .P X ZMP>2 m
4ssa linha pode ser adicionada no final do arNuivo newsCslog.conf'E(. A
primeira entrada 8 um tanto Nuanto Obvia, ela indica Nual arNuivo vai ser
rotacionado. A segunda indica os bits de permiss=es pros arNuivos rotacionados.
A terceira parte 8 o nYmero de arNuivo de logs Nue se dese7a manter
rotacionando at8 Nue o mais antigo se7a apagado. seguinte 8 o tamanho do
arNuivo Nuando ele deve ser rotacionado, no estamos usando essa op!o. A
Nuintar parte 8 Nuando 'tempo( nOs devemos rotacionar o arNuivo, e finalmente a
Yltima op!o, 8 uma op!o especial. 6omo voc# 7 deve ter concludo, rota!o de
logs so definidas por dois crit8rios+ tamanho ou data. 5o nosso caso, nOs
indicamos Nue Nueremos Nue o arNuivo de log se7a rotacionado @s duas da manh
de todo domingo, no importando o tamanho do arNuivo de log. >epois definimos
'a Yltima op!o especial, dme( Nue o arNuivo deve ser comprimido com g9ip'.(
sempre Nue rotacionar, e definimos Nue vamos manter um histOrico arNuivado de
.P semanas. Se voc# dese7a manter seus logs por mais Nue .P semanas basta
alterar o valor .P pra NualNuer um Nue voc# Nueira. u o ideal, criar uma
rotina Nue fa!a bac%up em uma mNuina separada 'um <oglost( a cada .P semanas,
ou ento gravar seus <ogs em 6> ou NualNuer outra mdia barata e de grande
capacidade Nuando for necessrio.
?ma ve9 configurado, o newsCslog.conf'E( vai cuidar do rotacionamento
dos logs do ipfirewall'3(. newsCslog.conf'E( 8 ativado pelo cron';( do
0reeAS>, e por isso no precisa de um >aemon rodando, conseNuentemente voc# no
tem Nue reiniciar nenhum processo. "oc# pode criar seu prOprio script pra
rotacionar logs ou usar de terceiros, com tanto Nue voc# confie. >e NualNuer
forma 8 bom decidir uma maneira de controlar o crescimento dos logs dentro do
seu sistema. <embre-se, no existe nada Nue o cron';( e um script no possa
fa9er nesse caso.
E.:. 6onfigura!o de <og nas 1egrasL
?ma ve9 Nue tudo este7a pronto pra utili9ar as fun!=es de logs do
ipfirewall'3(, vamos come!ar a definir Nuais regras nOs Nueremos logar Nuando
elas forem filtradas. 4xistem dois parImetros bsicos pra usarmos em con7unto
com nossas regras pra definirmos Nue Nueremos logar XaNuelaX regra. "e7amos+
BlogB h S o parImetro mais comum. &oda ve9 Nue uma regra Nue for
definida o dloge for acionada, ento a a!o definida 'dactione( por aNuela
http://www.freebsdbrasil.com.br
Reproduo integral ou parcial permitida desde que as fontes originais sejam mencionadas.
IPFW-HOWTO

regra ser logada todas as ve9es Nue um pacote coincidir a regra. $or isso tome
muito cuidado pra no defnir dloge pra uma regra Nue a tero pacotes
freNuentementes assimilados a ela, como por exemplo+
add PEPP allow log all from anC to anC
4ssa 8 uma regra Nue permite todo o trfego de todos os tipos de
pacotes de todas as redes pra todas as redes, ento imagine a freNu#ncia de
informa!=es Nue sero logadas sempre Nue cada pacote for permitido pelo seu
firewall. 4sse tipo de regra pode facilmente proporcionar problemas pro seu
disco local L-(
$or outro lado, definir dloge pra uma regra geral de nega!o 8 uma
pedida considervel+
add GEPPP denC log all from anC to anC
4ssa regra 8 mais considervel, porNue 8 uma das Yltimas, em uma
poltica clara de firewall do tipo d6<S4>e ou se7a, tudo Nue deve ser
permitido 7 o foi nas regras anteriores Nue suponhamos existir, portanto nos
interessa manter logs das conex=es negadas. Al8m do Nue o nYmero da regra 8
GEPP, o Nue, em rela!o @ regra anterior 'EPP( 8 muito mais seletiva, visto Nue
8 uma das Yltimas regras a serem checadas. $reste muita aten!o pra escolher
Nuais regras voc# Nuer logar e Nuais voc# no Nuer.
Blogamount _nYmero`B - 4sse parImetro em seguida ao dloge define o
nYmero mximo de ve9es Nue uma regra vai ser logada. 4sse parImetro 8 anlogo @
entrada de limite de verbosidade no %ernel, e da muito mais controle ao
administrador Nue pode, por exemplo, definir um nYmero baixo pra uma
determinada regra, e 9erar a mesma uma ve9 ao dia, dessa forma sO deixando de
logar o perodo Nue um possvel ataNue ocorrer. 4ssa defini!o 8 possvel no
0reeAS> 3.x, 0reeAS> 2.2.x e 0reeAS> s8rie : acina de :.3.x. 5as vers=es
anteriores @ :.3 no 0reeAS> :.x o padro do dlogamounte era .P.
Sempre Nue uma regra 8 logada, as informa!=es geradas pra tal pacote
so+
- >ata D lora
- 5Ymero da 1egra
- A!o
- 4ndere!os /$ do >estino D rigem
- $ortas de rigem D >estino
- >ire!o do 0luxo
- A >evice onde o trfego aconteceu.
$or defini!o, uma regra de firewall sua, Nuando logada, deve parecer
com o seguinte+
ct P] .;+E]+:. Sua)aNuina ,%ernel+ ipfw+ GEPPP >enC &6$
.J2..G.P..+G2:PJ .]2..G;.P..+2: in via xlP
G. /ntrodu!o @ filtragem HStatelessH e HStatefulH de pacotesL
A filtragem de pacotes do tipo HStatefullH e HStatelessH so dois
termos freNuentemente encontrados em discuss=es cu7o assunto se7a ipfilter'3( e
http://www.freebsdbrasil.com.br
Reproduo integral ou parcial permitida desde que as fontes originais sejam mencionadas.
IPFW-HOWTO

ipfirewall'3(. modo de filtragem HStatelessH tende a tratar cada pacote
roteado pelo firewall como pacotes individuais, Nue no tenham associa!o
alguma com NualNuer outro trfego Nue tamb8m estiver passando pela dada
interface do firewall. 4sse tipo de filtragem 8 o mais comum e o mais fcil de
implementar, e tem vantagens efetivas Nuando se pretende+
- filtrar pacotes corrompidos 'fragmentados(
- filtrar pacotes de protocolos especficos 'icmp, udp, igmp, etc(
- fa9er um firewall baseado em host 'ou se7a filtrando de acordo com o
destino e,ou origem do pacote(
Q uma filtragem do tipo HStatefulH 8 mais complexa de ser
implementadaL esse tipo de filtro trata o trfego como sendo composto de
determinadas conex=es, ou se7a os pacotes pertencem a uma dada conexo, negada
ou permitida, e no trata pacotes como individuais. &oda a comunica!o atrav8s
de NualNuer protocolo usa nYmeros de seNu#ncia Nue indicam em Nue ordem os
pacotes sero lidos em um soc%et'2(. 4sse 8 o primeiro princpio bsico das
informa!=es Nue um firewall HStatefulH precisa conhecer. segundo 8 Nue,
conex=es orientadas @ protocolos como &6$, geram trfego de pacotes especiais
Nue indicam o incio de uma conexo 'SW5( e o fim da mesma '0/5(. 4sse ponto
tamb8m 8 essencial a um firewall do tipo HStatefulH. 5o geral, voc# deve+
- saber @ Nue estado pertence uma conexo 'iniciada, no iniciada, em
negocia!o, terminada, etc(
- ser capa9 de determinar se uma conexo esta se comportando de forma
esperada, com procedimentos validos, ou se ela est se comportando de forma
indevida. "oc# deve ser capa9 de filtrar os pacotes Nue se comportarem de forma
indevida.
?m firewall do tipo HStatefulH cria regras dinImicas pras conex=es Nue
estiverem em andamento, e elimina essas regras Nuando a conexo foi terminada.
/sso permite ficarmos atento de forma mais inteligente @s atividades da rede.
$or outro lado um firewall do tipo HstatefulH so incapa9es de filtrar cada
pacote individualmente, exatamente pelo fato dele criar regras dinImicas
especiais Nue permitem uma conexo em sua totalidade, examinando se o
comportamento dessa conexo est aceitvel. 4m compensa!o, 8 muito fcil
7untar regras de firewall do tipo HstatefulH e do tipo HstatelessH em um mesmo
firewall, dependendo apenas do Nuanto o administrador do sistema 8 bom. 4
normalmente administradores de 0reeAS> 7 so muito bons por nature9a, portanto
podem se beneficiar dos dois tipos de firewall.
Kuase todas as regras Nue nOs apresentamos anteriormente eram
HstatelessH. As unicas excess=es foram as regras a respeito das op!=es
Btcpflags,B Bsetup,B e BestablishedB Nue permitiam Nue nOs checassemos o estado
de uma conexo &6$. "amos ento usar uma combina!o dessas regras pra um
primeiro exemplo prtico de regras HstatefulH. Antes um pouNuinho de histOria.
4sse tipo de verifica!o primitiva de estado de conexo 'tcpflags, etc( existe
no ipfirewall'3( fa9 muito tempo, contudo essas op!=es eram as Ynicas, o Nue
fa9ia a capacidade do ipfirewall'3( de criar regras HstatefulH muito limitada.
$or isso anteriormente @ verso 3.x do 0reeAS> o ipfirewall'3( era chamado de
tipicamente HstatelessH, enNuanto o ipfilter era a op!o HstatefulH disponvel.
A partir do 0reeAS> 3.P o ipfirewall'3( foi habilitado a trabalhar com
funcionalidades HstatefulH mais extensivas, e mais desenvolvimento a respeito
disso est em andamento no ipfirewall'3(.
http://www.freebsdbrasil.com.br
Reproduo integral ou parcial permitida desde que as fontes originais sejam mencionadas.
IPFW-HOWTO

G... 6onfigura!=es HStatefulH /niciaisL
$ro nosso primeiro exemplo, vamos estar usando as caractersticas mais
bsicas e conhecidas do ipfirewall'3( pra tratar filtragem HstatefulH. A
maioria dos administradores mais atentos Nue costumam ler as regras de firewall
pr8 definidas no ,etc,rc.firewall, costumaram fa9er largo uso das fun!=es
dsetupe e destablishede, Nue comp=e a maiora das regras nesse arNuivo. )esmo
essas regras podendo ser usadas exclusivamente pra controlar conex=es &6$ de
forma HstatefulH, o Nue demonstra certa limita!o, vamos criar no nosso
primeiro exemplo um con7unto simples de regras Nue filtram conex=es ao servi!o
SSl de forma HstatefulH+
add .PPP allow tcp from anC to anC established
add 2PPP allow tcp from anC to anC 22 in setup
"amos assumir Nue estamos usando uma poltica de firewall fechado 'ou
se7a, firewallUtCpe no ,etc,rc.conf no est definido como d$45e e no existe
a entrada /$0/14MA<<U>40A?<&U&UA664$& no %ernel do sistema(. 5esse caso, as
duas regras anteriores vo permitir o roteamento dos pacotes dese7ados. A regra
nYmero .PPP vai permitir todos os pacotes Nue se7am parte de uma conexo &6$ 7
estabelecida, e ento a verifica!o das regras subseNuentes vai cessar para
aNueles pacotes. Se, por outro lado algum pacote no fi9er parte de uma conexo
iniciada, a regra .PPP no ser assumida, e ento a verifica!o passa pra regra
seguinte. 5a regra nYmero 2PPP, se o pacote for do tipo &6$ SW5, e for
destinado @ porta 22 'servi!o SSl(, a regra vai permitir Nue ele se7a roteado.
5esse caso, pacotes &6$ SW5 iniciam uma conexo &6$, por isso a importIncia de
deixa-los passar. s pacotes subseNuentes relacionados ao servi!o SSl sero
permitidos pela regra .PPP, 7 Nue eles faro parte de uma conexo 7
estabelecida. "oc# pode experimentar uma configura!o parecida usando
HstatelessH+
add .PPP allow tcp from anC to anC out
add 2PPP allow tcp from anC to anC 22 in

5esse exemplo, todos os pacotes saindo pelo firewall, vindos de
NualNuer fonte pra NualNuer destino sero permitidos, e todos os pacotes
entrando pela porta 22 tamb8m sero permitidos. 5esse caso voc# vai perceber
Nue as regras no ficam monitorando os pacotes &6$ pra verificarem de Nue tipo
eles so, se so de iniciali9a!o de uma conexo ou de uma conexo 7
estabelecida, e em contra-partida permitem Nue todos os pacotes &6$ saiam pelo
firewall ou entrem pela porta 22, sem verificar Nue pacotes so esses.
4ssa 8 a ess#ncia de um firewall do tipo HstatefulH utili9ando dsetupe
e dstablishede+ >eixa passar pedidos de iniciali9a!o de conex=es de um servi!o
'porta( especfico, e depois da conexo estar estabelecidade permite Nue todo o
trfego funcione normalmente.
"amos dar uma olhada em um exemplo memos simples, Nue envolve conex=es
ssh, email, 0&$ e >5S pra rede .J2..G.P.P,2J+
add .PPP allow tcp from anC to anC established
add 2PPP allow tcp from anC to .J2..G.P.P,2J 2.,22,2E setup
add :PPP allow udp from .J2..G.P.P,2J to anC E:
add :.PP allow udp from anC E: to .J2..G.P.P,2J
http://www.freebsdbrasil.com.br
Reproduo integral ou parcial permitida desde que as fontes originais sejam mencionadas.
IPFW-HOWTO

5esse exemplo, o pedido de inicio de conexo 'usando dsetupe( 8
permitido pras portas 2., 22, 2E '0&$, SSl e S)&$ respectivamente( Nuando os
pacotes so destinados @ rede .J2..G.P.P. 6onseNuentemente todas as conex=es
&6$ estabelecidas sero permitidas na regra anterior. As regras :PPP e :.PP
permitem pacotes ?>$ pra porta E: de outros hosts, e permite pacotes ?>$ vindos
da porta E: de NualNuer lugar entrarem pelo firewall. 4ssas duas Yltimas regras
so HstatelessH. A porta E: 8 a porta onde o servi!o de nomes '>5S( roda. A
regra .PPP deve ser dfrom anC to anCe porNue os pacotes &6$ de conex=es 7
estabelecidas devem ser permitidas vindo de NualNuer origem pra NualNuer
destino. <embre-se sempre Nue existe o fluxo em duas dire!os, os pacotes vindos
de algum lugar e as suas respostas pra outro lugar.
"amos anali9ar um caso especial+ 0&$. Se voc# fosse fa9er um firewall
cu7as regras fossem exclusivamente HstatelessH, voc# teria Nue manter todas as
portas entre a .P23 e a GEPPP abertas. motivo 8 simples, o protocolo 0&$ 8 um
protocolo revoltadinho Nue estabelece suas conex=es em NualNuer porta no
reservada, ou se7a NualNuer porta acima da .P23. ?ma solu!o no muito prtica
8 liberar as portas 2. e 22 de forma HstatelessH e for!ar seus clientes 0&$ a
estabelecerem conex=es exclusivamente no-passivas '0&$ )odo $assivo(.
problema 8 Nue nem todos os seus clientes 'como os Nue usam Mindows por
exemplo( tem muita no!o de 0&$ a ponto de coloca-lo em modo np-passivo, por
mais simples Nue isso se7a. 5esse caso, portanto, permitimos a iniciali9a!o de
uma conexo na porta 2. 'onde todas as reNuisi!=es 0&$ iniciam( e
posteriormente permitimos o roteamento de pacotes pertencentes @ essa conexo
por NualNuer porta 'utili9ando dstablishede(. 4ssa 8 a forma mais eficiente de
se controlar 0&$ via firewall, e essa prtica pode ser adotada pra outros
servi!os Nue tenham comportamente similar a esse.
G.2. 6onfigura!=es HStatefulH Avan!adasL

6omo 7 foi dito, configura!=es de firewall HstatefulH usando apenas
dsetupe e destablishede so muito limitadas. 4xatamente por permitir controle
de conex=es stateful apenas sobre o protocolo &6$, essa filtragem 8 a mais
simples existente. >esde a verso 3.P do 0reeAS>, o ipfirewall'3( adotou
caractersticas HstatefulH baseada em Otimos argumentosL agora pode-se
controlar conex=es &6$, ?>$ e /6)$ de forma HstatefulH, al8m de outros tipos de
pacotes, usando o Nue nOs chamamos de regras dinImicas.
1egras dinImicas 8 uma caracterstica recente do ipfirewall'3( no
0reeAS> 3.xL como seu prOprio nome sugeste, so regras dinImicamente criadas
pra conex=es independentes. 6ada regra dinImica depois de um certo perodo de
tempo sem serem utili9adas so descarregadas. tempo Nue uma conexo &6$ leva
pra ser terminada pode ser controlada por inYmeras varivels do sCsctl';(, ou
se7a, de certa forma um con7unto de regras monitora no somente o incio de uma
conexo, mas tamb8m Nuando essa conexo 8 terminada, e a7usta suas a!=es de
acordo a configura!o utili9ada.

?ma op!o e um comando so utili9ados pra controlar esse comportamente
HstatefulH avan!ado+
B%eep-stateB h Kuando um pacote 8 combinado com uma regra Nue tenha
essa op!o a7ustada, ento uma regra dinImica 8 iniciada.
http://www.freebsdbrasil.com.br
Reproduo integral ou parcial permitida desde que as fontes originais sejam mencionadas.
IPFW-HOWTO

Bchec%-stateB - 4sse comando define Nue a verifica!o das regras pelo
firewall vai primeiro checar as regras dinImicas. Se no existir uma regra com
esse comando em todo o con7unto de regras do seu firewall, ai as regras
dinImicas sero verificadas no momento em Nue a op!o d%eep-statee for
definida. Se uma regra com esse comando combinar com um pacote, a verifica!o
das regras 8 terminada, do contrrio a verifica!o continua.
"amos ento voltar ao nosso exemplo anterior, onde tnhamos regras
destinadas @ permitir apenas conex=es SSl, mas dessa ve9 vamos usar regras mais
avan!adas de HstatefulH+
add .PPP chec%-state
add 2PPP allow tcp from anC to anC 22 in setup %eep-state

SO lembrando, essa regra presume Nue a poltica do seu firewall se7a
fechada. 5as regras acina, a primeira regra fa9 com Nue o ipfirewall'3(
verifiNue as regras dinImicas. Se o pacote no pertence a nenhuma conexo 7
estabelecida 'ou se7a, no fa9em parte de nenhuma regra dinImica( ento a
verifica!o continua na regra 2PPP, onde, se o pacote for do tipo &6$ SW5
entrando pela porta 22 'SSl(, a a fun!o d%eep-statee
ordena a cria!o de uma regra dinImica, Nue ser sempre verificada na
constata!o da regra .PPP. &odos os outros pacotes seriam bloNueados pela sua
regra padro de firewall fechado.
Aom, nOs 7 havamos trabalhado com regras desse tipo utili9ando as
outras fun!=es de HstatefulH e tamb8m utili9ando HstatelessH. Agora, essa nossa
nova abordagem, utili9ando a op!o d%eep-statee e o comando dchec%-statee
proporciona algumas vantagens sobre as outras configura!=es de firewall. Antes,
a op!o dstablishede permitia a ocorr#ncia de NualNuer pacote &6$ vindo de uma
conexo &6$ previamente estabelecida, ainda Nue esse pacote fosse spoofado e
no fosse um pacote legtimo dessa conexo &6$. A expresso dspoofe define um
tipo de pacote Nue tra9 consigo informa!=es de origem manipulada, ou se7a o
pacote no legtimo se fa9 passar por um pacote Nue na verdade no 8 ele. S uma
t8cnica no muito simples e Nue pode ser evitada de vrias formas, uma delas 8
a verifica!o pelo firewall. 5essa nossa nova abordagem, cada regra dinImica 8
criada para uma conexo especfica entre duas pontas 'dois hosts( e suas
respectivas portas, ou se7a, um pacote &6$ spoofado poderia manipular seu
endere!o de destino e de origem, mas no manipularia a porta 'a no ser com
muita sorte( onde a conexo foi efetivada, e onde a conexo &6$ legtima est
sendo mantida. >essa forma a regra .PPP 'dchec%-statee( falha, no permitindo o
roteamento do pacote, e posteriormente a regra seguinte '2PPP( tamb8m falharia,
a no ser Nue o pacote fosse do tipo &6$ SW5, e dessa forma o pacote 8 negado
pra regra final da poltica padro fechada do firewall.
1esumindo, os crit8rios Nue definem a permisso ou no de um pacote
passando por uma regra dinImica so+
- $rotocolo
- 4ndere!o D $orta /$
- >estino D $orta /$
- &empo da regra esgotado
6omo 7 foi dito, a regra dinImica 8 descarregada depois de certo tempo
sem ser utili9ada. >ependendo de como uma regra dinImica 8 utili9ada, podemos
definir um perodo fixo de tempo at8 Nue a regra se esgote. 4sse tempo de
http://www.freebsdbrasil.com.br
Reproduo integral ou parcial permitida desde que as fontes originais sejam mencionadas.
IPFW-HOWTO

dura!o pra cada tipo de regra dinImica pode ser verificado utili9ando as
variveis corretas do sCsctl';(. $osteriormente podemos modificar esses
valores. 4is a listagem dos valores padr=es dessas variveis do sCsctl+
e%sffa@eeviac-R sCsctl -a c grep HdCn.XlifetimeH
net.inet.ip.fw.dCnUac%Ulifetime+ :PP
net.inet.ip.fw.dCnUsCnUlifetime+ 2P
net.inet.ip.fw.dCnUfinUlifetime+ 2P
net.inet.ip.fw.dCnUrstUlifetime+ E
net.inet.ip.fw.dCnUshortUlifetime+ E
e%sffa@eeviac-R

A primeira varivel do sCsctl';( indica Nue o tempo de vida padro pra
cada regra dinImica Nue use um pacote do tipo &6$ A6F 8 :PP segundos. A
varivel seguinte indica Nue o tempo de vida de uma regra dinImica cu7o pacote
se7a &6$ SW5 8 2P segundos. 5a regra seguinte, 2P segundos tamb8m de vida pra
regras com pacotes &6$ 0/5. >epois E segundos de vida pras regras Nue
encontrarem pacotes do tipo &6$ 1S& ou outros pacotes '?>$, /6)$, etc(,
conforme indica as duas Yltimas variveis do sCsctl';(.
"amos usar um exemplo pra demonstrar como isso funciona na prtica+
.( h ?ma conexo &6$ legtima 8 iniciada da mNuina .J2..G.P.. na porta
.2:3 pra porta 22 do servidor .]2..G;.P.. Nue fica por trs do firewall. 4sse
pedido de iniciali9a!o de conexo se consiste de um pacote de sincroni9a!o
&6$, ou se7a, um &6$ SW5.

2( h A regra .PPP do firewall fa9 com Nue o ipfirewall'3( verifiNue as
regras dinImicas, onde ele no vai encontrar nenhuma regra referente @ pacotes
&6$ vindos de J2..E.P..+.2:3 para .]2..G;.P..+22.
:( h A regra 2PPP 8 verificada e combinada, ento o d%eep-statee ordena
Nue se crie uma regra dinImica pras conex=es &6$ entre as
mNuinas.J2..G.P..+.2:3 e .]2..G;.P..+22, e Nue essa regra tenha um tempo de
vida de 2P segundos 'Nue 8 o padro pra pacotes &6$ SW5(.
3( h >epois de um segundo, um pacote &6$ A6F 8 enviado pro servidor
.]2..G;.P..+22 em resposta ao pacote &6$ A6F enviado pro cliente, pra confirmar
o pedido de uma conexo &6$.
E( h 4m seguida o pacote vai encontrar a regra .PPP do firewall de
novo, Nue vai verificar pelas regras dinImicas e encontrar uma regra cu7o tempo
de vida no tenha terminado, e Nue este7a permitindo o roteamento dos pacotes
cu7o /$ e porta de origem se7am conhecidos, assim como /$ e porta do destino.
>essa forma a regra dinImica permite Nue o pacote trafegue com seguran!a pelo
firewall.
G( h ?m pacote &6$ A6F spoofado, vindo de um possvel ataNue Nue, em
circunstIncias normais danificaria os recursos de rede de uma mNuina Mindows
no preparada, Nue estivesse por trs do firewall.
J( h A regra .PPP verifica as regras dinImicas e encontra o pacote
spoofado com /$ e portas de destino Nue pertencem a uma regra dinImica
existente, contudo o /$ e porta pra onde o pacote deve voltar no corresponde
ao da regra 'porNue foi gerado de forma rand^mica pelo ataNue(. >essa forma a
http://www.freebsdbrasil.com.br
Reproduo integral ou parcial permitida desde que as fontes originais sejam mencionadas.
IPFW-HOWTO

regra .PPP falha, e a filtragem pelo firewall continua pra regra seguinte.
;( h A regra seguinte '2PPP( verifica Nue o pacote no 8 do tipo &6$
SW5, ento no define regra dinImica praNuele pacote.
]( h 6onseNuentemente o pacote 8 bloNueado pela regra padro do
firewall Nue 8 do tipo fechado.
5o nosso primeiro exemplo de regra HstatefulH esse pacote spoofado
teria sido aceito, porNue a regra Nue continha destablishede como depend#ncia
teria sido cumprida, pois aceitava todo pacote com um destino em particular,
Nue tivesse ao menos a HflagH A6F definida, e o pacote Spoofado cumpriria esse
crit8rio. Q a regra dinImica criada exclusivamente para as duas pontas em
comunica!o, verificou pela porta de origem e conseNuente resposta da conexo,
informa!o Nue 8 gerada aleatOriamente, ou se7a, no existe uma forma lOgica de
se manipular. 4sses so exemplos e ras=es primrios, contudo poderosos em
rela!o @ vantagens das opera!=es avan!adas de HstatefulH do ipfirewall'3(.
4sse tipo de vantagem o /$0ilter tamb8m possui.
5o exemplo anterior poderamos ter assumido um ataNue diferente se o
pacote spoofado fosse do tipo &6$ SW5, mas antes de explicarmos isso, vamos dar
uma olhada em um tipo de ataNue popular utili9ando &6$ SW5, ataNue esse
conhecido como SW5 0<>s.
$acotes &6$ SW5 spoofados so usados com muita freNu#ncia em taNues de
rede. A a!o mais comum desse tipo de ataNue consiste em enviar inYmeros
pacotes &6$ SW5 'SW5 0<>s( pra uma determinada esta!o na rede, de modo Nue
toda a conexo fiNue em estado de espera, por estarem esperando suas respostas
em fila. >essa forma o trfego de rede controlado pelo %ernel fica saturado,
evitando o roteamento de novas conex=es legtimas. )esmo considerando Nue o
Stac% &6$,/$ do 0reeAS> 8 desenvolvido de forma @ eliminar randomicamente
conex=es &6$ Nue estiverem em fila de espera de forma inativa, esse tipo de
ataNue pode ser devastador dependendo da poltica de elimina!o das filas
adotado no sistema 'via sCsctl';(( e dependendo tamb8m da largura de banda da
rede. "amos assumir Nue, se os pacotes &6$ SW5 chegarem ao servidor de forma
muito rpida, eles vo fa9er pedidos falsos de conex=es de forma mais rpida do
Nue eles podem ser eliminados da fila, no sobrando recursos o suficiente pra
tratarmos todas as conex=es legtimas Nue tamb8m estiverem chegando.
s primeiros pontos em Nuesto, relacionado @ esse tipo de ataNue, 8 a
velocidade do ataNue e velocidade com Nue esses pacotes podem chegar at8 o
servidor 'definido por Nuo larga se7a a banda do atacante( e depois a
velocidade e poder de processamento do servidor Nue est processando os pacotes
Nue esto chegando pelo Stac% &6$,/$. 0eli9mente, nOs estamos trabalhando com
0reeAS>, e o Stac% &6$,/$ do 0reeAS> 8 mais poderoso do Nue o de NualNuer outro
sistema, se7am at8 mesmo ?nix, <inux, ou alguns outros AS> ?nix. >e NualNuer
forma, dependendo do nYmero de atacantes ao mesmo tempo, e da largura da banda
dos mesmos, essa velocidade nem sempre 8 o bastante.
6omo podemos concluir na nossa ilustra!o pr8via de um ataNue &6$ A6F
Spoofado, NualNuer outro ataNue com pacotes de NualNuer tipo, SW5 ou A6F
tamb8m seriam evitados pelo 0irewall, porNue cada novo pacote com porta de /$
randomicamente criada no encontraria uma regra dinImica Nue o permitisse. )as
de NualNuer forma devemos ficar muito atentos em rela!o ao nYmero de regras
dinImicas Nue poderamos abrir por pacotes &6$ SW5 spoodados. )esmo tendo
http://www.freebsdbrasil.com.br
Reproduo integral ou parcial permitida desde que as fontes originais sejam mencionadas.
IPFW-HOWTO

certe9a Nue o Stac% &6$,/$ do 0reeAS> no seria sobrecarregado por tantas
tentativas de conex=es, a cria!o das regras dinImicas do ipfirewall'3(
poderiam ser saturadas, de forma a colocar pacotes em espera. A melhor forma de
evitar isso 8 diminuindo o tempo de vida das regras dinImicas iniciadas por
pacotes &6$ SW5, utili9ando sCsctl';(, como foi mostrado anteriormente, e
ainda, aumentar o nYmero mximo de regras dinImicas, atrav8s de uma outra
varivel do sCsctl';(+
net.inet.ip.fw.dCnUmax+ .PPP 'default(
6omo o seu firewall HstatefulH em plena atividade, voc# pode verificar
Nuantas regras dinImicas existem criadas no exato momento, verificando a
varivel do sCsctl';(+
net.inet.ip.fw.dCnUcount
A melhor forma de evitar Nue pacotes spoofados utili9em todas as suas
regras dinImicas 8 evitar Nue NualNuer mNuina fora da sua rede inicie uma
conexo &6$. /sso pode ser feito facilmente com as seguintes regras, assumindo
Nue a rede .]2..G;.P.P,2J est por trs do firewall+
add .PPP chec%-state
add 2PPP allow tcp from .]2..G;.P.P,2J to anC out setup T
%eep-state
>essa forma sO os pacotes &6$ SW5 Nue sarem pelo seu firewall podero
ser roteados, ou se7a, os pedidos Nue entrarem sero automaticamente negados.
4sse 8 o mesmo tipo de prote!o Nue o 5A& e proxies transparentes de forma
geral oferecem pras mNuinas internas.
At8 agora nOs trabalhamos essencialmente com regras HstatefulH Nue
manipulavam conex=es &6$. S claro, no 8 pra menos, conex=es &6$ representam a
grande maioria do trfego gerado em rede, contudo voc# se lembra Nue nOs
comentamos Nue o ipfirewall'3( poderia manipular tamb8m filtragem HstatefulH de
outro protocolos. Aom, ento de uma olhada nas regras Nue nOs usamos pra
permitir Nue nossos clientes internos pudessem pingar NualNuer mNuina pra fora
da rede, enNuanto ningu8m poderia nos pingar, Nuando estudamos a se!o
referente ao dicmptCpese. Agora vamos fa9er a mesma coisa usando Bchec%-stateB
e Bset-stateB+
add .PPP chec%-state
add 2PPP allow icmp from anC to anC out icmptCpes ; %eep-state
Q podemos entender facilmente essa regra, Nue cria uma regra dinImica
pra cada pedido de echo Nue nossas esta!=es internas fa!am pra fora. Kuando a
resposta chega ela 8 permitida pela regra dinImica Nue estabeleceu a conexo
entre as duas pontas, e se algu8m de fora tenta pingar uma mNuina interna, a
regra padro nega essa a!o. protocolo /6)$ usa a varivel
net.inet.ip.fw.dCnUshortUlifetime do sCsctl';(. Se a resposta do ping demorar
mais Nue E segundos pra chegar a regra vai ser descarregada e o pacote no vai
poder ser roteado. Se voc# considera Nue as respostas de ping levaro mais Nue
E segundos pra acontecer, ento voc#, como administrador da rede deve elevar o
valor da varivel no sCsctl';(. >e NualNuer forma a maioria dos atrasos de rede
levam menos de . segundo, a no ser Nue se7a /16 L-(
http://www.freebsdbrasil.com.br
Reproduo integral ou parcial permitida desde que as fontes originais sejam mencionadas.
IPFW-HOWTO

A regra 2PPP ainda poderia ter definido uma faixa de rede com permisso
pra fa9er o ping, caso existisse mais de uma rede por trs do firewall, e
apenas uma delas poderiam pingar mNuinas externas. 5a verdade escolhemos a
regra assim porNue 8 a forma Nue mais se aproxima do nosso exemplo inicial de
controle do ping.
G.:. Anatomia de uma 1egra >inImicaL
"amos dar uma olhada na sada Nue voc# devei encontrar Nuando listar as
regras dinImicas de um firewall HstatefulH no seu 0reeAS>+
PP.PP allow ip from anC to anC via loP
PP2PP denC ip from anC to .2J.P.P.P,;
P.PPP chec%-state
P2PPP allow tcp from anC to anC %eep-state
GEE:E denC ip from anC to anC
RR >Cnamic rules+
P2PPP ] .2EE '& E3, R P( tC P tcp, .]2..G;.P.. 2PPJ _-` 2P3.J..2PP.23E
;P
5Os 7 conhecemos as regras estticas apresentadas, contudo, essa 8 a
primeira ve9 Nue nOs estamos encontrando uma regra dinImica listada pelo nosso
firewall. "amos examina-la com mais aten!o+
A primeira cita!o de uma regra dinImica 8 o nYmero da regra esttica
Nue a gerou, no nosso caso, a regra nYmero 2PPP, Nue tem a op!o d%eep-statee
a7ustada, conforme aprendemos anteriormente. A segunda parte 8 o nYmero de
ve9es Nue aNuela regra foi utili9ada, ou se7a o nYmero de ve9es Nue um pacote
saiu pelo firewall atrav8s daNuela regra, ou o nYmero de incid#ncias da regra,
seguido do nYmero total de bCtes Nue os pacotes Nue passaram por aNuela regra
rotearam. 4ntre par#nteses encontramos o valor d&e Nue indica o dtimeoute 'o
tempo de vida( daNuela regra, em segundos. 5esse caso ainda existem E3 segundos
de vida para essa regra. A cerNuilha 'R( indica o nYmero da regra, nesse caso
essa 8 a nossa regra nYmero P. HtC PH indica o tipo de regra dinImica em
Nuesto. s tipos de regras correspondem ao fluxo do roteamento de pacotes
atrav8s daNuela regra, ou se7a, se ela permite apenas trfego da origem pro
destino, do destino pra origem, ou se a regra 8 bidirecional. 5o nosso caso
temos apenas um tipo indicado, Nue 8 o padro+ bidirecional. $odemos verificar
essa afirma!o visualmente, indicado pelo smbolo d_-`e entre a $orta,/$ de
origem e de destino. >epois do tipo da regra dinImica podemos constatar o
protocolo Nue a regra ta usando, seguidos do /$,porta de origem, o smbolo de
fluxo dos pacotes 'no caso d_-`e( e finalmente o /$,porta do destino da
conexo.
)esmos depois Nue uma regra dinImica foi descarregada, voc# ainda pode
lista-la com o comando dipfw liste, contudo a regra inativa vai ter um valor de
tempo de vida 'd&e( igual a 9ero '& P, R(. ?ma ve9 descarregada, a regra no
vai mais aceitar pacotes, simplesmente porNue ela no existe mais, at8 Nue a
mesma regra se7a reiniciada, ou ressucitada pela mesma entrada d%eep-statee da
regra Nue a originou inicialmente. ?ma ve9 descarregadas, as regras tamb8m
podem ser substitudas por novas regras dinImicamente ativadas. A no ser Nue
todas as regras dinImicas continuem em pleno uso, elas sero continuamente
substitudas por novas regras, especialmente se o nYmero de regras dinImicas
alcan!ou o mximo permitido pelas variveis do sCsctl';(.
http://www.freebsdbrasil.com.br
Reproduo integral ou parcial permitida desde que as fontes originais sejam mencionadas.
IPFW-HOWTO

"e7a o seguinte exemplo de listagem das regras do ipfw';(+
PP.PP P P allow ip from anC to anC via loP
PP2PP P P denC ip from anC to .2J.P.P.P,;
P.PPP P P chec%-state
P2PPP 3G2 J.E.G allow tcp from anC to anC %eep-state
GEPPP .;G .G3G3 denC ip from anC to anC
GEE:E EG.3G GPE3J23 allow ip from anC to anC
RR >Cnamic rules+
P2PPP .2E 22P;3 '& :PP, R 3;( tC P tcp, 2PP.2.P.JP..E. ..;P _-`
2PP.2.P.32.3E 22
P2PPP :. .;2; '& 2.J, R EE( tC P tcp, 2PP.2.P.JP..E. ..JG _-`
2PP.2.P.32.3E 2.
P2PPP .E .:J2 '& P, R E;( tC P tcp, 2PP.2.P.JP..E. ..J3 _-`
2PP.2.P.32.3E 22

5o vamos comentar a listagem acima, cabe a voc# entender o Nue est
acontecendo com o firewall. 5ote Nue existe conex=es cu7o tempo de vida 7 se
esgotou, e ainda assim a mesma foi listada.
Aom, Nuando voc# come!ar usar regras HstatefulH em grande escala, voc#
vai perceber o Nuanto a sada de um comando pra listar as regras do ipfw';( vo
se tornar perturbadoras, devido ao enorme nYmero de regras dinImicas criadas.
ipfw';( lista todas as regras dinImicas, mesmo Nue 7 descarregadas pra
oferecer controle total do firewall ao administrador, contudo nem sempre voc#
Nuer analisar as regras dinImicas, e apenas as estticas, 7 Nue so essas Nue
criam as dinImicas. 5esse caso uma solu!o Obvia do mundo ?nix seria+
e%sffa@eeviac-R ipfw list c grep -v Ha_-`RbH
u se voc# Nuer analisar com cuidado todas as regras, se7am estticas
dou dinImicas, uma solu!o 8 utili9ar um paginador+
e%sffa@eeviac-R ipfw list c less
?
e%sffa@eeviac-R ipfw list c more
J. &raffic Shape 'controle de trfego(L
6ontrole de &rfego '&raffic Shaping( se refere @ possibilidade de
controlar todo o roteamento de pacotes pelo seu firewall de diversas maneiras,
entre as Nuais as mais importantes so+ limita!o de banda, atrasos no
roteamento 'delaCs(, cria!o de filas de fluxo, entre outros. 4le permite Nue
voc# controle a intensidade, dire!o e disponibilidade do trfego. At8 agora a
gente entendia como controlar roteamento, a escolha e defini!o de polticas de
permiss=es ou restri!=es de acessoL agora controlar trfego passa a significar
mais do Nue simplesmente filtrar Nuem e Nuando pode acessar determinado
servi!o, rede e,ou esta!=es. A incluso do dummCnet'3( no 0reeAS> possibilitou
um controle de trfego extensivo, funcionalida essa Nue o /$0ilter tamb8m no
pode oferecer.
http://www.freebsdbrasil.com.br
Reproduo integral ou parcial permitida desde que as fontes originais sejam mencionadas.
IPFW-HOWTO

&odo gerenciamento mais rudimentar de uma rede, em rela!o @ sua infra
estrutura bsica de trfego e roteamento pode ser implementado utili9ando-se
ipfirewall'3( e dummCnet'3(. 4xistem apenas duas restri!=es+ probabilidade de
ocorr#ncias e a utili9a!o de regras dinImicas. 5enhuma regra de H&raffic
ShappingH pode ser criada de forma dinInica, simplesmente porNue 8 invivel, em
rela!o @ performance, a verifica!o da capacidade de banda, atrasos e filas de
fluxo em cada regra @ ser criada de forma no esttica.
J... $robabilidade de corr#ncias '$robabilitC )atching(.
ipfirewall'3( possui uma ferramenta incrivelmente funcional pra
auditar e testar uma rede. 4ssa ferramenta permite Nue o administrador simule a
restri!o de pacotes de forma aleatOria sob vrias taxas de probabilidade. 4ssa
ferramenta estatstica fa9 uso da op!o dprobe nas regras do firewall, op!o
essa, seguida de um nYmero entre P e ., o Nual corresponde @ probabilidade
estatstica dos pacotes Nue sero liberados pelo firewall. >essa forma, uma
probabilidade P.] 'indicada pelo comando dprob P.]e( vai permitir o trfego de
]Pn dos pacotes Nue passaram por aNuela regra, da mesma forma Nue uma dprob
P..e permitir apenas .Pn de probabilidade. Segue ento uma peNuena extenso da
sintaxe do ipfw';( Nue nOs estvamos acostumados+
_comando` a_no. regra`b aprob _probUocorrencia`b _aco` alog
alogamount _nYmero`bb _proto` from _origem` to _destino`
a_interface-spec`b a_opcoes`b
$or exemplo, se nOs Nuisermos restringir 2Pn dos pedidos de echo 'echo
reNuests( do /6)$, poderamos usar a seguinte regra+
add .PPP prob P.; allow icmp from anC to anC in icmptCpes ;
$odemos tamb8m Nuerer negar EPn dos pacotes &6$ SW5 pro servidor web,
dessa forma simulando um trfego pesado na interface epP. 0aramos da seguinte
forma+
add .PPP prob P.E allow tcp from anC to anC in setup via epP

A utili9a!o de probabilidade de ocorr#ncias 8 uma fun!o nativa do
ipfirewall'3(.
J.2. >ummCnetL
&odas as outras funcionalidades pra se implementar &raffic Shapping
reNuer o uso do dummCnet'3(, Nue foi incorporado na verso 2.2.; do 0reeAS>.
$ra isso precisamos adicionar uma op!o ao nosso Fernel+
options >?))W54&
>epois de compilado o nosso %ernel com mais essa op!o 'al8m das op!=es
tpicas do ipfirewall'3((, o administrador do sistema vai poder especificar a
cria!o de tYneis 'chamados dpipese( pra controle do trfego. ?m tYnel nada
mais 8 do Nue uma regra de &raffic Shapping Nue controla o roteamento,
canali9ando as informa!=es Nue posteriormente iro trafegar por endere!os
especficos de rede. A cria!o desses tYneis 8 feita com o comando dpipee do
ipfw';(. trfego 8 redirecionado @ esses tuneis por meio do comando dpipe
http://www.freebsdbrasil.com.br
Reproduo integral ou parcial permitida desde que as fontes originais sejam mencionadas.
IPFW-HOWTO

_pipe R`e no ipfw';(. "amos ento criar um tYnel simples+
pipe .P config bw .PPFbit,s
5ote Nue, assim como nas regras de firewall, o dpipee 8 apenas mais uma
a!o pro ipfw';(, exatamente como dadde ou ddeletee, portanto antes de cada
comando 8 feita uma chamada ao ipfw';( ',sbin,ipfw pipe .P... por exemplo(.
4sse tYnel simples Nue criamos logo acima vai limitar o fluxo de
informa!=es pra uma velocidade mxima de .PP Filobits por segundo. 4xistem
vrias maneiras distintas de indicarmos as medidas de velocidade de trfego+
bit,s, ACte,s, Fbit,s, FbCte,s, )bit,s, )bCte,s. 6ada tYnel de limita!o de
banda deve usar a op!o dbwe 'de bandwidth h banda(.
?ma outra maneira de controlar trfego 8 usar a op!o ddelaCe Nue for!a
um atraso na comunica!o, simulando o Nue se conhece como dlage do sistema+
pipe .P config delaC .PP
valor Nue segue a op!o ddelaCe 8 o tempo de atraso Nue nOs
dese7amos, definido em milisegundos. 5esse exemplo todo o trfego roteado
atrav8s desse tYnel ter um atraso de .PPms.
4xiste ainda a possibilidade de proporcionarmos uma taxa de perca de
pacotes, fun!o essa igual @ dprobe Nue comentalos logo acima. $or exemplo, pra
conseguirmos uma taxa de 2Pn de pacotes perdidos 'eNuivalente a dprob P.;e(
podemos criar o seguinte tYnel+
pipe .P config plr P.2
BplrB significa Bpac%et loss rateB 'taxa de perca de pacotes(, portanto
o valor indica @ Nue taxa os pacotes no sero roteados, oposto da op!o dprobe
do ipfw';(, Nue indica a taxa dos pacotes Nue sero roteados. $ra evitar
NualNuer confuso com a utili9a!o de dprobe ou oplre, aconselhamos Nue o
administrador assuma uma escolha pessoal entre as duas possibilidades. Ambas
so igualmente efetivas, e co-existem porNue a primeira 8 nativa do
ipfirewall'3( enNuanto a segunda fa9 parte do dummCnet'3(.
J.2... 0ilas de &Yneis '$ipe Kueues(L
Aom, a necessidade seguinte 8 definir o tamanho das filas dos tYneis
gerados, especialmente se a )&? da interface de rede em Nuesto 8 relativamente
grande. A )&? de uma HdeviceH de rede define o tamanho mximo Nue um pacote vai
ter naNuela interface. )&? V )aximum &ransmission ?nit, ou ?nidade )xima de
&ransmisso. $ra se obter o valor da )&? em uma interface de rede 8 necessrio
o uso do ifconfig';(+
e%sffa@eeviac-R ifconfig xlP
xlP+ flagsV;;3:_?$,A1A>6AS&,1?55/5*,S/)$<4k,)?<&/6AS&` mtu .EPP
inet .]2..G;.P.. netmas% PxffffffeP broadcast .]2..G;.P.:.
ether PP+JP+.;+d3+a3+ac
media+ .Pbase&,?&$ '.Pbase&,?&$ _half-duplex`(
supported media+ .PbaseE,A?/ .Pbase&,?&$ _full-duplex`
.Pbase&,?&$
_half-duplex` .Pbase&,?&$
http://www.freebsdbrasil.com.br
Reproduo integral ou parcial permitida desde que as fontes originais sejam mencionadas.
IPFW-HOWTO

e%sffa@eeviac-R
"erificamos portanto Nue na interface xlP em Nuesto, a )&? da placa de
rede 8 .EPP 'bCtes(. $or padro esse valor 8 comum entre as placas de rede.
As filas so utili9adas pelos tYneis pra for!ar as limita!=es e atrasos
de banda. 4las podem ser configuradas especificando-se o seu temanho em
dFbCtese ou por dslotse. 6ada HslotH corresponde a um pacote, ou se7a definir
Nue uma fila tem .P HslotsH significa Nue aNuela fila vai suportar apenas .P
pacotes simultIneos. tamanho mximo de cada pacote, por ser definido pela )&?
da interface, eNuivale a multiplica!o do mesmo pelo nYmero de pacotes na fila,
ou se7a se voc# criar uma fila 'Nueue( com .P HslotsH, o tamanho dela ser .P x
.EPP bCtes, portanto .EFbCtes.
S importante entender a defini!o de tamanho das filas 'Nueue( porNue o
padro pra cada fila 8 EP HslotsH, Nue pode ser muito pra determinadas
interfaces de rede com )&? grande e pouca banda disponvel. padro EP HslotsH
foi definido por ser o tamanho m8dio de uma fila nas devices de rede.
5ormalmente esse valor 8 o ideal, contudo Nuando se tem uma banda peNuena, a
reNuisi!o pelas interfaces 8 maior do Nue o trfego possvel na rede, isso
gera gargalo e conseNuente atrasos na rede. 0a!amos o seguinte ento+ vamos
criar um tYnel em uma rede Nue simule a velocidade mxima de um modem de EGF+
pipe .P config bw EGFbit,s
... mas no vamos definir uma )&? menor pra device, com o ifconfig';(,
nem vamos diminuir o tamanho da fila 'Nueue(, Nue seria nossa melhor op!o. A
fila pros pacotes ento seria .EPP bCtes '.2PPP bits( x EP, ou se7a, GPPFbits
de fila. $ra um tYnel Nue esta limitando a banda @ EGFbit por segundo, levaria
aproximadamente .P.J segundos pra uma fila de GPPFbit ser preenchida. 4sse 8 um
atraso inaceitvel pra por o trfego em andamento. $ra evitar esse tipo de
problema 8 recomendvel a7ustar manualmente o tamanho das filas 'Nueue(, em
HslotsH Nue 8 mais fcil pra uma compara!o com o padro 'Nue sabemos ser EP(
ou em oFbitse Nue 8 uma melhor atribui!o @ Nuantidade de dados. A segunda
op!o 8 a melhor, porNue al8m de ser um valor mais compreensvel, o uso de
HslotsH reNuer Nue o administrador tamb8m defina o valor pra )&? da interface,
utili9ando o ifconfig';(, 7 Nue esse valor eNuivale @ varivel de
multiplica!o no tamanho da Nueue 'fila(. <embre-se, Nuanto menor a banda
disponvel, menor deve ser a fila. 5o nosso exemplo acima, uma configura!o
rasovel pra fila seria+
pipe .P config bw EGFbit,s Nueue EFbCtes

J.2.2. )scaras de &Yneis '$ipe )as%s(L
?ma poderosa caracterstica dos tYneis 8 permitir mYltiplas filas por
fluxo. $or exemplo, imagine Nue voc# tenha vrias mNuinas atrs do seu
firewall, e voc# Nuer limitar a banda pra .PPFbits,s pra cada mNuina, ou se7a,
no vai agregar um valor somatOrio @ banda pra todas as mNuinas, vai definir
individualmente a banda. 4xistem duas formas de se fa9er isso, a mais Obvia e
primeira concluso Nue um administrador tomaria seria criar tYneis e regras
individuais pra cada mNuina, com o ipfw';(. )as agora considere Nue voc# pode
definir mscaras pra identificar um subcon7unto de esta!=es Nue pertencem ao
mesmo tYnel, exatamente como netmas%s e bitmas%s identificam subcon7untos de
http://www.freebsdbrasil.com.br
Reproduo integral ou parcial permitida desde que as fontes originais sejam mencionadas.
IPFW-HOWTO

esta!=es Nue pertencem a mesma rede.
As mscaras podem ser de seis tipos distintos+
Bdst-ipB h mscara pro /$ de destino do pacote Nue esta sendo enviado
pelo tYnel.
Bsrc-ipB h mscara da origem
Bdst-portB h mscara da porta de destino
Bsrc-portB h mscara pra porta de origem
BprotoB h mscara do protocolo
BallB - mscara geral, Nue especifica todos os bits nos campos 'dst-ip,
src-ip, etc( como importantes e vlidos.
$or exemplo, vamos assumir a mesma id8ia anterior de uma rede atrs de
um firewall onde cada esta!o deve ter uma banda de .PPFbit,s. Se nOs
simplesmente direcionarmos todo o trfego pra um tYnel, o valor do trfego ser
a somatOria de todas as esta!=es, e no valores individuais. $ra utili9ar
mscaras pras esta!=es @s Nuais o trfego deve ser separado por filas
especficas, dessa maneira limitando a banda de forma separada, faremos o
seguinte+
pipe .P config mas% src-ip PxPPPPPPff bw .PPFbit,s Nueue .PFbCtes
pipe 2P config mas% dst-ip PxPPPPPPff bw .PPFbit,s Nueue .PFbCtes
add .PPP add pipe .P all from .]2..G;.P.P,.G to anC out via _device`
add 2PPP add pipe 2P all from .]2..G;.P.P,.G to anC in via _device`
5o primeiro instante as defini!=es acima parecem confusas,
especialmente porNue essa tamb8m 8 a primeira ve9 Nue nOs incluimos as regras
do ipfw';( pra direcionar os pacotes pros tYneis. Assumimos Nue apenas a
defini!o dos tYneis sem o direcionamento com ipfw';( no fa9 mais sentido. 5o
tYnel 'pipe( .P nOs criamos uma limita!o de banda de .PPFbit,s e fila de
.PFbCtes pro endere!o de origem do nosso con7unto de esta!=es. tYnel 'pipe(
2P definiu os mesmos valores de bandas e fila 'Nueue( pro nosso con7unto de
endere!os de destinos. A regra .PPP definiu Nue todo o trfego entre a nossa
rede sairia pelo tYnel .P, e a regra 2PPP definiu Nue todo o trfego entre a
nossa rede interna entraria pelo tYnel 2P, sempre 'nas duas regras( o trfego
ocorreria pela interface _device`.
4xistem dois motivos pra termos tYneis pra entrada e pra sada do
trfego, mas uma delas nOs vamos discutir posteriormente. A primeira Nuesto
Nue deve nos prender aten!o no momento 8 Nue cada tYnel define uma mscara
diferente. tYnel .P define a mscara PxPPPPPPff pros endere!os de origem,
simplesmente porNue a regra .PPP direciona todo o trfego Nue sai 'out( pela
rede interna, ou se7a a mscara XdeveX fa9er men!o ao endere!o de origem,
porNue cada origem fa9 diferen!a Nuando Nueremos filas distintas pra cada
esta!o Nue origina o fluxo. >a mesma forma o trfego Nue est chegando 'in(
deve ser separado em filas 'Nueue( disntas de acordo com cada endere!o de
destino.
"oc# deve ter percebido Nue nOs especificamos as mscaras em
hexadecimal ao inv8s de decimal nos tYneis. As duas nota!=es funcionam
perfeitamente. As mscaras pros tYneis funcionam exatamente da mesma forma Nue
as Hnetmas%sH, mas a utili9a!o delas se torna muito mais clara Nuando nOs
percebemos Nue sua aplica!o 8 definida de forma reversa, se comparadas. Kuando
nOs utili9amos Hnetmas%H nOs estamos dividindo a rede em subgrupos, de forma
http://www.freebsdbrasil.com.br
Reproduo integral ou parcial permitida desde que as fontes originais sejam mencionadas.
IPFW-HOWTO

Nue os bits iniciais so os bits altos, ou se7a, os bits imutveis da subrede.
ANui nOs definimos os bits altos como os Yltimos bits da mscara, porNue cada
tYnel roteia os dados de trs pra frente em rela!o @ rede. valor em
hexadecimal Nue nOs especificamos corresponde @ mascara decimal P.P.P.2EE. Aem
simples portanto+ o Yltimo octeto indica Nue apenas uma esta!o ser atribuda
por fila '2EG menos 2EE V .(. >essa forma 8 atribuida uma fila especfica por
controle de banda pra cada endere!o de esta!o com nYmero distinto 'no seu
Yltimo octeto(. S claro Nue estamos supondo aNui Nue a rede em Nuesto no
dever ter mais Nue 2E3 esta!=es, mas caso existam, a mscara dever ser
redefinida. 4nto se voc# Nuer definir 2E3g2 esta!=es na rede Nue o firewall
vai estar controlando, a a mscara teria Nue ser P.P.2EE.2EE 'PPPPffff(. /sso
define Nue NualNuer endere!o com um Ynico bit diferente entre os dois Yltimos
octetos 'ou se7a os .G Yltimos bits baixos( dever ter sua prOpria fila de
pacotes.
J.2.:. 1emane7amento de $acotes por &Yneis '$ac%et 1ein7ection(L
4m ]]n dos casos, assim Nue um pacote 8 direcionado @ um tYnel 'pipe(,
8 a configura!o definida pro tYnel Nue toma parte do pacote, e nesse momento a
busca nas regras termina, como de costume no ipfirewall'3(. 6ontudo voc# pode
for!ar Nue o pacote se7a rein7etado 'ou remane7ado( no firewall, a partir da
regra seguinte, mesmo depois de ter sido direcionado pro tYnel. $ra fa9er isso
basta desativar a seguinte op!o no sCsctl';(+
net.inet.ip.fw.oneUpass+ .
4ssa op!o 8 booleana. SO pra constar L-(
;. 0luxo do &rfego pelo 0irewall.
"amos lembrar Nue as regras Nue no especificam se o pacote deve ser
examinado na entrada ou sada pelo firewall 'usando as op!=es dine e doute(,
sero sempre verificadas pro trfego de entrada X4X de sada. /sso implica em
algumas conseNu#ncias. Kuando uma regra redireciona o trfego pra um tYnel sem
usar dine ou doute, a regra ser duplicada, um tYnel pros pacotes Nue saem e um
pros Nue entram. utra coisinha, Nuando as regras no so definidas por
interface 'usando dviae( todas as regras so aplicadas @ todas as interfaces,
mesmo se definidos entrada e sada 'dine, eoute(, simplesmente porNue, imagine
seu gatewaC com mYltiplas interfaces de rede, uma pra rede verdadeira
'/nternet( e duas pra redes internas. &odo trfego definido como dine 8 o Nue
entra pelas interfaces pra mNuina firewall, ou se7a, se vem da internet pro
gatewaC, 45&1A pelo firewallL Se vem das redes locais pro gatewaC, 45&1A pelo
firewall. ?ma breve ilustra!o+
UUUUUUUUU
c
c
14>4 /5&415A _VV '?&( c c '/5( _VV /5&4154&
14>4 /5&415A VV` '/5( c c '?&( VV` /5&4154&
c UUUUUUUU c
firewall

http://www.freebsdbrasil.com.br
Reproduo integral ou parcial permitida desde que as fontes originais sejam mencionadas.
IPFW-HOWTO

>evemos tamb8m notar os conceitos de half-duplex e de full-duplex pras
conex=es. Se o trfego de entrada e sada so direcionaos pro mesmo tYnel,
ento ele vai adotar um coportamento half-duplex, simplesmente porNue o tYnel
no pode rotear o trfego em ambas as dire!=es ao mesmo tempo. Se voc# esta
trabalhando com conex=es de rede Nue se7am full-duplex portanto 8 sempre
recomendado criar tYneis distintos, pro trfego Nue entra e pro Nue sai, dessa
forma podendo rotear as duas dire!=es ao mesmo tempo. 4is a segunda raso Nue
nOs estvemos devendo pra se ter duas regras, uma pra controlar cada dire!o de
fluxo.
Ap#ndice A+ 4xemplos de 6onfigura!=es de 0irewallL
"amos ilustrar aNui alguns cenrios onde 8 necessrio implementar um
firewall. 6ada um 8 exemplificado com regras de firewall e uma explica!o breve
de como a regra funciona. 5os nossos exemplos vamos adotar a rede
.2..;..2:.P,23 como a local, xlP ser a interface de rede externa e xl. ser a
interna.
$( 6omo eu bloNueio pings externos, mas permito Nue eu possa pingar
NualNuer esta!o externaj
1( A solu!o Stateful. As regras dinImicas pros pacotes /6)$ usam as
defini!oes do net.inet.ip.fw.dCnUshortUlifetime no sCsctl';(, Nue 8 de E
segundos de vida pra cada regra. A vantagem da solu!o Stateful 8 Nue as
respostas de echo so permitidas apenas das mNuinas Nue voc# pingou.
add .PPP denC icmp from anC to .2..;..2:.P,23 in via xlP icmptCpes ;
add .P.P chec%-state
add .P2P allow icmp from .2..;..2:.P,23 to anC out via xlP icmptCpes ;
%eep-state
add .P:P denC icmp from anC to anC

motivo pra regra de nega!o antes da regra com chec%-state 8 Nue as
regras dinImicas so bi-direcionais, ou se7a, os pedidos de echo podem vir de
esta!=es externas Nue sero permitidos, durante a vida Yltil da regra. $or isso
filtramos os pings externos antes de verificarmos as regras dinImicas.
A solu!o Stateless. A vantagem 8 Nue sobrecarrega menos o firewall,
porNue existe um nYmero menor de regras @ serem processadasL mas, elas
sobrecarregam o firewall Nuando no existem muitas ocorr#ncias de tentativas de
pings, ento a vantagem de uma solu!o ou outra depende de uma anlise da
freNu#ncia Nue os pings ocorrem.
add .PPP denC icmp from anC to .2..;..2:.P,23 in via xlP icmptCpes ;
add .P.P allow icmp from .2..;..2:.P,23 to anC out via xlP icmptCpes ;
add .P2P allow icmp from anC to .2..;..2:.P,23 in via xlP icmtCpes P
utra desvantagem da solu!o Stateless 8 Nue ela vai sempre aceitar
respostas de echo '4cho 1eplC( de NualNuer esta!o, enNuando a solu!o Stateful
permite resposta apenas das esta!=es Nue foram pingadas.
$( 6omo eu bloNueio Nue as redes privadas, conforme definidas na 106
http://www.freebsdbrasil.com.br
Reproduo integral ou parcial permitida desde que as fontes originais sejam mencionadas.
IPFW-HOWTO

.].;, se7am roteadas pra dentro ou pra fora da minha redej
1(
add .PPP denC all from .]2..G;.P.P,.G to anC via xlP
add .P.P denC all from anC to .]2..G;.P.P,.G via xlP
add .P2P denC all from .J2..G.P.P,.2 to anC via xlP
add .P:P denC all from anC to .J2..G.P.P,.2 via xlP
add .P3P denC all from .P.P.P.P,; to anC via xlP
add .PEP denC all from anC to .P.P.P.P,; via xlP
( 6omo eu posso for!ar a limita!o de taxas de cada esta!o na minha
rede de forma individualj 4u Nuero for!ar um limite de ?pStream de G3Fbit por
segundo e >ownStream de :;3 Fbit por segundo pra cada esta!oL ainda, Nuero
tamb8m evitar Nue NualNuer esta!o externa inicie conex=es com as esta!=es na
minha rede, dessa forma ningu8m vai poder rodar nenhum tipo de servidor.
1( 4ssa 8 a solu!o adotada em uma universidade+
pipe .P config mas% src-ip PxPPPPPPff bw G3%bit,s Nueue ;FbCtes
pipe 2P config mas% dst-ip PxPPPPPPff bw :;3%bit,s Nueue ;FbCtes
add .PP denC icmp from anC to .2..;..2:.P,23 in via xlP icmptCpes ;
add ..P chec%-state
add .PPP pipe .P all from .2..;..2:.P,23 to anC out via xlP
add ..PP pipe 2P all from anC to .2..;..2:.P,23 in via xlP
add .2PP allow tcp from .2..;..2:.P,23 to anC out via xlP setup %eep-
state
add .2PP allow udp from .2..;..2:.P,23 to anC out via xlP %eep-state
add .:PP allow icmp from .2..;..2:.P,23 to anC out icmptCpes ; %eep-
state
add GEE:E denC all from anC to anC
http://www.freebsdbrasil.com.br
Reproduo integral ou parcial permitida desde que as fontes originais sejam mencionadas.

Você também pode gostar