Sunteți pe pagina 1din 51

VIII

DOMINANDO

LINUX FIREWALL !PTABLES

Pessoas talentosas gostam de trabalhar ao lado de pessoas


mais talentosas ainda ... Obrigado a todos que compartilham o
mesmo ambiente de espirais positivas (local de trabalho) que
eu.

Sumrio

A todos os que fazem parte de minha vida, obrigado ... Todos


possuem sua parcela neste livro justamente por possurem
uma parcela de mim:].
Ops ... Ligia Ezequiel Andrs, 2x Obrigado meeeeesmo!
Urubatan D'Olivera Neto

Prefcio
Consideraes

iniciais

111

Agradecimentos

VII

Anlise Conceitual de Firewalls

1.1

1.5

Antes de Criar um Firewall...


Histrico
Firewall Filtro de Pacotes
Firewall NAT
Firewall Hbrido

3
9
11
11
13

2
2.1
2.2
2.3
2.4

Firewalls
Fluxo do
A Tabela
A Tabela
A Tabela

15
19
20
20
21

1.2
1.3
1.4

3
3.1
3.2

em Linux
Kernel VS. Netfilter...
Filter
Nat
Mangle

Firewall Iptables
Conceitos
Sntese e Lgica
3.2.1 - Tabelas
3.2.2 - Comando
3.2.3 - Ao
3.2.4 - Alvo
3.3 - Sntese Didtica

.
.
.
.
.
.
.
.

23

25
27
31
31

35
37
39

4
4.1
4.2
4.3

5
5.1
5.2

5.3

5.4

6
6.1
6.2
6.3

6.4
6.5
6.5
7
7.1

8
8.1

DOMINANDO

LINUX

FIREWALL

!PTABLES

Detalhando NAT
SNAT
DNAT
Transparent Proxy
Detalhando Mangle
Conceitos de TOS
Aplicando o TOS
Regras de TOS
5.3.1 - Trfego de Sada
5.3.2 - Trfego de Entrada
Concluses

.
.
.
.
.
.
:

Mdulos
limit
state
mac
multiport
string
owner

.
.
.
.
.
.
.
.
.

47
49
50
53
55
57
59

60
60
61
61
63

ANALISE
CONCEITUAL

DE

66
72

.
.
.

73
73
74

FIREWALLS

\~

~~)

76

Regras para Firewalls Iptables


Compartilhamento de Internet via NAT

79
81

Sobre
Aspectos de Instalao

95
97

(~

I tl.l
,.I;
'-,:

l,~'~
1

I~
u
~

"Feliz aquele que transfere o que sabe e aprende o que


ensina. "(Cora Coralina)

1.1

Antes de Criar um Firewall. ..

ntes de pensarmos em criar Firewalls, existem alguns


pontos que devem ser abordados, tais como: Qual o
propsito de se criar um Firewall?

A princpio, leve em conta que hoje o mundo respira internet.


Isso um fato! Quer outro fato? A Internet que o mundo respira no segura!
Dados extrados da Pesquisa Nacional de Segurana da Informao, que realizada anualmente pela Mdulo Security, revelam que, para 60% dos entrevistados, a Internet o principal
ponto de invaso em seus sistemas e que 78% acreditam que
ameaas, riscos e ataques devero aumentar em 2004.
Mas que ameaa essa? Risco de qu? Que ataques? Raramente vemos nos jornais casos de invases a sistemas
corporativos, a bancrios ento, nunca sequer testemunhamos algo concreto, somente meros boatos.
Bem, segundo a mesma pesquisa, 32% dos entrevistados acham
que os crackers so os principais responsveis por ataques e
invases de sistemas corporativos, e o pior de tudo que outros
26% no conseguem sequer identificar os responsveis.
Mas, que interesses algum teria em invadir minha empresa?
E por qu agora? Afinal, temos um link dedicado Internet h
pelo menos 5 anos ... Para responder a estes questionamentos,

Urubatan

DOMINANDO

LINUX FIREWALL

Neto

!PTABLES

observe que o nmero de empresas que divulgaram ter sofrido ataques e invases segundo a pesquisa nacional subiu de
43%, em 2002, para 77%, em 2003.
De fato, quanto mais empresas se unem grande rede, maior
"valor" ela passa a ter, logo, maiores sero as chances de algum pensar em utilizar um computador para tirar proveito de
todo este montante de "valor" agregado.
Existe uma frase que diz tudo: "Quanto mais tempo voc passa conectado a Internet, maiores so as chances de voc ser
invadido!"
Continuemos ento pensando no lado corporativo da histria,
as empresas, pois estas passam 24 horas por dia conectadas
a rede mundial, logo, sem sombra de dvidas, encabeam a
lista dos mais vulnerveis. Junte esta hiptese ao valor agregado das informaes de grandes companhias. Que valor?
Em Julho de 2003, O cracker do Casaquisto Oleg Zezev, 29
anos, foi condenado a passar quase 5 anos na cadeia por ter
invadido o site da Bloomberg. O cracker em questo, aps invadir tais sistemas, fez uma chantagem com o presidente da
empresa, o Sr. Michael Bloomberg, afirmando que, se o mesmo no lhe pagasse 200 mil dlares, veria as informaes confidenciais de sua empresa divulgadas na Internet e na mdia ...
Logo voc pensa: "ah, mas isso foi no Casaquisto ou EUA,
aqui no Brasil no acontece esse tipo de coisa. No possumos este tipo de conhecimento!"

Rio de Janeiro acusado de clonar sites de instituies bancrias do Brasil e do exterior e aplicar golpes em correntistas
pela Internet. Entre os bancos clonados estavam o Bradesco,
a Caixa Econmica Federal e o Banco do Brasil, alm de demais bancos internacionais. O cracker j havia sido preso em
2002 por possuir dados de cartes de crditos de 3.500 clientes das operadoras Mastercard e American Express.
Tambm em 2003 e no mesmo Rio de Janeiro, Ricardo Braz
Damasco fora acusado de fazer compras em lojas virtuais tais
como Lojas Americanas e Ponto Frio com nmeros de carto
de crdito de outras pessoas.
_Vamos ento reformular a colocao: "ah, mas isso foi no
Casaquisto ou EUA, e aqui no Brasil achamos que no acontece esse tipo de coisa por falta de meios de comunicao
que nos mantenham informados sobre os mesmos! Nossas
empresas no possuem este tipo de conhecimento e cultura.
Elas precisam ser invadidas pelo menos uma vez para entenderem que a Internet no e jamais ser segura!"
A pergunta agora : Quanto vale as informaes de sua empresa? Obviamente possuem a seu ver um valor incalculvel,
no mesmo? Este o medo que todas as grandes companhias, sejam elas internacionais ou nacionais, possuem, ou
seja, hingum gosta de ser espionado, invadido, roubado e
extorquido ..

Sim senhores, possumos, e muito! Nossos crackers, por incrvel que parea, so considerados uns dos melhores do
mundo ... Ou voc nunca ouviu falar em cls como cyberlords,
por exemplo?

Este o retrato fiel da Internet. Uma imensa rede descentralizada e no gerenciada, rodando sob uma su te de protocolos
denominada IPV4, que literalmente no foi projetada para assegurar a integridade das informaes e realizar controles de
acesso mais aprimorados, se tornando ento, uma das grandes responsveis pelas invases bem sucedidas!

Apenas em termos de relato ... Em 2003, Guilherme Amorim


de Oliveira Alves, 18 anos, foi preso pela Polcia Federal do

Mas de que forma um "simples" software denominado Firewall


pode mudar este paradigma?

DOMINANDO

Ur ub at an Neto

LINUX FIREWALL !PTABLES

Pensemos primeiramente que, embora existam diversas formas de se violar uma rede, apenas uma pequena parte destas possui algum tipo de engenhosidade, e que, mesmo estas, nada mais fazem do que se aproveitar de pequenas falhas em servios de rede e protocolos. Mas o que o Firewall
poder fazer por tais protocolos e servios?
Realmente, pensando por este ponto de vista, pouco ser a utilidade de um Firewall, pois o mesmo no pode corrigir os erros
existentes em servios e protocolos; mas, que tal disponibilizar
todo o tipo de servio que se queira e limitar seu uso apenas a
redes autorizadas ou a certos hosts confiveis? A a perspectiva
comea a melhorar, dito que se preciso utilizar servios NFS para
minha rede interna, no necessariamente preciso disponibilizaIa a todos na Internet. E quem far esta separao? Quem ser
o responsvel por bloquear a passagem de conexes desconhecidas e no autorizadas em minha rede? Sim senhores, esta
uma das utilidades de um Firewall, que no fica restrito a tal.
Um Firewall atuando como o que conhecemos por ponto de
induo, ou seja, sendo o nico computador diretamente conectado a Internet, poder de forma segura levar servios de
inter-conectividade
a sua rede local. J sem um Firewall
intermediando esta comunicao, cada hosts de sua LAN seria o responsvel por sua prpria segurana, e, a menos que
todos os seus usurios sejam especialistas em segurana da
informao, esta no e uma boa idia!
Existem, porm, objetivos no diretamente ligados a Firewalls
que, por desconhecimento de alguns, acabam sendo agregadas ao mesmo. Todos tendem a ampliar a expresso "integridade dos dados" fazendo com que acreditemos que Firewalls
podero, por exemplo, evitar que os hosts de nossa rede sejam infectados por vrus.
Primeiramente, note que a maioria das contaminaes, seja
por simples vrus que apagam informaes de seu HD ou com-

ptexos worms de contaminao em massa, tende a ocorrer


por via da troca de e-mails contaminados entre usurios de
sua rede ou, seno por este mtodo, devido a programas tambm contaminados e baixados da Internet pelos mesmos. Isso
quando aquele desavisado no carrega um disquete maldito
no bolso da camisa e sequer terncoraqern, orientao ou conhecimento de verific-Io com um software anti-vrus.
Um Firewall jamais atender a esta necessidade, dito que o
mesmo no atua a este nvel. Devemos levar em considerao que tal ferramenta no possui agregada a si a funo de
vasculhar pacotes que trafegam em sua rede a procura de
assinaturas de vrus. Neste caso, a melhor alternativa utilizar um anti-vrus mesmo!

o mximo

que um Firewall poder fazer evitar que sua rede


seja monitorada por trojans e que os mesmos troquem informaes com outros hosts na Internet; basta que configuremos um simples bloqueio a qualquer tentativa de conexo vinda da internet para as mquinas de sua rede, sob uma porta
especifica ou at mesmo host, tal como, em alguns casos,
monitorando cada segmento trafegado a procura de palavras
chaves embutidas em pacotes no autorizados.
Note que, a princpio, as funes de um Firewall estariam ligadas to somente a atuao de agentes externos tais como
crackers, espies. industriais e at mesmo governamentais,
mas jamais internos. Bem, digamos queeste foi um dos grandes erros cometidos por especialistas em segurana nos
primrdios da TI, ou seja, achar que a ameaa estava to somente na Internet.
Segundo dados divulgados pelo FBI, em quase 90% dos casos de invases bem sucedidas a servidores corporativos, os
usurios da rede (usurios autorizados) tiveram algum nvel
de parcela de culpa. A parcela varia de senhas mal escolhidas

I"
I

ll r u b a t a n Neto

DOMINANDO LINUX FIREWALL !PTABLES

(como por exemplo datas de nascimento, de casamento, etc.)


a usurios descontentes que forneceram informaes de acesso a empresas concorrentes meramente em troca de um razovel pagamento.
Logo, a ameaa passa a vir de todos os lados. Mas, como
control-Ias? De fato um Firewall no ser capaz de captar e
gerenciar perfis comportamentais tais como 10S, mas poder,
por exemplo, bloquear o acesso externo ao sistema, tal como
interno, liberando-o apenas para alguns computadores.
Poder tambm especificar que tipos de protocolos e servios
sero disponibilizados, tanto externa quanto internamente;
realizar compartilhamento de acesso a Internet para toda a
rede local sem permitir que se falem diretamente; monitorar
conexes, bloquear acessos indevidos ..a sites e hosts no
autorizados e, principalmente, controlar os pacotes utilizados
por servios pouco confiveis como, por exemplo, o rlogin,
telnet, FTP, NFS, ONS, LOAP, SMTP RCP e X-Window.

Mas, se voc passou pela triagem acima e realmente pretende adquirir conhecimento suficiente para criar solues de
Firewalls baseadas em Iptables, tenha em mente que parte
dos nmeros, agregados pesquisa anual de segurana da
informao e s demais pesquisas do gnero, estar diretamente ligada sua atuao como profissional, pois elas relatam, to somente, o despreparo ou preparo eficiente de ferramentas de segurana.
O que noto nestas pesquisas e nos nmeros agregados a elas
no o fato de que os crackers esto ficando cada vez melhores
e mais espertos, ou que a Internet est cada vez mais insegura.
Observo apenas que nossas empresas conectam-se a Internet
sem qualquer tipo de preparo especfico para este nvel.
Logo, se voc esta lendo este livro porque esta cultura, de
certa forma, comea a se modificar, ou seja, teremos, por via
do Sr.Leitor, menos uma empresa potencialmente vulnervel
a invases (modstia a parte)!

i ~

Enfim, para que venhamos a criar Firewalls, ~ necessrio primeiramente que estejamos por dentro dos aspectos tcnicos
bsicos que envolvem segurana a sistemas e redes. Afinal
de contas, como proteger um servio sem sequer saber se o
mesmo ou no confivel? Que porta devo fechar, se sequer
sei para que serve a 80? Como liberar apenas o que realmente seguro e esperar filtrar palavras chaves em pacotes de
conexes sem nunca ter analisado um por via de um sniffer?

Logo, no recomendo que usurios pouco experientes leiam


este livro pois o mximo que conseguiro no compreender
absolutamente nada do que aqui est escrito. Tambm no
recomendo que usurios e administradores de sistemas que
no sejam o Gnu/Linux ou variantes rodando sob os mesmos
padres o leiam, pois o Iptables um Firewall dirigido a estes
sistemas.

E lembre-se que, nada evitar que tentativas de invases continuem a existir mas, o que definir se estas sero bem sucedidas ou no ser o conhecimento embutido em seu Firewall e
demais ferramentas de segurana. Tudo criado e gerenciado
unicamente por voc. Se a invaso acontecer voc ser o nico
responsvel por ela (Sentiu a presso que envolve a profisso?).
Ainda continua a ler com ateno este livro? Ento voc sabe
realmente o que quer ... Prepare-se para noites mal dormidas
e bem vindo ao mundo da Segurana da Informao!

1.2 - Histrico
Como introduo, podemos afirmar que Firewall um programa que detm autonomia concedida pelo prprio sistema para

i'
I

I,

!:

Urubatan

10

11

Neto

DOMINANDO l1NUX FIREWALL !PTABLES

pr-determinar e disciplinar todo o tipo de trfego existente


entre o mesmo e outros hosts/redes; salvo situaes onde o
Firewall um componente de solues denominado "Firewallin-a-box", onde neste caso, trata-se no to somente de um
software e sim de um agrupamento de componentes incluindo
software e hardware, ambos projetados sob medida para compor solues de controle perante o trfego de um host/rede.
Independentemente dos argumentos conceituais utilizados para
se expressar a utilidade e eficincia das ferramentas Firewalls,
estas so, sem sombra de dvida, o meio mais seguro de se
levar servios de inter-conectividade a hosts/redes. Mas seguro
do que isso, s removendo a interface de rede de seu host ou
desconectando os cabos do Hub de sua rede.
Desenvolvido pela Bell Labs em meados de 80 e, sob encomenda da gigante das telecomunicaes AT& T, o primeiro
Firewall do mundo foi desenvolvido com o intuito de "filtrar"
todos os pacotes que sassem e entrassem na rede corporativa,
de modo a manipul-tos de acordo com as especificaes das
regras previamente definidas pelos cientistas da Bell.
De l para c, mesmo diante da bvia evoluo dos meios
tecnolgicos um Firewall continua a possuir e empregar os
mesmos conceitos desenvolvidos nos laboratrios da Bell,
apenas com alguns aprimoramentos e implementaes de
novas funcionalidades, pois, devemos levar em considerao
que at os dias de hoje, duas dcadas aps ser concebido,
um Firewall tem como principal finalidade a filtragem de pacotes, porm no mais a nica, como veremos mais adiante.
Os aperfeioamentos citados previamente acabaram com o passar dos anos, tornando bastante complexa a compreenso dos
aspectos conceituais da ferramenta, que devido a isso sofreu
modificaes em sua estrutura referencial. O que antes poderia
ser classificado apenas como um "filtro de pacotes" ganhou novas classes e passou a ser exposto da seguinte forma:

1.3 - Firewall Filtro de Pacotes


O Linux tem implementado a filtragem de pacotes desde a
primeira gerao dos Kernels (t.X). Em meados de 1994 Alan
Cox portou-o nativamente para o mesmo.
Esta classe de Firewall responsvel por filtrar todo o trfego
direcionado ao prprio host Firewall ou a rede que o mesmo
isola, tal como todos os pacotes emitidos por ele ou por sua
rede. Ocorre mediante a anlise de regras previamente
inseridas pelo administrador do mesmo.
O Firewall filtro de pacotes possui a capacidade de analisar
~ cabealhos (Headers) de pacotes enquanto os mesmos trafegam. Mediante essa anlise, que fruto de uma extensa comparao de regras previamente adicionadas, pode decidir o
destino de um pacote como um todo. A filtragem pode, ento,
deixar tal pacote trafegar livremente pela rede ou simplesmente
parar sua trajetria, ignorando-o por completo. O mesmo ,
sem dvida, a classe mais utilizada de Firewall. No aplicar
seus conceitos deixar as portas abertas e permitir a livre
circulao de pacotes no confiveis por sua rede.

o
I'~

Existem 3 argumentos convincentes para que voc implemente


um Filtro de Pacotes em sua rede: controle, segurana
vigi-

lncia.

1.4 - Firewall NAT


Um Firewall aplicado classe NAT, a princpio, possui o objetivo de manipular a rota padro de pacotes que atravessam o
kernel do host Firewall aplicando-Ihes o que conhecemos por
"traduo de endereamento". Isso lhe agrega diversas funcionalidades dentro deste resumido conceito, como por exemplo,

.ZtU

Urubatan
12

DOMINANDO

Neto

13

LINUX FIREWALL !PTABLES

a de manipular o endereo de origem (SNAT) e destino (DNAT)


dos pacotes, tal como realizar Masqueranding sobre conexes
PPP, entre outras potencial idades.
No h dvidas de que o Firewall NAT nos abre um amplo
leque de possibilidades, porm, seus conceitos vo um pouco
alm da mera filtragem de pacotes (no desmerecendo tal classe). Partindo ento para aspectos um pouco mais peculiares
no que envolve os conceitos de roteamento de redes. Um
Firewall NAT pode, por exemplo, realizar o trabalho de um proxy
de forma simples e eficiente, independente de ip, fixo ou dinmico. Obviamente, no contando com a velocidade de um proxy
cache, mas, de certa forma, mantendo o mximo de segurana em sua rede interna.
Contemplaremos mais adiante todas as funcionalidades de
um Firewall NAT tratando ento cada uma destas funes
(SNAT, DNAT e Masqueranding) de forma mais dirigida e detalhada.
A seguir um exemplo de uma conexo envolvendo uma rede
local, um Firewall Nat e a Internet. Neste exemplo, o Firewall
Nat realiza o que conhecemos por SNAT, ou seja, estabelece
uma conexo entre ambas as redes (local e Internet) sem
que as mesmas se comuniquem diretamente. Para que isso
seja possvel, o Firewall Nat altera o endereo de origem
(source nat, ou simplesmente SNAT) do pacote que enviado pela rede local (no exemplo pelo host "A") e em seu lugar
disponibiliza a rede Internet seu prprio endereo, ou seja, o
endereo de origem do pacote enviado pela rede local passar a ser o do host Firewall Nat. O mesmo ocorre na operao inversa, ou seja, no retorno do pacote, onde a rede local
ter contato to somente com o ip do prprio Firewall e no
com o ip do real emissor do pacote pertencente rede
Internet.

Eth1: 192.153.22.55

Host "Ali
10.0.3.2

INTERNET

1.5 - Firewall Hbrido


Um Firewall Hbrido agrega a si tanto funes de filtragem de
pacotes quanto de NAT. Trata-se, na verdade, da unio de
ambas as classes e no to somente de uma classe isolada
com propriedades prprias.
Conforme podemos observar na "prtica", as finalidades do
Firewall atuando como ferramenta de segurana de sistemas
e redes foram ampliadas e novas funes lhe foram agregadas, destoando ento do projeto original concebido pela SeU
Labs. Da a necessidade de subdividi-Io em classes, pois foram elas que nos possibilitaram um completo entendimento
de suas possveis aplicaes (tal como as camadas do OSI,
mesmo sendo este um modelo extinto, nos possibilita uma
melhor compreenso dos modelos de comunicao entre computadores).

o Linux, as funes de Firewall so agregadas prpria arquitetura do Kernel, isso o torna, sem dvida,
muito superior em relao a seus concorrentes. Enquanto a maioria dos "produtos" Firewall pode ser definida como
sub-sistema, o Linux possui a capacidade de transformar o
Firewall no prprio.
Tudo o que chega ou sai de um host processado por seu
Kernel, independente de sistema operacional. O que o Linux
faz de diferente agregar, via Netfilter (software este tnicialmente acoplado ao sistema) funes de controle de fluxo interno em termos de Firewall.
Para compreendermos melhor importante que tenhamos em
mente que o Kernel, possuindo a funo bvia de ncleo do
sistema, deve estar ciente de tudo o que entra e sai de sua
estrutura, tudo o que lido e executado, tudo o que apagado
ou escrito, redirecionado ou encaminhado, ou seja, tudo o que
acontece em seu sistema, independentemente da camada em
questo dever faz-Io mediante a autorizao de execuo e
monitoramento do prprio Kernel.
Sim, sabemos ento que o Kernel, no nvel operacional, deve
estar ciente de tudo o que se passa no sistema, pois sem isso
no h nenhum tipo de controle, como o gerenciamento de

18

DOMINANDO LINUX FIREWALL !PTABLES

memria, por exemplo, e, sabemos tambm que esta tarefa


por si s j exige bastante do mesmo, tendo em mente que
alguns cernes costumam apresentar problemas na realizao
de sua mais bsica funo: a de controlar seus processos e
tarefas.
Um bom exemplo disso o prprio Kernel do MS Windows,
que "sobrevive",
at os dias de hoje, de problemas de
gerenciamento de memria e bibliotecas compartilhadas. Neste
momento, podemos compreender porque o MS Windows no
possui controle em se tratando de Firewall incorporado em
sua arquitetura,
pois o mesmo, obtendo problemas no
gerenciamento mais primrio de todos( o controle de seus processos e tarefas) jamais daria conta de controlar tambm o
fluxo de sua prpria estrutura.
Acho que posso utilizar-me de um trocadilho e mandar um
recado ao tio Sill: "Realmente o Windows o 1... O 1 a ser
invadido, a ser contaminado, a dar bugs, a ... etc e tal ..."
Agindo desta maneira, o MS Windows e outros sistemas
operacionais lhe foram a procurar alternativas secundrias, ou seja, outros softwares e dos mais diversos fabricantes para agregar ao sistema estruturas de controle de fluxo
de dados.
bom lembrar que Firewalls comerciais como Sonicwall e
Check Point, por exemplo, alm de custarem uma alta bagatela no se tratam exclusivamente de produtos, daqueles que
voc instala e pronto ... Pode comer pizza e tomar vinho todas
as noites despreocupado pois h um Firewall de "Grife" protegendo seu sistema e rede. Os mesmos, como todo e bom
software comercial que se preze, obviamente, lhe entrelaar
em treinamentos, patches de correes e atualizaes, novas
verses (em geral anualmente), enfim, o fabricante deste continuar na sua cola pelo resto da eternidade.

Urubatan

Neto

19

No Linux voc no precisar comprar este ou aquele Firewall


corporativo carssimo para proteger sua rede, at pode, pois
produtos no iro faltar. Tenha ento em mente que o Iptables
considerado um dos Firewalls mais seguros existentes na
atualidade, isso tudo de forma free, isso mesmo, de graa e
com open source e tudo.

2.1 - Fluxo do Kernel vs. Netfilter


Conforme podemos observar, o Linux utiliza-se de um recurso
independente em termos de kernel para controlar e monitorar
fado o tipo de fluxo de dados dentro de sua estrutura
operacional. Mas no o faz sozinho, pois sua funo deve ser
a de trabalhar ao lado de processos e tarefas to somente.
Para que o Kernel pudesse ento controlar seu prprio fluxo
interno lhe fora agregada uma ferramenta batizada de Netfilter.
Criada por Marc Soucher, James Morris, Harald Welte e Rusty
Russell, o Netfilter um conjunto de situaes de fluxo de
dados agregadas inicialmente ao kernel do Linux e dividido
em tabelas:
Sob uma tica mais "prtica", podemos ver o Netfilter c0'1l0
um grande banco de dados que contm em sua estrutura 3
tabelas padres: Filter, Nat e Mangle. Cada uma destas tabelas contm regras direcionadas a seus objetivos bsicos. A
tabela Filter, por exemplo, guarda todas as regras aplicadas a
um Firewall filtro de pacotes; a tabela Nat as regras
direcionadas a um Firewall Nat e a Mangle a funes mais
complexas de tratamento de pacote como o TOS.
Todas as tabelas possuem situaes de fluxo (entrada, sada,
redirecionamento, etc.) que Ihes proporcionam a realizao
de seus objetivos.

~J

:-

C..
c
O"

"I

'O
~

li

20

DOMINANDO

LINUX FIREWALL !PTABLES

A tabela filter por exemplo, que guardar as regras ligadas


a um Firewall filtro de pacotes contm 3 modelos de situaes de fluxo: INPUT, OUTPUT E FORWARD. Voc deve
estar se perguntando porque to somente estas trs situaes
de fluxo. Bem, podemos afirmar que um Firewall filtro de pacotes no precisa de mais nenhuma situao agregada a si
para que possa vir a funcionar perfeitamente. Este conceito
tambm pode ser atribudo a todas as demais tabelas do
Netfilter.
Para uma melhor compreenso dos conceitos abordados conheceremos ento todas as 3 tabelas agregadas ao Netfilter.

2.2 - A Tabela Filter


a tabela padro do Netfilter e trata das situaes implementadas por um Firewall filtro de pacotes. Estas situaes so:
~ INPUT
-+ Tudo o que entra no host
~ FORWARD

-+

Tudo o que chega ao host mas deve ser redirecionado


a um host secundrio ou outra interface de rede

~ OUTPUT
-+ Tudo o que sai do host

2.3 - A Tabela Nat

IlIill

Esta tabela implementa funes de NAT (Network Address


Translation) ao host Firewall. O Nat por sua vez, possui diversas utilidades, conforme abordado anteriormente. Suas situaes so:

Urubatan
}>

}>

}>

Neto

21

PREROUTING
-+ Utilizada quando h necessidade de se fazer alteraes
em pacotes antes que os mesmos sejam roteados
OUTPUT
-+ Trata os pacotes emitidos pelo host Firewall
POSTROUTING
-+ Utilizado quando h necessidade de se fazer alteraes
em pacotes aps o tratamento de roteamento

2.4 - A Tabela Mangle


Implementa alteraes especiais em pacotes em um nvel mais
complexo. A tabela mangle capaz, por exemplo, de alterar a
prioridade de entrada e sada de um pacote baseado no tipo
de servio (TOS) o qual o pacote se destinava. Suas situaes so:
~ PREROUTING
-+ Modifica pacotes dando-Ihes um tratamento especial
antes que os mesmos sejam roteados.
~ OUTPUT
-+ Altera pacotes de forma "especial" gerados localmente
antes que os mesmos sejam roteados.
Note que, ao analisarmos o fluxo de dados do Kernel do Linux
as coisas comeam a ficar mais claras. Dito que um host para
fazer parte de uma rede (e at mesmo para comunicao
intraprocessual) precisa das situaes (chains) de entrada
(INPUT) e sada (OUTPUT). Se agregarmos ainda uma nova
situao (chain), a de redirecionamento, ou simplesmente encaminhamento (FORWARD), poderamos tambm manipular
o que redirecionamos / encaminhamos a outros hosts, e assim sucessivamente.
importante termos em mente que, tecnicamente, tais situaes "vividas" por um Kernel so denominadas chains. Logo,

22

DOMINANDO LINUX FIREWALL IPTABLES

uma situao de entrada trataria-se, na verdade, de uma INPUT


chain, uma situao de redirecionamento uma FORWARD
chain e uma situao de sada uma OUTPUT chain.
Conforme j citamos, um bom Firewall deveria ser um subsistema que controla tais situaes. Porm, somos profissionais privilegiados e lhe damos com uma plataforma madura e
completa, o que nos possibilita controlar o fluxo do Kernel pelo
prprio, ao invs de utilizarmos sub-sistemas, utilizaremos
mdulos nativos como o Netfilter, por exemplo.

FIREWALL
IPTABLES

Recapitulando ... O Kernel do Linux possui funes de Firewall


graas as tabelas que se agregam ao Netfilter, que por sua
vez est originalmente agregado ao Kernel.
Tais tabelas (do Netfilter) nos possibilitam controlar todas as
situaes (chains) de um host. Porm, para que possamos vir
a moldar o Netfilter conforme nossas necessidades, levando
em considerao que o mesmo deve estar compilado com o
Kernel, precisamos de uma ferramenta que nos sirva de FrontEnd nesta tarefa.
Um Front-End lhe possibilitar o controle das situaes (chains)
contidas nas tabelas agregando-Ihes regras de trfego.
Entendo por regras as pr-definies aplicadas a fim de disciplinar todo um trfego de dados em uma rede/host.
Historicamente falando, o Linux nos disponibilizou uma nova
ferramenta de manipulao nativa a cada nova verso oficial
(verses sob o nmero par, ex: 2.4)
KERNEL 2.0
KERNEL 2.2
KERNEL 2.4/2.6

- IPFWADM
- IPCHAINS
- IPTABLES

Obviamente,
a cada nova verso
melhorias
implementadas tal como possveis falhas corrigidas.

foram
"O pensamento uma idia em trnsito. "(Pitgoras)

3.1

Conceitos

Iptables, conforme sugerido anteriormente, trata-se, na verdade, de uma ferramenta de Front-End para lhe permitir manipular as tabelas do Netfilter, embora o mesmo seja constantemente confundido com um Firewall por si s.
Ele uma verso mais robusta, completa e to estvel quanto
seus antecessores IPFWADM e IPCHAINS, implementados
nos Kernels 2.0 e 2.2 respectivamente.
O Iptables foi concebido por Rusty Russell (que por sinal tambm participou do projeto de desenvolvimento do Netfilter) em
colaborao com Michel Neuling e incorporado a verso 2.4
do Kernel em julho de 1999. O mesmo compe a quarta gerao de sistemas Firewalls no Linux.
Como principais caractersticas, o Iptables (alm de realizar
suas tarefas de forma veloz, segura, eficaz e econmica, tanto no aspecto financeiro quanto no de requerimento
de
hardware) nos d um amplo leque de possibilidades tais como
a implementao desde filtros de pacotes utilizando a tabela
Filter a NAT via tabela NAT e mais controles avanados como
o desenvolvimento de aos sobre o trfego, suporte a SNAT E
DNAT, redirecionamento
de endereamento
e portas,
mascaramento
de conexes, deteco de fragmentos,
monitoramento de trfego, TOS, bloqueio a ataques Spoofing,

Urubatan

26

Ne t o

27

DOMINANDO LINUX FIREWALL !PTABLES

Syn-Flood, DOS, scanners ocultos, pings da morte entre muitos outros. E, se j no fosse o suficiente, ainda temos a opo de utilizar mdulos externos na composio de regras, o
que amplia ainda mais as funcionalidades do mesmo

3.2 - Sntese e Lgica


o

Iptables um mdulo do Kernel do Linux, logo, o mesmo


deve estar sendo executado pelo sistema para que possa vir a

funcionar.
Mdulos externos podem ser invocados via flag -m tal como -match. Ex:
[root@johann /1# iptables -A INPUT -m string --string
"X-Kazza" -j DROP
Quando se fala de requerimento de hardware, o Iptables
bastante generoso, necessitando apenas de um computador
sobre a arquitetura 386 com aproximadamente 4 MB, e claro, de um kernel 2.4 ou superior. Sim, este o bsico do bsico. lgico que um pouco mais de memria e processamento
s tendem a melhorar o desempenho do software tal como do
prprio sistema.
A princpio, o Iptables composto pelos seguintes aplicativos:
~ iptables
-+ Aplicativo principal do pacote iptables para protocolos
ipv4
~ ip6tables
-+ Aplicativo principal do pacote iptables para protocolos
ipv6
~ iptables-save
-+ Aplicativo que salva todas as regras inseridas na sesso ativa e ainda em memria em um determinado arquivo informado pelo administrador do Firewall.
~ Iptables-restore
-+ Aplicativo que restaura todas as regras salvas pelo
software iptables-save.
Os Softwares Iptables e Netfilter possuem sua poltica de direitos e distribuio sob as regras do GNU conforme publicado pela Free Software Foundation (FSF).

Ipchains, Front-end de Firewall adotado pela distribuio


2.2 do kernel ainda compe o Kernel 2.4 por questes de compatibilidade, embora o ltimo suspiro do mesmo se d no ano
de 2004. O fato que ningum obrigado a aprender Iptables
da noite para o dia, afinal de contas liberdade algo que o
prprio Linux tal como ns que compomos sua comunidade
fizemos questo de polemizar.
Justamente por este motivo, voc, que j possui alguma experincia na manipulao do Firewalllpchains, no ter grandes
dificuldade no aprendizado desta magnfica ferramenta que
o Iptables e notar tambm que, a princpio, a sntese lgica
deste quase a mesma utilizada pelo Firewall do Kernel 2.2,
embora bastante diferente de Ipfwadm, Firewall este presente
no Kernel 2.0.
Pode ocorrer (embora tal problema seja um pouco raro) do
mdulo Ipchains (/lib/modules/2.4.18-2cl/kernel/net/ipv4/
netfilter/ipchains.o) estar ativo no sistema, o que impede que
o Iptables possa vir a funcionar corretamente. Para o desativar
necessrio proceder da seguinte maneira:
[root@johann /1#

rmmod ipchains

Agora liste os mdulos ativos em seu sistema utilizando o comando "Ismod" (Iistagem dos mdulos do Kernel). A seguir
uma listagem fornecida por meu computador que no necessariamente dever ser igual ao seu:

28

DOMINANDO

LINUX FIREWALL

!PTABLES

[root@johann /l# lsmod


Module
nls_iso8859-1
nls_cp437
Rhinefet
Supermount
Soundcore
usb-uhci

Urubatan

Size
2880
4384
25568
55620
3460
20708

Used
1
1
1

1
2
O

by
(autoclean)
(autoclean)
(autoclean)
(autoclean)
(autoclean)
(unused)

Note que o mdulo do Ipchains no consta mais em seu sistema, devemos ento "levantar" o mdulo do Iptables, para isso
basta utiliza-Io uma vez ou digitar o comando a seguir:
[root@johann /l# insmod ip_tables
Using /lib/modules/2.4.18-2cl/kernel/net/ipv4/
netfilter/ip_tables.o
Por estar incorporado diretamente ao Kernel, a configurao
do Iptables no se d por via de arquivos de configurao, ao
contrrio, sua manipulao realizada por sntese digitada
em shell.
Quando inserimos uma regra na shell, ela estar valendo to
somente para aquela sesso "pendurada" em memria, sendo
que uma vez resetado ou desligado o computador Firewall, tais
regras sero perdidas e no mais podero serem resgatadas.
Para compreendermos melhor este conceito estudemos a forma de comportamento de um roteador CISCO com relao
ao arquivamento de suas configuraes:
Quando configuramos o IOS (Interface do Sistema Operacional CISCO) de um roteador CISCO em um determinado
momento, tudo o que estamos a configurar salvo to somente na memria Ram, ou simplesmente um processo conhecido como running-config (a configurao que est rodando
na mquina naquele momento).

Neto

29

Para que tal configurao, at ento salva apenas na memria Ram, seja arquivada para um disco, por exemplo, devemos copi-Ia para o que conhecemos como startup-config (configurao de inicializao).
Para salvar o que fora configurado neste momento e que ainda reside na memria Ram, precisamos utilizar o seguinte
comando (em um roteador CISCO):
Router# copy running-config startup-config
Isso quer dizer, antes de mais nada, que se voc configura um
roteador durante horas e no fim esquece de salvar o que fez
na statup-config, voc estar condenado a perder tudo mediante a um reboot operacional; afinal, no podemos nos esquecer que a memria Ram voltil, e que se esvazia a cada
nova inicializao do dispositivo. Em compensao, se voc
fizer algo de errado durante uma configurao basta no salvar nada e reiniciar o sistema!!

o Iptables

funciona de forma similar citada acima. No momento em que realizamos alguma implementao em nosso
Firewall utilizando o mesmo, ele estar apenas salvando nossas configuraes na Ram do dispositivo.

Existe porm, agregado ao Iptables, uma funo / programa


denominada "iptables-save" que faz muito bem o papel de
statup-config, salvando suas regras (ao seu comando) no disco e resgatando-as diante de uma reinicializao do sistema
(tambm ao seu comando).
Para salvar as regras atuais de um sistema com o Iptablessave utilize a sntese a seguir:
[root@johann /l# iptables-save > /bin/rc.firewall
O comando anterior salvar as regras atuais do sistema (ainda em Ram) para o arquivo /bin/rc.firewall. Digamos que o

30

DOMINANDO

Urubatan

LINUX FIREWALL !PTABLES

Neto

31

mesmo representa para o Iptables o que um "Router# copy


runnging-config startup-config" representa para um roteador
CISCO.

tar nenhum problema ao avano de nossos estudos. A se-

Segue a seguir um exemplo de contedo do arquivo /bin/


rc.firewall gerado pelo iptables-save:

[alvo)

[root@johann 1]# cat Ibin/rc.firewall


# Generated by iptables-save v1.2.4 on Sat May 31
12:38:10 2003
*filter
:INPUT ACCEPT [172~26448]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [228:17272]
-A FORWARD -s 10.0.3.4 -d 10.0.3.83 -j DROP
-A FORWARD -p icmp -m icmp --icmp-type 8 -j DROP
-A FORWARD -p tcp -m limit --limit 1/sec -j ACCEPT
-A FORWARD -m unclean -j DROP
COMMIT
# Completed on Sat May 31 12:38:10 2003

3.2.1 - Tabelas

Voc tambm pode substituir o iptables-save por qualquer outro


shell script que contenha as regras a serem inseridas no sistema. Tal arquivo pode ser posto para iniciar juntamente com o
sistema de forma automtica acrescentando uma chamada
ao mesmo ao fim do arquivo /etc/rc.d/rc.local (Voc j deve
estar farto de saber isso!!!)
Apenas para esclarecimento, no necessariamente o script
precisaria se chamar rc.trewall, ou estar no diretrio /bin. O
nome na verdade foi a uma padronizao da comunidade de
segurana Open-source, tal como mant-Io no diretrio /bin
torna seu acesso via linha de comando mais prtico.
Ora, visto a teoria, passemos para a sntese do Iptables, sntese esta extremamente intuitiva e lgica, logo, no represen-

guir a sntese do Iptables:


[root@johann Il# iptables [tabela] [comando] [ao)

So as mesmas que compem o Netfilter, Filter, NAT e Mangle.


Utilizamos est opo para associar uma regra a uma tabela
especfica:
[root@johann 1]# iptables -t filter
# Insere uma regra utilizando a tabela filter
[root@johann 1]# iptables -t magle
# Insere uma regra utilizando a tabela Mangle
[root@johann 1]# iptables -t nat
# Insere uma regra utilizando a tabela NAT
A tabela filter a padro do Iptables, logo, se adicionarmos
uma regra sem utilizarmos a flag -t [tabela], o mesmo aplicar
situaes contidas na tabela filter a tal regra. Sempre que uma
sntese no especifica a tabela ao ser utilizada, o iptables adota
a filter por padro. J no caso das tabela NAT e Mangle,
necessrio especificar sempre.
Maiores detalhes sobre as tabelas do Netfilter podem ser encontrados na sesso "Arquitetura do fluxo do Kernel".

3.2.2 - Comando
-A - Adiciona (anexa) uma nova entrada ao fim da lista de
regras;

32

DOMINANDO

LINUX FIREWALL

[PTABLES

[root@johann /l# iptables -A INPUT


# Adiciona uma nova regra ao final da lista referente a INPUT
chain
-D - Apaga uma regra especificada da lista;
[root@johann /l# iptables -D INPUT
# Apaga a regra inserida anteriormente apenas trocando o
comando -A pelo -D
# O comando -D tambm lhe permite apagar uma certa regra
por seu nmero da lista de ocorrncias o Iptables.;
[root@johann /l# iptables -D FORWARD 2
# Apaga a regra de nmero 2 referente a FORWARD chain
-L - Lista as regras existentes na lista;
[root@johann /l# iptables -L FORWARD
Chain FORWARD (policy ACCEPT)
target prot opt source destination
DROP icrnp -- anywhere anywhere icrnp echo-request
ACCEPT tcp -- anywhere anywhere lirnit: avg l/sec
burst 5
DROP all -- anywhere anywhere unclean
# Na listagem anterior, referente as regras anexadas a
FORWARD chain, foram relatadas 3 ocorrncias.
-p - Altera a poltica padro das chains. Inicialmente, todas
as chains de uma tabela esto setadas como ACCEPT,
ou seja, aceitam todo e qualquer tipo de trfego.
Para modificar esta poltica utilizamos a flag -P;
[root@johann /l# iptables -P FORWARD DROP
# A sntese anterior modifica a poltica padro da chain
FORWARD e ao invs de direciona-Io para o alvo ACCEPT o
leva a DROP. Um pacote que conduzido ao alvo drop e
descartado pelo sistema. Veja como fica a politica da
FORWARD chain aps o comando digitado anteriormente:

U r u b a ta n N e to

33

[root@johann /l# iptables -L FORWARD


Chain FORWARD (policy DROP)
target prot opt source destination
DROP icmp -- anywhere anywhere icmp echo-request
ACCEPT tcp -- anywhere anywhere limit: avg 1/sec burst 5
DROP ali -- anywhere anywhere unclean
Sempre que possvel, antes de iniciar a configurao de um
Firewall sobre qualquer tabela, modifique a politica padro de
suas chains para REJECT ou DROP, isso lhe dar a tranqilidade de que enquanto voc conclui a configurao do mesmo, nenhum pacote inesperado trafegar por seu host/rede.
-F - Este comando capaz de remover todas as entradas
adicionadas a lista de regras do Iptables sem alterar a
poltica padro (-P);
[root@johann /l# iptables -F
# Remove todas as regras
[root@johann /l# iptables -F OUTPUT
# Remove todas as regras referentes a OUTPUT chain
-I - Insere uma nova regra ao nicio da lista de regras (ao
contrrio do comando -A que insere ao final da lista);
[root@johann ~# iptables -I OUTPUT

-R - Substitui uma regra j adicionada por outra;


[root@johann /l# iptables -R FORWARD 2 -s
10.0.40.3 -d 10.0.30.0/8 -j DROP
# Substitui a segunda regra referente a FORWARD chain pela
seguinte: "-s 10.0.40.3 -d 10.0.30.0/8 -j DROP"
-N - Este comando nos permite inserir/criar uma nova chain a
tabela especificada.
[root@johann /l# iptables -t filter -N internet
# Cria uma nova chains "internet" sobre a tabela filter

32

DOMINANDO

LINUX FIREWALL

IPTABLES

[root@johann /J#

iptables -A INPUT

# Adiciona uma nova regra ao final da lista referente a INPUT


chain

-o -

Apaga uma regra especificada da lista;


[root@johann /J#

iptables -D INPUT

# Apaga a regra inserida anteriormente apenas trocando o


comando -A pelo -O
# O comando -O tambm lhe permite apagar uma certa regra
por seu nmero da lista de ocorrncias o Iptables.;

[root@johann /J#

iptables -D FORWARD 2

# Apaga a regra de nmero 2 referente a FORWARO chain

-L - Lista as regras existentes na lista;


[root@johann /J# iptables -L FORWARD
Chain FORWARD (policy ACCEPT)
target prot opt source destination
DROP icmp -- anywhere anywhere icmp echo-request
ACCEPT tcp -- anywhere anywhere limit: avg l/sec
burst 5
DROP all -- anywhere anywhere unclean
# Na listagem anterior, referente as regras anexadas a
FORWARO chain, foram relatadas 3 ocorrncias.

-p - Altera a poltica padro das chains. Inicialmente, todas


as chains de uma tabela esto setadas como ACCEPT,
ou seja, aceitam todo e qualquer tipo de trfego.
Para modificar esta poltica utilizamos a flag -P;
[root@johann /J#

iptables -P FORWARD DROP

Ur u ba t a n Neto

[root@johann /J#

33

iptables -L FORWARD

Chain FORWARO (policy DROP)


target prot opt source destination
OROP icmp -- anywhere anywhere icmp echo-request
ACCEPT tcp -- anywhere anywhere limit: avg 1/sec burst 5
OROP ali -- anywhere anywhere unclean

Sempre que possvel, antes de iniciar a configurao de um


Firewall sobre qualquer tabela, modifique a politica padro de
suas chains para REJECT ou DROP, isso lhe dar a tranqilidade de que enquanto voc conclui a configurao do mesmo, nenhum pacote inesperado trafegar por seu host/rede.
-F - Este comando capaz de remover todas as entradas
adicionadas a lista de regras do Iptables sem alterar a
poltica padro (-P);
[root@johann /J#

iptables -F

# Remove todas as regras

[root@johann /J# iptables -F OUTPUT


# Remove todas as regras referentes a OUTPUT chain

-I - Insere uma nova regra ao nicio da lista de regras (ao


contrrio do comando -A que insere ao final da lista);
[root@johann ~# iptables -I OUTPUT

-R - Substitui uma regra j adicionada por outra;


[root@johann /J# iptables -R FORWARD 2 -s
10.0.40.3 -d 10.0.30.0/8 -j DROP
# Substitui a segunda regra referente a FORWARO chain pela
seguinte: "-s 10.0.40.3 -d 10.0.30.0/8 -j OROP"

# A sntese anterior modifica a poltica padro da chain


FORWARO e ao invs de direciona-Io para o alvo ACCEPT o
leva a OROP. Um pacote que conduzido ao alvo drop e
descartado pelo sistema. Veja como fica a politica da
FORWARO chain aps o comando digitado anteriormente:

-N - Este comando nos permite inserir/criar uma nova chain a


tabela especificada.
[root@johann /J# iptables -t filter -N internet
# Cria uma nova chains "internet" sobre a tabela filter

34

DOMINANDO

LINUX FIREWALL

Urubatan

!PTABLES

Mas para que devemos criar uma nova chains? As que temos
em nossas tabelas no nos atendem? Logicamente que sim,
as chains que contam em nossas tabelas so suficientes para
atender a nossas necessidades.
A necessidade de se criar uma nova chain surge apenas para
tornar a organizao de seu Firewall mais simples. Digamos
que seu Firewall tem que gerenciar o trfego de sua LAN com
mais 5 WANs e ainda a Internet.
As regras inseridas seriam tantas que surgiria a necessidade
de se pegar chains como INPUT, por exemplo e dividi-Ias de
forma a facilitar sua administrao. Poderamos criar por exemplo as seguintes chains:

ENTRA_FILIAL 1
ENTRA FILIAL 2
ENTRA=FILlAL 3
ENTRA]ILlAL

ENTRA]ILlAL

INPUT

ENTRA_INTERNET 1

Note que todas as chains criadas so na verdade uma "cpia"


da INPUT chains, ou
seja, tratam dos pacotes que entram em seu host Firewall.
As criamos somente para dividir a entrada do trfego, da filial
1 a Internet. Uma vez feito isso, para modificar regras de entrada de um pacote vindo da Internet, bastaria que listassemos
as regras da chain ENTRA_INTERNET:
[root@johann /l# iptables -L ENTRA_INTERNET
Podemos agora analisar somente o trfego entrante referente
rede Internet tal como das demais "filiais" ao invs de listar
todas as regras de entrada em uma s chain (INPUT)

Neto

35

A verdade que a medida que seu fluxo aumenta, naturalmente voc sentir a necessidade de seccionar seu trfego
por via de chains criadas por voc mesmo.
Ao criar uma nova chain escolha um nome sugestivo de preferncia. O Iptables permite criar chains cujo nome contenham
at 31 caracteres sem espaos, tanto em letras minsculas
quanto MAISCULAS.
Criaremos agora uma nova chain denominada entnet, que tratar do trfego entrante da rede
Internet e far o mesmo trabalho da chain INPUT, porm,
direcionado apenas a este tipo especfico de trfego (o da
Internet);
[root@johann /l# iptables -t filter -N entnet
[root@johann /l# iptables -A INPUT -j entnet
# Primeiramente criamos a chain entnet e em segundo criamos
um salto da chain input para a chain entnet. Isso far com que
sua regra no s funcione de forma similar a INPUT chain
como tambm dir a seu Iptables para analisar a chain entnet
logo aps a chain INPUT.
-E - Renomeia uma nova chain (criada por voc)
[root@johann /l# iptables -e entnet ENTNET
# Renomeamos ento a chain entnet para ENTNET.
-X - Apaga uma chain criada pelo administrador do Firewall
[root@johann /l# iptables -x ENTNET
# apagamos ento a chain ENTNET criada anteriormente

3.2.3 - Ao
-p - Especifica o protocolo aplicado a regra. Pode ser qualquer valor numrico especificado no arquivo /etc/protocol
ou o prprio nome doprotocolo (tcp, icmp, udp, etc ...);
Ex. -p icmp

36

-i -

DOMINANDO

Urubatan

LINUX FIREWALL !PTABLES

Especifica a interface de entrada a ser utilizada; como


um Firewall possui mais de uma interface, esta regra
acaba sendo muito importante para distinguir a que
interface de rede o filtro deve ser aplicado. Para listar
suas interfaces de rede configuradas utilize o comando
"ifconfig" A regra -i no deve ser aplicada na OUTPUT
chain pois refere-se apenas a interface de entrada (INPUT
e FORWARD so as duas chains aplicveis a flag -i).
Ex. -i ethO

Podemos tambm especificar todas as interfaces "eth" de nosso host da seguinte forma:
Ex. -i eth+

-o - Especifica a interface de sada a ser utilizada e se aplica


da mesma forma que a regra -i, porm, somente as chains
OUTPUT e FORWARD se aplicam a regra;

deve ser aplicada. A origem pode ser um host ou uma


rede. Nesta opo geralmente utilizamos o IP seguido
de sua sub-rede;
Ex.

-8

37

- Significa excluso e utilizado quando se deseja aplicar


uma excesso a uma regra. utilizado juntamente com
as aes Os,-d, -p, -i, -o e etc.;
Ex. -s ! 10.0.0.3
# Refere-se a todos os endereos possveis com excesso do 10.0.0.3
Ex. -p ! icmp
# Refere-se a todos os protocolos possveis com excesso icmp

-j - Define o alvo (target) do pacote caso o mesmo se encaixe a uma regra. As principais aes so ACCEPT, DROP.
REJECT e LOG que sero citadas mais a frente.
---sport - Porta de origem (source port) , com esta regra
possvel aplicar filtros com base na porta de origem
do pacote. S pode ser aplicada a portas 'referentes aos protocolos UDP e TCP;
Ex. --p tcp -sport 80
# Refere-se a porta 80 do protocolo TCP

Ex. -o ethO

-s - Especifica a origem (source) do pacote ao qual a regra

Neto

--dport

- Porta de destino (destination port), especifica a porta


de destino do pacote e funciona de forma similar a
regra --sport

10.0.10.0/255.0.0.0

A mscara de rede pode ser omitida deste comando, neste caso


o iptables optar (de forma autnoma) pela mscara 255.255.
255.0 (o que acaba se aplicando a todas as sub-redes). O -s
tambm possibilita a utilizao de nomes ao invs do IP;

3.2.4 -

Alvo

Quando um pacote se adequa a uma regra previamente criada ele deve ser direcionado a um alvo e quem o especifica a
prpria regra. Os alvos (targets) aplicveis so:

Ex. -s www.gnu.org

Obviamente para resolver este endereo o Iptables utilizar a


resoluo de nomes (seu servidor DNS) que consta configurado em seu host Firewall.

ACCEPT
Corresponde a aceitar, ou seja, permite a entrada/passagem do pacote em questo.

-d - Especifica o destino do pacote (destination) ao qual a


regra deve ser aplicada. Sua utilizao se d da mesma
maneira que a ao -s.

DROP
Corresponde a descartar; um pacote que conduzido a este
alvo (target) e descartado imediatamente. O Target DROP

38

DOMINANDO

Ur u b at a n Neto

LINUX FIREWALL !PTABLES

no informa ao dispositivo emissor do pacote o que houve.


No caso de um ping (solicitao icmp), o mesmo no
retornar mensagens ao host de origem, isso dar a entender que o host que sofreu a solicitao (o ping) no existe, pois no enviar nenhum retorno ao mesmo.
REJECT
Corresponde a rejeitar; um pacote conduzido para este alvo
(Target) automaticamente descartado, a diferena do Reject
para o DROP que o mesmo retorna uma mensagem de
erro ao host emissor do pacote informando o que houve.
LOG
Cria uma entrada de log no arquivo /var/log/messages sobre a utilizao dos demais alvos (Targets), justamente por
isso deve ser utilizado antes dos demais alvos.
RETURN
Retorna o processamento do chain anterior sem processar
o resto do chain atual.
QUEUE
Encarrega um programa em nvel de usurio de administrar
o processamento do fluxo atribuido ao mesmo.
SNAT
Altera o endereo de origem das mquinas clientes antes
dos pacotes serem roteados. Pode, por exemplo, enviar um
pacote do host "A" ao host "8" e informar ao host "8" que tal
pacote fora enviado pelo host "C"
DNAT
Altera o endereo de destino das mquinas clientes. Pode,
por exemplo, receber um certo pacote destinado a porta 80
do host "A" e encaminha-Io por conta prpria a porta 3128
do host "8". Isso o que chamamos de Proxy transparent,
um encaminhamento dos pacotes dos clientes sem que os

mesmos possuam
roteamento.

a opo

de escolher

39

ou no tal

REDIRECT
Realiza redirecionamento de portas em conjunto com a opo -to-port.
TOS
Prioriza a entrada e sada de pacotes baseado em seu "tipo
de servio", informao esta especificada no header do IPV4.

3.3 - Sntese

Didtica

Convenhamos que, mediante a enxurrada de opes de sntese citadas previamente e, a no ser que voc seja uma mquina (no sentido literal da palavra), torna-se um pouco complicado obter total entendimento e assimilao da composio lgica e prtica das regras do Iptables.

fundamental lembrar que este livro prope-se, desde o nicio,


a lhe agregar total domnio da ferramenta lptables, e se no
houver uma absoluta compreenso da sntese de montagem e
manipulao de regras tal propsito se tornar impossvel.
Para tal, destino este captulo to somente para que possamos comear a adentrar na lgica de tal sntese, abordando-a
de maneira um pouco mais didtica.
Creio que este captulo ser interessante pois utilizaremos
conceitos reais para a montagem passo-a-passo de regras
que se adequem a nossos objetivos.
Porm, se voc acha que conseguiu compreender a lgica da
sntese do Iptables por completo apenas com o captulo anterior, tudo bem. Sinta-se a vontade para pular este captulo e
antes de mais nada, parabns!
Mas se voc no conseguiu, nada de desnimo ... O mundo
no ficou pronto em apenas um dia ...

"?'

II

40

Ur u b a t a n Neto

DOMINANDO LINUX FIREWALL !PTABLES

41

MISSO 1

MISSO 2

Antes de comearmos interessante que listemos as regras anexadas a base do Iptables, desta forma tambm
podemos observar a poltica padro de nossas chains (que
provavelmente estaro setadas como ACCEPT por ser este o
padro inicial do iptables). Utilizaremos ento o comando
u_L" que nos fornece uma listagem dos registros de regras
do Iptables;

Diante da listagem de regras do Iptables, podemos observar


que o Target (alvo) padro de nossas chains est setado como
ACCEPT. Vamos configurar o alvo padro das chains referente a tabela filter como DROP;

[root@johann /l# iptab1es -L


Chain INPUT(po1icy ACCEPT)
target prot opt source
Chain FORWARD (po1icy ACCEPT)
target prot opt source
Chain OUTPUT (po1icy ACCEPT)
target prot opt source

destination
destination
destination

Voc deve ter observado tambm que no especificamos com a


flag -t a tabela a ser utilizada em tal listagem. Por ser padro do
Netfilter a tabela filter fora eleita automaticamente pelo sistema.
Diante disso, a seguir listamos as regras referentes a tabela NAT;
[root@johann /l# iptab1es -t nat -L
Chain PREROUTING (po1icy ACCEPT)
target prot opt source
destination
Chain POSTROUTING (po1icy ACCEPT)
target prot opt source
destination
Chain OUTPUT (po1icy ACCEPT)
target prot opt source
destination
E mais a seguir as regras referentes a tabela Mangle;
[root@johann /l# iptab1es -t mang1e -L
Chain PREROUTING (po1icy ACCEPT)
target prot opt source
destination
Chain OUTPUT (po1icy ACCEPT)
target prot opt source
destination

[root@johann /l# iptab1es -P INPUT DROP


[root@johann /l# iptab1es -P FORWARD DROP
[root@johann /l# iptab1es -P OUTPUT DROP

MISSO 3
Vamos agora liberar totalmente o trafego de entrada de nossa
Interface de Loopback (10). Esta regra deve obrigatoriamente
fazer parte de seu script Firewall para permitir ento que a
comunicao entre processos seja possvel. Lembre-se, esta
regra no opcional!
[root@johann /l# iptab1es -A INPUT -i 10 -j ACCEPT

MISSO 4
Proibiremos ento que qualquer pacote oriundo de nossa LAN
10.0.30.0 possa direcionar-se ao site www.sexo.com.br. A sntese ento basicamente a seguinte:
[root@johann /l# iptab1es -A FORWARD
# Utilizamos o -A para inserir uma regra a tabela filter (padro)
sob a chain FORWARD
[root@johann /l# iptab1es -A FORWARD -s
10.0.30.0/8

# Logo em seguida dizemos que todos os pacotes que forem


provenientes (-s significa source, ou seja, origem) da rede
10.0.30.0/8 e que precisarem ser redirecionados (o
redirecionamento fora especificado na chain FORWARD) ...

42

U r u b a ta n N e t o

DOMINANDO LINUX FIREWALL [PTABLES

[root@johann /l# iptables -A FORWARD -s


10.0.30.0/8 -d www.sexo.com.br
# ... ao destino www.sexo.com.br (-d significa destination, ou
seja, destino) ...
[root@johann /l# iptables -A FORWARD -s
10.0.30.0/8 -d www.sexo.com.br -j DROP
# ... dever ser automaticamente bloqueado (-j indica a ao a
ser tomada, e OROP trata-se da ao propriamente dita) pelo
Firewall.
Note que anteriormente, ao especificarmos a origem do pacote adicionamos um "/8". O "/8" especifica o nmero de nossa
sub-rede. Este mesmo "/8" poderia ser substituido por um
"255.0.0.0", que a sub-rede de IP's sobre a classe A (10.0.0.01
255.0.0.0). Caso no fosse especificado, o iptables adotaria
de maneira autnoma a sub rede 255.255.255.0 como componente da regra.

43

[root@johann/l# iptables -A FORWARD -s


www.cracker.com -d 10.0.30.0 -j DROP
# ... dever ser automaticamente bloqueado (-j indica a ao a ser
tomada, e OROP trata-se da ao propriamente dita) pelo Firewall.

MISSO 6
Faremos agora com que os pacotes provenientes do Site
www.suaempresa.com penetrem livremente em nossa rede:
[root@johann /l# iptables -A FORWARD -s
www.suaempresa.com -d 10.0.30.0 -j ACCEPT
Note, ento, que especificamos -s como sua empresa pois ela

a origem dos pacotes (source) e -d como 10.0.30.0, que


trata-se do destino dos pacotes (destination).
A chain ACCEPT confirma que aceitaremos este tipo de trfego em nosso Firewall.

MISSO 5
Especificaremos agora que qualquer pacote oriundo do host
www.cracker.com no pode penetrar em nossa rede (10.0.30.0);
[root@johann/l# iptables -A FORWARD -s
www.cracker.com -d 10.0.30.0 -j DROP
# Utilizamos ento o -A para inserir uma regra a tabela filter
(padro) sob a chain FORWARO
[root@johann/l# iptables -A FORWARD -s
www.cracker.com
# Logo em seguida dizemos que todos os pacotes que forem

provenientes (-s significa source, ou seja, origem) de


www.cracker.com e que precisarem ser redirecionados (o
redirecionamento fora especificado na chain FORWARO)...
[root@johann/l# iptables -A FORWARD -s
www.cracker.com -d 10.0.30.0
# ... ao destino 10.0.30.0 (-d significa destination, ou seja, destino)...

MISSO 7
Agora, todos os pacotes oriundos de qualquer rede que penetrem em nosso Firewall pela interface de rede eth2 sero
redirecionados para o computador 10.0.30.47. Observe que
nesta regra utilizamos a tabela NAT;
[root@johann /l# iptables -t nat -A PREROUTING -i eth2
-j DNAT -to 10.0.30.47
Note que agora utilizamos a tabela nat (-t nat) e sua chain
PREROUTING, que nada mais faz do que aplicar a regra antes do roteamento do pacote.
A ao -i por sua vez indica os pacotes que entram pela interface
eth2 e o -j indica o alvo a ser dado aos mesmos, que neste caso
trata-se do DNAT. Lembre-se de que o papel do alvo DNAT o

44

Urubatan
DOMINANDO

de alterar o endereo de destino das mquinas clientes. Falaremos mais sobre o DNAT e SNAT no decorrer deste livro.

45

Nossa prxima misso tambm utilizar a tabela NAT e far


com que qualquer pacote que deseje sair da rede local para
outra rede possua seu endereo de origem alterado para
192.168.0.33, implementando assim o conceito de mascaramento ip. Este mesmo pacote somente sofrer modificaes
se sair pela interface de rede eth2. Utilizaremos a ao "-o", que
se refere a interface de sada (OUTPUT), ao contrrio da ao
-i que se refere a interface de entrada (INPUT);
[root@johann

MISSO 12
Listaremos agora a segunda regra associada as output chain
[root@johann

MISSO 8

eth2

Neto

LiNUX FIREWALL ]PTABLES

1]# iptables

-t nat -A POSTROUTING

-o

-j SNAT -to 192.168.0.33

1]# iptables

-1 OUTPUT

MISSO 13
Vamos ento

descartar

qualquer

pacote

oriundo

do IP

10.0.80.32 destinado ao IP 10.0.30.4;


11# iptables

[root@johann
10.0.30.4

-A FORWARD

-s 10.0.80.32

-d

-j DROP

MISSO 14
Pacotes TCP destinados porta 80 de nosso host firewall devero ser descartados;

MISSO 9
Em nossa nona misso utilizaremos a tabela filter para rejeitar
(REJECT) pacotes entrantes pela interface de rede eth1;
[root@johann

1]# iptables

-A FORWARD

-i eth1

-j REJECT

11# iptables -A INPUT -p tcp -dport 80 -j DROP

.J

.:~
..

MISSO 15
Agora faremos com que pacotes destinados a porta 25 de
nosso host Firewall sejam arquivados em log (/var/log/

MISSO 10
Faremos agora com que pacotes que entram por qualquer
interface de rede com excesso da ethO sejam descartados;
[root@johann

[root@johann

1]# iptables

-A FORWARD

-i ! ethO

-j DROP

messages)
[root@johann

Il # iptables --A INPUT -p tcp -dport 25 -j 10G

Note que diante de tal regra temos a possibilidade de, por exemplo, arquivar tal trfego em Log e logo depois descarta-I o con-

MISSO 11

forme o exemplo a seguir:

Agora uma tarefa mais trivial, sim, e porque no? Vamos ento deletar a segunda regra inserida sobre a chain FORWARD;

[root@johann

11# iptables -A INPUT -p tcp -dport 25 -j 10G

[root@johann

Il # iptables

DROP
[root@johann

/1#

iptables

-D FORWARD

-A INPUT

-p tcp -dport

25 -j

"."'''
.tJ

4.1

SNAT

onforme abordado anteriormente, uma das funes de


um Firewall Nat o que conhecemos por SNAT, ou
simplesmente "traduo de endereamento de origem"
(source nat).
O alvo (target) SNAT lhe d a possibilidade de alterar os endereos/portas de origem dos pacotes que atravessam seu host Firewall antes que os mesmos sejam rateados a seu destino final.
Para compreendermos e assimilarmos o conceito, tal com prtica, vamos a anlise de alguns exemplos, mas antes disso
vamos analisar algumas poucas, mas no menos importantes
consideraes:
a) Qualquer regra aplicada a SNAT utiliza-se somente da chain
POSTROUTING. Logo, se SNAT que voc quer, POSTROUTING que voc usa!

b) Antes de iniciarmos a manipulao de qualquer regra que


se utilize da tabela NAT, importante que habilitemos a funo de redirecionamento de pacotes (forward) em nosso Kernel
atravs do seguinte comando:
[root@johann

/lecho

"1" >/proc/sys/net/ipv4/ip_forward

No se esquea de utilizar antes de qualquer regra que envolva


a tabela NAT. Tal comando tambm pode ser utilizado em scripts.

50

DOMINANDO

LINUX FIREWALL [PTABLES

Urubatan

c) Compreendido? Sim? Mesmo? Ento vamos s anlises


de regras de exemplo:
[root@johann Il iptables -t nat -A POSTROUTING
10.0.3.1 -o eth1 -j SNAT --to 192.111.22.33

-s

# Note que acima primeiramente anunciamos o programa

(iptables) e em seguida informamos sobre a criao de uma


nova regra (-A) ao fim da lista.
# Finalmente anunciamos que tal regra deve ser atribuida a
tabela nat (-t nat), sob a chain POSTROUTING.
# Anunciamos tambm que qualquer pacote que possua como
origem (-s 10.0.3.1) o host 10.0.3.1 e que saia por nossa eth1 (o eth1) dever possuir seu endereo de destino alterado (-j
SNAT)para 192.111.22.33 (--to 192.111.22.33).

Il

[root@johann
10.0.3.0/8

iptables

-t nat -A POSTROUTING

-s

-o ethO -j SNAT --to 192.111.22.33

# No exemplo acima fomos um pouco mais longe e


especificamos que qualquer pacote que possua como origem (s 10.0.3.0/8) a rede 10.0.3.0/8, e que sair por nossa interface
ethO (-o ethO) dever ter seu endereo alterado (-j SNAT) para
192.111.22.33 (--to 192.111.22.33)
[root@johann ~ iptables -t nat -A POSTROUTING -s 10.0.3.1 -o
ethO -j SNAT --to 192.111.22.33-192.11.22.66
# Acima especificamos
ento que qualquer pacote
proveniente do host 10.0.3.1 (-s 10.0.3.1) e
que saia por nossa interface ethO dever ter seu
endereo de origem alterado (-j SNAT) por
qualquer

ip disponvel

192.111.22.33
192.11.22.66)

na faixa entre

a 192.11.22.66

(--to 192.111.22.33-

4.2 - DNAT
Outra funo agregada a um Firewall Nat o DNAT, ou "traduo de endere~amento de destin~'~i~nation
nat).

4~~

.(q~

4<:>, - .o~

'''1'~~~

't:-i).

51

Neto

O alvo (Target) DNAT lhe d a possibilidade de alterar os endereos/portas de destino dos pacotes que atravessam seu host
Firewall antes que os mesmos sejam roteados a seu destino
final. Com isso o DNAT nos possibilita o desenvolvimento de
proxys transparentes, balanceamento de carga, entre outros.
As regras do DNAT, ao contrrio do SNAT, utilizam-se to somente da chain PREROUTING. Logo, se DNAT que voc
vai fazer, PREROUTING que voc vai usar!
Nunca demais lembrar que, antes de iniciarmos a manipulao de qualquer regra que se utilize da tabela NAT, importante que habilitemos a funo de redirecionamento de pacotes (forward) em nosso kernel ou tais implementaes no funcionaro. Logo, conforme j fora visto anteriormente e repito,
nunca demais relembrar, habilitamos esta propriedade
(forward) de nosso Kernel atravs do seguinte comando:
[root@johann

Ilecho

\\1" >/proc/sys/net/ipv4/ip_forward

Para uma melhor assimilao da sntese associada ao DNAT


acompanhe os exemplos a seguir::
[root@johann
10.0.3.1

Il

iptables

-t nat -A PREROUTING

-s

-i eth1 -j DNAT --to 192.111.22,33

# Note que acima primeiramente anunciamos o programa


(iptables) e em seguida informamos sobre a criao de uma
nova regra (-A) ao fim da lista.
# Finalmente atribuimos tal regra a tabela nat (-t nat), sob a
chain PREROUTING.
# Informamos tambm que qualquer pacote que possua como
origem o host 10.0.3.1 (-s 10.0.3.1) e que entre por nossa
interface eth1 (-i eth1) deve ter seu endereo de destino
alterado (-j DNAT) para 192.111.22.33 (--to 192.11.22.33).
# A grosso modo podemos observar que mesmo que o host
10.0.3.1 tenha enviado um pacote ao host 192.55.55.55, o
mesmo ser foradamente redirecionado sem o consentimento
do cliente (10.0.3.1) para o host 192.11.22.33.

52

DOMINANDO

LINUX FIREWALL

[root@johann

!PTABLES

/1 iptables

U r u b a ta n N e to

-t nat -A PREROUTING

-l

ethO -j DNAT --to 192.11.22.10-192.11.22.13

53

# Atribuimos ento a tabela nat (-t nat), uma regra sob a chain
PREROUTING.

# Aps chamarmos o programa (iptables), informamos sobre a

criao de uma nova regra (-A) ao fim da lista.

# Logo anunciamos ao iptables que qualquer pacote que entre


por nossa interface de rede eth2, independentemente de quem

# Atribuimos ento a tabela nat (-t nat), uma regra sob a chain
PREROUTING.

o enviou, deve ser automaticamente

redirecionado ao host

192.11.22.10, e, independentemente

da porta solicitada pelo

# Logo anunciamos ao iptables que qualquer pacote que entre

cliente (origem), dever ser enviado porta 22 do mesmo

por nossa interface de rede ethO independentemente

# Vemos ento um tpico conceito que geralmente aplicado a

enviou, deve ser automaticamente

de quem o

redirecionado aos hosts

192.11.22.10,192.11.22.11,192.11.22.12
192.11.22.10-192.11.22.13)

Bastions hosts, onde todo o trfego filtrado por um Firewall e

e 192.11.22.13 (--to

ser aceitos e redirecionados a um servio especifico, no caso

Mas voc deve estar se perguntando: "mas como ele ir


direcionar o pacote a 3 hosts diferentes?"
Imagine ento que voc possui um servidor de www, e que
este mesmo o responsvel por realizar o recadastramento
de CPF's de todos os cidados brasileiros, e que hoje, justo
hoje, o ltimo dia para o tal recadastramento. Como no
haveria de ser diferente, quase todo mundo resolveu fazer isso
no ltimo dia, ou seja, hoje. E, acredite, ainda reclamam da
lentido no acesso ao sistema. Diante de tal situao voc j
sabe que apenas um servidor no dar conta do recado. O
que voc faz? Pede demisso e procura um trabalho mais
tranqilo? No, no precisa ir to longe ... Que tal balancear o
trfego de seu servidor principal com mais uns 2 ou 3 (quem
sabe at mais) "servidores reservas"?
Logo no h dvidas de que quando voc precisar fazer o que
conhecemos por balanceamento de trfego, voc precisa de
um simples e eficiente DNAT!
[root@johann /1 iptables -t nat -A PREROUTING
eth2 -j DNAT --to 192.11.22.58:22

-i

# Aps chamarmos o programa, (iptables) informamos sobre a

criao de uma nova regra (-A) ao fim da lista.

apenas os pacotes entrantes por uma certa interface devero


do exemplo acima, o servio SSH

4.3 - Transparent

Proxy

Transparent Proxy, ou simplesmente Proxy transparente a


forma que a tabela NAT possui de realizar um redirecionamento
de portas em um mesmo host de destino. Este metodo
comumente utilizado por exemplo pelo software Proxy-cache
Squid, o mesmo costuma por padro disponibilizar consultas
www atravs da porta 3128, enquanto a maioria dos cliente
costuma realizar tais solicitaes porta 80 do mesmo.
Logo, podemos concluir que o proxy-cache Squid faz um
redirecionamento das portas solicitadas por seus clientes, uma
vez que os mesmos solicitam conexo via porta 80 e so
redirecionados porta 3128.
Utilizamos ento para esta finalidade to somente as chains
PREROUTING E OUTPUT da tabela NAT, tal como o alvo
(target) REDIRECT.
Tome apenas cuidado para no confundir Proxy transparente
com DNAT. Lembre-se que a nica forma de se fazer
redirecionamento de portas de destino em um mesmo host

54

DOMINANDO

LINUX FIREWALL [PTABLES

via target REDIRECT, esta uma vez utilizada caracteriza ento um modelo de Transparent Proxy.
Acompanhe os exemplos a seguir para uma melhor compreenso deste mtodo de NAT:
[root@johann

/liptables

ethO -p tcp --dport

-t nat -A PREROUTING

80 -j REDIRECT

--to-port

-i
3128

# Aps chamarmos o programa (iptables), informamos sobre a


criao de uma nova regra (-A) ao fim da lista sob a chain
PREROUTING.

DETALHANDO
MANGLE

# Informamos tambm que qualquer pacote entrante por via da


interface ethO (-i ethO) de nosso host e encaminhado
(--dport 80) do mesmo dever ser imediatamente

porta 80

redirecionado

(-j REDIRECT) porta 3128 deste mesmo host (--to-port 3128).

"O pensamento s comea com a dvida. "(Roger Martin)

5.1

Conceitos de TOS

futuramente extinto, mas enquanto isso, padro IPV4


conforme sabemos, combina diversas informaes em
um Header (cabealho) de pacote, estes por sua vez
divididos em campos. Um destes, o "tipo de servio", o campo que nos possibilita aplicar o TOS, ou seja, o controle do
tipo de servio a um trfego destinado a um hostlrede. Este
campo por sua vez foi criado com o intuito especfico de nos
permitir aplicar conceitos de gerenciamento de trfego sob o
argumento "tipo de servio".
Isso nos permite ento dizer a um Firewall que qualquer pacote cujo o "tipo de servio" seja "SSH" possui uma prioridade de
trfego "X", e que outros cujo o "tipo de pacote" seja "ICO", por
exemplo, possuem prioridade "Y". com isso, o TOS torna-se
ento uma forma simples porm eficiente de lhe dar total controle sobre o trfego de entrada e sada de sua rede.

I.,~
I

No meu caso por exemplo, o TOS foi primordial para o bom


andamento da rede ao qual gerencio hoje, ou como costuma
dizer Clayton, meu amigo e gerente de contas de uma grande
empresa de telecomunicaes (para no dizer Embratel), "para
que a mesma estivesse em estado de arte", dito que meus usurios adoravam navegar na Web e ouvir musica online, participar de chats, trocar e-mails pessoais com aqueles anexos gigantescos (cada um maior que o outro) e etc ... Nada de mais

58

Urubatan
DOMINANDO

LINUX FIREWALL

Neto

59

!PTABLES

at ento, mas, se levarmos em conta que estes usurios possuem uma banda bastante estreita para se conectarem a
Internet, e que esta mesma banda ainda deve estar disponvel
para outros servios que exigem muito mais prioridade do que
"salas de bate papo", como consultas de clientes, fornecedores
e lojistas a nosso imenso banco de dados, por exemplo!
Uma das solues encontradas por mim e minha equipe neste
caso foi a implementao do TOS, tendo em vista que no gostaramos de privar nossos usurios de alguns momentos de lazer
na Internet aplicando regras "cruis" de bloqueio de trfego via
filtragem de pacotes ou controle de palavras chaves via Proxy.
No, este no era o nosso intuito. Experimente voc, em uma
grande rede, proibir seus usurios de enviar e-mails pessoais.
No demorar muito e estaro invadindo sua sala e ameaando voc de agresso, e, se isso no lhe intimidar, pense em
algo como paralisaes, abaixo-assinados e etc ... No faz bem
para a empresa iniciar uma espiral negativa interna ... Contorna-Ia alm de ser extremamente difcil exige muito tempo, um
tempo que ns desenvolvedores, tcnicos de suporte, programadores, gerentes de TI e CSO's no temos sobrando!
Exatamente por isso nossa inteno no era comprar uma
briga. O TOS nos possibilitou que o trfego "podre", que
como o chamamos internamente o pacote que no possui prioridade, continuasse existindo, ao contrrio disso, fizemos com
que o mesmo no mais atrapalhasse o trfego prioritrio simplesmente controlando sua prioridade.
Trfegos partindo de servios prioritrios (como ssh, por exemplo) deveriam ser processados primeiro do que o trfego de
"icq" ou "Kazaa". Na verdade o Kazaa foi o nico que realmente foi extinto de nossa rede por o vermos como uma ameaa
em potencial a contaminao por vrus de nossos computadores. No cr nisso? Acha o Kazaa muito legal? Na casa do
usurio pode at ser que ele seja legal, mas experimente bai-

xar um executvel via Kazaa em uma rede de 500 computadores e depois me conte o resultado!

5.2 - Aplicando

o TOS

Para aplicar os conceitos de TOS em uma rede, seu Firewall,


alm de servir como ponto de induo de sua rede, deve utilizar-se de regras sob a tabela Mangle.
A Mangle, conforme visto anteriormente nos serve exatamente para isso, ou seja, realizar controle e alteraes "especiais"
em pacotes. Se voc ainda possuia alguma dvida sobre este
"especial", acho que a mesma no mais faz parte de sua lista
de questionamentos.
TOS , mais especificamente e como visto anteriormente, o
nome dado a um alvo (tal como DROP, ACCEPT, etc.) que
far ento este controle. Este mesmo alvo, combinado com o
argumento =set-tos lhe permitir aplicar os conceitos de
gerenciamento de trfego por "tipo de servio".
Para que haja a possibilidade de se alterar o bit de prioridade
de um pacote por seu "tipo de servio", possui mos ento em
mos uma tabela com especificaes e valores que devero
ser alterados conforme veremos a seguir:

Mn~a (Min~~Delay~
16 ou
Mximo Processamento (Maximize-Throughput)8 ou
~xima C~nf1!~a (MXImize-Rel~bility)
4 ou
Custo mnimo (Minimize-Cost)
2 ou
Prioridade~ormal (Normal-ServICl
O ou

Oxl0
Ox08

i4
Ox02
OxOO

Obs.: importante termos em mente que por padro, o valor TOS


ajustado a cada pacote lhe d uma prioridade nomal, ou simplesmente OxOO

60

DOMINANDO

Urubatan

LINUX FIREWALL !PTABLES

61

5.3.2 - Trfego de Entrada

5.3 - Regras de TOS


A sntese para a aplicao de regas de TOS segue o mesmo
padro da composio clssica da do prprio Iptables, Logo,
se voc conseguiu compreender as snteses que envolvem
outras tabelas, no ter maiores problemas na compreenso
desta to somente por utilizar-se da Mangle.
Analise a seguir algumas regras que provavelmente
nar suas interrogaes:

Neto

iro sa-

Entendemos trfego de entrada como um conjunto de pacotes que entram por sua interface de rede, logo, no faz sentido, a exemplo das regras de trfego de sada do TOS utilizarmos a chain OUTPUT.
Para o tratamento deste trfego, o de entrada, utilizamos to
somente a chain PREROUTING, e claro, ao especificarmos
a interface, utilizamos a ao -i, o que indica pacotes entrantes
na mesma.
O exemplo a seguir dar prioridade mxima (espera mnima)
_ a pacotes que entrem em seu host/rede sob o protocolo SSH.

5.3.1 - Trfego de Sada


exemplo a seguir nos demonstra na prtica como aplicar uma
prioridade mxima (espera mnima) para trfego de sada na
interface ethO (OUTPUT -o etho) em pacotes sob o protocolo
ssh. Isso na prtica quer dizer que qualquer pacote SSH (porta 22) ser direcionado a seu destino primeiro do que qualquer outro.
[root@johann /l#iptables -t mangle -A OUTPUT -o ethO p tcp --dport 22 -j TOS --set-tos 16
Esta regra, estando sobre a forma de "trfego de sada", apenas ir incorporar tais conceitos de TOS somente sob pacotes emitidos por seu host/rede, e no sob pacotes recebidos
de outras redes para seu host/rede. Logo, pacotes emitidos
por seu host/rede sob o protocolo SSH tero prioridade sob
as demais emisses de pacotes. Mas isso no significa que
pacotes SSH que entrarem em seu host/rede tero a mesma
prioridade. Para tal necessrio a aplicao de outra regra
que especifique o "trfego de entrada", conforme veremos a
seguir.

[root@johann /l#iptables -t mangle -A PREROUTING -i


ethO -p tcp --sport 22 -j TOS --set-tos 16
O exemplo a seguir dar mximo processamento (MaximizeThroughput) a pacotes que entrem em seu host/rede sob o
protocolo FTP.
[root@johann /l#iptables -t mangle -A PREROUTING -i
ethO -p tcp --sport 20 -j TOS --set-tos 8
Ainda com prioridade acima do trfego normal mas abaixo dos
especificados acima (16 e 8), o exemplo seguinte dar mxima confiana (Maximize-Reliability) a pacotes que entrem em
seu host/rede sob o protocolo Web.
[root@johann /l# iptables -t mangle -A PREROUTING
ethO -p tcp --sport 80 -j TOS --set-tos 4

-l

5.4 - Concluses
Alm de ser uma excelente forma de controle de trfego, o
TOS tambm uma excelente maneira de compreendermos

62

DOMINANDO

LINUX FIREWALL

[PTABLES

melhor o termo "tratamento especial", que normalmente utilizado para especificar as funes da Tabela Mangle.
Os exemplos demonstrados so apenas uma pequena parte
do poder do TOS. O resto vir de sua necessidade
e
criatividade!
E lembre-se, um TOS jamais substitui um bom trabalho de
aos em sua rede, logo, nem pense em substituir o aos de
seu roteador por regras de TOS, pois estas no agregam qualidade ao trfego, e sim priorizao de forma "curta e grossa"

MDULOS

"Quando se rouba de um autor, chama-se pldgio; quando se


rouba de muitos, chama-se pesquisa. "(Wilson Mizner)

m mdulo nada mais do que uma forma de se ampliar a funcionalidade da ferramenta Iptables, ou seja,
uma forma de se fugir do convencional aplicando ento regras um pouco mais aprimoradas como por exemplo,
- que trabalhem sob anlise do corpo de um pacote, ou seja, do
contedo propriamente dito do mesmo.
Um mdulo para ser chamado precisa, antes de mais nada, ser
"anunciado"por via da opo -m moulo ou --match -erndulo
e que deve ser integrado sntese clssica do Iptables.
Alguns exemplos de mdulos so:

state
mac

_~

- .......

multiport
string
owner

Limita o nmer~ de vezes que um~ regra


ser executada antes de passar para a
prxima regra
Observa o estado da Conexo. Estes podem
ser (NEW, ESTABLISHED, RELATED e INVALID)
.
Permite que o !ptables trabalhe com
endereamentos Mac
Permite que sejam especificadas at 15
portas a uma regra de uma s vez
Observa o contedo do pacote pra somente
ento aplicar a regra
Observa o usurio que criou o pacote

--

---

--

---

66

DOMINANDO

Urubatan

LINUX FIREWALL IPTABLES

6.1 - limit
o

mdulo limit, no mnimo um mdulo extremamente


para conter ataques mais sofisticados.
'"

til

Regras sob o mdulo limit especificam exatamente quantas


vezes as mesmas devem ser executadas em um intervalo de
tempo especfico, e, se isso acontecer, ela automaticamente
deve executar a regra seguinte.
Para compreendermos melhor a forma de atuao do mdulo
limit, devemos ento imaginar que se um Firewall possui uma
regra que aceita o recebimento e a passagem de pacotes ICMP
(pings) por si, todas as vezes que algum ping for encaminhado quela mquina ou aquela rede poderemos dizer ento que
aquela regra fora executada.
Ento se 3 pings forem disparados para seu Firewall em um
intervalo de 5 segundos, podemos dizer que tal regra fora executada 3 vezes em 5 segundos. Ok, at agora nada de magnfico!
Vamos alm. Imagine um ataque do tipo DOS (Denial Off
Service), onde o cracker em questo (o atacante, claro!) ir
tentar lhe enviar o mximo de requisies ICMP possveis em
um menor intervalo de tempo, esperando causar com isso uma
negao de servios por parte de seu Firewall. Compreendeu
agora o quo magnfico o mdulo limin No?
Ok ...lmagine ento que o cracker est iniciando um ataque
DOS neste exato instante e seu Firewalls possui uma regra
que aceita pacotes ICMP, mas, graas ao mdulo Iimit, tais
pacotes so aceitos apenas se enviados sob uma seqncia
superior a um intervalo de tempo de 1 segundo, ou seja, se
seu Firewall perceber que 2 pings foram enviados para si em
apenas 1 segundo, ele deve automaticamente executar a regra seguinte contida no Firewall.

Neto

67

Como o envio de 2 pings em 1 segundo caracteriza um ataque


do tipo "Ping da Morte", a regra seguinte do Firewall dever,
claro, bloquear automaticamente pacotes ICMP direcionados ao
seu host/rede, evitando assim que seu host sofra um ataque DOS,
e o que melhor, sem precisar a priori bloquear pacotes ICMP.
Observe ento o seguinte exemplo:
[root@johann /l#iptables -A INPUT -p icmp --icmp-type
echo-request -m limit --limit l/s -j ACCEPT
O exemplo acima tem como principal finalidade impedir o velho golpe denominado "Ping da Morte". Sua sntese basica_ mente diz que pacotes respostas de ICM~ (-p icmp) sero
aceitos somente se recebidos em um intervalo de tempo de 1
segundo (-m limit -limit 1/s -j ACCEPT) Caso algum pacote
ultrapasse este limite imposto pela regra, a mesma dever
automaticamente
executar a seguinte (prxima regra do
firewall) que dever ser algo como:
I,WI

[root@johann /l# iptables -A INPUT -p icmp -j DROP


Como voc pode notar, a regra acima bloqueia(-j DROP) qualquer pacote ICMP (-p icmp) que chegar a seu host Flrewall.
Existem tambm formas de se bloquear outros tipos de ataques
por meio de Iimit, como por exemplo um DOS do tipo Syn-flood.
Para uma melhor compreenso do Syn-flood e, principalmente, para compreendermos sobre o tipo' de ataque que estaremos bloqueando, precisamos primeiro entender que o TCP,
um dos principais protocolos da pilha TCP/IP , antes de mais
nada, orientado conexo, o que significa a princpio que o
mesmo executa "N" checagens de integridade para garantir
maior confiabilidade no envio de seus pacotes.
Sabemos ento que para realizar tais checagens, o TCP utlizase, entre outros recursos, de flags que basicamente orientam

:1.~1

70

DOMINANDO

U r u b a ta n N e to

LINUX FIREWALL !PTABLES

o fato que um certo

Sr. Manfred Spraul detectou em meados


de 2002 que os Syn-Cookies eram falhos, dito que continham
uma vulnerabilidade em sua estrutura que possibilitavam ao
atacante contornar regras de Firewall que negam conexes
novas a um determinado servio e efetivamente abrir uma conexo para esta porta protegida.
A soluo veio do advento do limit, que nos possibilita total
proteo contra ataques deste nvel de forma simples. Porm,
para que tal funcione recomendvel que os Syn-Cookies
estejam desabilitados em seu Firewall. Para certificar-se disto
digite em shell:
[root@johann Il# cat Iproc/sys/net/ipv4/tcp_~yncookies
Caso o retorno do comando seja igual a O, Sim, o Syn-Cookies
est desabilitado em seu Firewall, mas se este retorno for 1, a
precisaremos desabilit-Io imediatamente.
Para desabilit-Io basta ento digitar-se em shell o seguinte
comando:
[root@johann 1 1 # echo

for i in Iproc/sys/net/ipv4/conf/*/rp_filter;
echo 1 >$i
done

71

do

Obs. Recomendo que se insira o comando que desabilita o


Syn-Cookie no arquivo /etc/rc.d/rc.local, pois este quando
desabilitado em shell permanecer em tal estado somente
durante aquela sesso, voltando ao estado de habilitado, ou
seja, 1, mediante a um reboot do sistema.
Em suma, atravs do mdulo limit voc pode especificar
quantos pacotes sob um determinado protocolo, porta e etc,
devem entrar em seu host/rede em um intervalo de tempo
definido. Caso o nmero de pacotes recebidos exceda o intervalo de tempo especificado, limit executar a regra seguinte,
que dever no mnimo bloquear totalmente o pacote em questo. Bem pensado no? No se esquea que a regra seguinte
dever ser especificada por voc, limit no criar a prxima
regra automaticamente.

O limit tambm
> Iproc/sys/net/ipv4/tcp_syncookies

J com o Syn-Cookie desativado, devemos ento utilizar o


mdulo limit para proteger nosso host Firewall de ataques deste
nvel, bastando para isso a seguinte seqncia de regras:
[root@johann Il# iptables
[root@johann Il# iptables
syn -j syn-flood
[root@johann Il# iptables
limit 1/s --limit-burst 4
[root@johann Il# iptables

-N syn-flood
-A INPUT -i ethO -p tcp --A syn-flood -m limit
-j RETURN
-A syn-flood -j DROP

Apenas em termos de informao (que nunca demais), para


proteger seu hosts de ataques de IP-Spoofing utilize a seguinte sntese em seu script Firewall:

bastante eficaz na hora de conter


scanneamentos ocultos a seu host Firewall conforme vemos
no exemplo a seguir:

[root@johann Il# iptables -A FORWARD -p tcp --tcpflags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j
ACCEPT
Em uma regra sob limit, podemos especificar os seguintes intervalos de tempo:

s - Segundo
m - Minuto
h - Hora
d - Dia

72

DOMINANDO LINUX FIREWALL !PTABLES

6.2 - state
o mdulo

state atribui regras mediante a anlise do estado da


conexo de um pacote. Estes estados de forma mais detalhada so:
~ NEW

-+ Indica que o pacote est criando uma nova conexo;


~ ESTABLlSHED

Ur ub a t a n Neto

73

J a regra acima bloqueia qualquer pacote cujo estado de conexo seja considerado invlido.
[root@johann /l#iptables -A INPUT -m state --state
ESTABLISHED,RELATED -j ACCEPT
Acima aceitamos qualquer pacote sob os estados ESTABLlSHEO
e RELATEO, ou seja, a pacotes que j estabeleceram uma conexo e pacotes no identificados mas que possuem alguma ligao indireta com outros pacotes identificados.

-+

Informa que o pacote pertence a uma conexo j existente, logo, trata-se de um pacote de resposta;
~ RELATED

-+ "Referente

a pacotes que relacionam-se indiretamente


com outro pacote, a exemplo das mensagens de erros
de conexo;
~ INVALlD

-+

Referente a pacotes no identificados por algum motivo


desconhecido (execuo fora da memria, erros de
ICMP que no correspondam a 8 e etc.) Geralmente
aconselha-se que tais pacotes sejam descartados pelo
Firewall (OROP)

Obs. possvel ento utilizar-se de mais do que apenas um


estado de conexo por regra. Neste caso os separamos com
uma simples
"(vrgula seguido de um espao). Por exemplo:
NEW, INVALlD
li,

Observe agora o seguinte exemplo de uma regra que faz uso


do mdulo state:

6.3 - mac
Conforme aprendemos em nossas leituras mais bsicas sobre arquitetura de redes, o mac (media access control) a
identificao de mais baixo nvel que um computador pode
ter, teoricamente inacessvel, pois trata-se do endereo embutido no hardware ainda pelo fabricante, para ser mais especfico, em seu(s) dispositivo(s) de rede.
O mdulo mac permite que seu Firewall atue a esse nvel, independente de endereamento de rede. Logo, a checagem da
regra em questo no mais dependeria do endereo IP do host
de origem e sim de seu mac address. Acompanhe o exemplo:
[root@johann /1# iptables -A INPUT -m mac --mac-source
40:FO:B2:8F:OO:Ol -j DROP

[root@johann /1# iptables -A INPUT -m state --state


NEW -i ethO -j DROP

Utilizamos o mdulo mac (-m mac) seguido do parmetro


-- mac-source para indicar o endereo mac de origem do pacote,
que neste caso 40:FO:B2:8F:OO:01 para ento bloquearmos
(-j OROP) qualquer pacote proveniente de tal endereo fsico.

A regra acima permite qualquer nova conexo que parta da


interface ethO

6.4 - multiport

[root@johann /1# iptables -A INPUT -m state --state


INVALID -i ethO -j DROP

Com o mdulo multiport possvel que especifiquemos mltiplas


portas a um determinado alvo sob o limite mximo de 15. Exemplo:

74

DOMINANDO

LINUX FIREWALL

[PTABLES

[root@johann /]# iptables -A INPUT -p tcp -i ethO -m


multiport --dport 80,25,53,110 -j DROP
Acima indicamos em uma s regra por via de multiport que
nosso Firewall descartar (-j DROP) qualquer pacote que entre pela interface ethO (-i ethO) destinados s portas 80, 25, 53
e 110.

o mdulo

multiport pode ser especificado tanto para portas de


destino (--dport) quanto para portas de origem (--sport) tal como
tambm sob o parmetro nico --port, este far o trabalho de
ambos os parmetros (--sport e --dport) dentro da regra, ou
seja, se especificado na regra "--port 80,53 -j DROP", esta recusar tanto pacotes provenientes as portas 80 e 53 quanto
destinadas as mesmas.

6.5 - string

o mdulo

string extremamente til quando precisamos realizar um controle de trfego baseado no contedo de um pacote.
Anteriormente ao string (que nem to novo assim, apenas
pouco difundido) somente era possvel realizar-se tal gerenciamento de pacotes por via de um Proxy, estes por sua vez,
sempre possibilitaram controlar um trfego mediante a anlise do contedo propriamente dito de um pacote. Note apenas
que o iptables capaz de realizar tal controle de pacotes sob
string de 5 a 10 vezes mais rpido que qualquer Proxy existente na atualidade.
Imagine ento que em sua empresa, a Direo da mesma probe severamente o acesso a sites que contenham sexo como
contedo por seus usurios, e voc no possui um Proxy porque nunca achou necessrio ter um, logo, utiliza NAT para

U r u ba ta n Neto

75

fazer o compartilhamento de seu link com a Internet entre os


computadores de sua empresa. O que voc faz agora? Bem,
me parece que seus problemas esto resolvidos, dito que string
se encaixa perfeitamente em suas necessidades.
Para o caso relatado acima utilizaramos to somente a seguinte regra para bloquearmos a entrada de pacotes que contivessem a palavra "sexo" em seu corpo:
[root@johann /]# iptables -A INPUT
"sexo" -j DROP

-ID

string --string

Existe tambm a opo de se gravar em log tais acesso para


somente depois bloque-Ias:
[root@johann /]# iptables -A INPUT -ID string --string
"sexo" -j LOG --log-prefix "ATENO: Site de Sexo"
[root@johann /]# iptables -A INPUT -ID string --string
"sexo" -j DROP
Lembra-se do Kazaa? Aquele programa que alm de compartilhar msicas, vdeos e etc. Compartilha tambm muita, mas
muita dor de cabea na hora de disputar "no tapa" o acesso a
sua escassa banda de acesso a Internet com dados realmente importantes para sua empresa. Ento, string tambm lhe
possibilita evitar que seus usurios utilizem tal programa mediante as seguintes regras:
[root@johann /]# iptables -A INPUT
"X-Kazaa" -j DROP
[root@johann /]# iptables -A INPUT
"GET /.hash=" -j DROP

-ID

string --string

-ID

string --string

Note que utilizamos ento as strings "X-Kazaa" e "GET /.hash="


para proibir a entrada de pacotes enviados pelo Kazaa a nossa rede. Estas duas strings so comuns em pacotes enviados
por tal programa.

76

DOMINANDO

Urubatan

LINUX FIREWALL !PTABLES

A utilizao do mdulo string vai muito alm de nossos exemplo e est a merc de sua necessidade, logo, repense sua
poltica de acessos e faa uso do string sempre que necessrio, mas somente se necessrio mesmo, pois criar muitas regras que analisem o contedo de pacotes fatidicamente far
com que seu Firewall/NAT comece a ficar mal das pernas, em
outras palavras, "muito lento" ser a expresso nmero um no
vocabulrio de seus usurios na hora de descrever a velocidade do acesso a Internet em sua empresa, dito que a anlise
de pacotes consome muitos recursos do host Firewall. Lembre-se, um Firewall foi idealizado apenas para proteger redes,
e no para compartilhar acessos a Internet. No faz mal utilizar-se de tal recurso, afinal de contas ele existe justamente
para ser utilizado, mas use-o com cautela, respeitando sempre seus limites, pois sobrecarregando o mesmo voc o tornar extremamente lento tal como seus usurios extremamente
sem pacincia para esperar um minuto de carregamento a
cada Home-Page visitada.

[root@johann /l# iptables -A OUTPUT -m owner --gidowner 81 -p udp -j DROP

TI

As opes de filtro no nvel de usurios, grupos e processos


sob owner so:
OPES

DESCRIO

--uid-owner

Controla e executa a regra se o


pacote fora criado por um usurio sob
o userid especificado
Controla e executa a regra se o
pacote fora criado por um usurio sob
o groupid especificado
Controla e executa a regra se o
pacote fora criado por um nmero de
processo (processid) especificado
Controla e executa a regra se o
pacote fora criado por processo
concebido por session group
Opo ainda experimental e diante
disso potencialmente exposta a
vulnerabilidades, realiza diversas
checagens aleatrias nos pacotes a
fim de ideLtifica-Ios como suspeitos
ou outros que no determinem com
preciso sua procedncia

--gid-owner

--pid-owner

--sid-owner

--unclean

6.5 - owner
a mdulo owner, embora bem interessante, pouco utilizado
e mencionado em literaturas do gnero. owner capaz de
determinar precisamente algumas informaes valiosas sobre o criador de um determinado pacote definido em regra, de
modo que se tornar possvel identificar o emissor real do pacote (no nvel de usurio). Este mdulo pode ser utilizado to
somente em combinao com a chain aUTPUT conforme vemos no exemplo a seguir, que bloquear a sada de qualquer
pacote UOP que seja criado por um usurio do grupo sob o
GIO 81:

Neto

Analise ento o seguinte exemplo:


[root@johann Il#

iptables -A OUTPUT -m owner --uid-

owner 42 -p tcp -j ACCEPT


[root@johann /l# iptables -A OUTPUT -p tcp -j DROP
Note que acima a primeira regra de nosso exemplo permite
(_j ACCEPT) apenas que o usurio sob 1042 (-m owner --uidowner 42) envie pacotes para fora de nossa rede sob o protocolo tcp (-p tcp).
J a regra seguinte probe (-j ORap) qualquer sada de pacotes tcp (-p tcp -j OROP) independente do usurio que os en-

~d

,:Ii

78

DOMINANDO

LINUX FIREWALL

IPTABLES

viou. Logo, conclumos que o nico usurio da rede que poder enviar seus pacotes tcp pelo Firewall ser o que estiver sob
UID (userid) 40.
Observe que no prximo exemplo faremos algo ainda mais
interessante, pois em uma primeira linha de regra autorizaremos todos os usurios do grupo sob o ID (groupid) 50 a acessar
o site www.sexo.com.br. porm, a prxima linha proibir os
demais usurios de realizarem tal acesso:
[root@johann 1]# iptables -A OUTPUT -fi owner --gidowner 50 -d www.sexo.cofi.br -j ACCEPT
[root@johann 1]# iptables -A OUTPUT -d www.sexo.cofi.br
-j DROP
Isso acontece em casos tais como: "Seu Diretor no quer que
ningum acesse sites de sexo, somente ele e os demais gerentes da elA, todos, amigos de fim de semana!" (isso muito
comum, acreditem. Se voc ainda no viveu um caso assim,
um dia "h de vivenciar!"). Logo, ponha seu diretor e os demais gerentes como membros do grupo 50 (groupid) e execute a regra acima! Simples, no? Ah ... No deixe de cadastrar
seu usurio tambm no grupo "50", pois voc como administrador do Firewall pode, sem consentimento prvio, se dar a
esse luxo, afinal de contas, de frente pro teclado, voc quem
manda!

REGRAS
PARA
FIREWALLS
IPTABLES

"Copiar o bom melhor que inventar o ruim. "


(Armando Nogueira)

7.1

#
#
#
#

Compartilhamento
1nternet via NAT

de

A interface ethO deve possuir seu IP vlido


de rede, ou seja, sua conexo real com a internet
A interface eth1 deve possuir o Ip invlido de
rede, ou seja, de sua LAN

REDEMASQ=10.0.1.0/8
#
#
#
#
#

Coloque no REDEMASQ a faixa de IP da sua rede


local mais a mscara
Caso a mscara seja 255.0.0.0 deve ser 18
Caso a mscara seja 255.255.0.0 deve ser 116
Caso a mscara seja 255.255.255.0 deve ser 124

iptables -P INPUT DROP


iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
iptables -A INPUT -i 10 -j ACCEPT
iptables -A INPUT -ffi state ~-state ESTABLISHED,RELATED
-j ACCEPT
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -s $REDEMASQ -o ethO -j
MASQUERADE
iptables -A FORWARD -o ethl -ffi state --state
NEW,INVALID -j DROP

82

DOMINANDO

Urubatan

LINUX FIREWALL [PTABLES

iptables -A FORWARD
ESTABLISHED,RELATED
iptables -A FORWARD
iptables -A FORWARD
iptables -A INPUT -j

-o eth1 -m state --state


-j ACCEPT
-i eth1 -s $REDEMASQ -j ACCEPT
-j DROP
DROP

7.2 - Firewall Corporativo


#!/bin/sh
# Script desenvolvido por William da Rocha Lima #
# wrochal@linuxit.com.br #
# agradecimentos a todos que ajudam a comunidade #
# Firewall Corporativo 1.0 #
# Configurao de Vriaveis.

then
echo 1 > /proc/sys/net/ipv4/ip_dynaddr
fi
#printf "."

#Flushing ali e criando chains.


iptables -F
iptables -x
iptables -t nat -F
iptables -t nat -x
#printf "."

#Setando por padro o DROP.

#Internet Sharing e Firewall iniciando

if [ -e /proc/sys/net/ipv4/conf/all/rp_filter
for f in /proc/sys/net/ipv4/conf/*/rp_filter;
echo 1 > $f
done
fi
#printf " "

l; then
do

iptables -t nat -A POSTROUTING -o pppO -j MASQUERADE


iptables -A FORWARD -i ethO -j ACCEPT
iptables -A FORWARD -m state --state
ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m limit --limit 60/minute -limit-burst 60
#printf "."

#Ativando syn cookies proteo no kernel

#Criando Logs para a chain.

if [ -e /proc/sys/net/ipv4/tcp_syncookies
then
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
fi
#printf "."

iptables -N LDROP
iptables -A LDROP
prefix "DROP"
iptables -A LDROP
prefix "DROP"
iptables -A LDROP
prefix "DROP"
iptables -A LDROP

kernel para dinamico IP masquerado

if [ -e /proc/sys/net/ipv4/ip_dynaddr

83

iptables -P OUTPUT ACCEPT


iptables -A INPUT -i $IF -j DROP

IF=pppO
LOG="iplog -i $IF -w -d -1 /var/log/iplogs"
#printf " "

#Setando

Neto

-p tcp -j LOG --log-level 3 --log-p udp -j LOG --log-level 3 --log-p icmp -j LOG --log-level 3 --log-f -j LOG --log-level 3 --log-prefix

",

"

84

DOMINANDO

LINUX FIREWALL [PTABLES

Ur u b a t a n Neto

"DROPH
iptab1es -A LDROP -j DROP
iptab1es -N LREJECT
iptab1es -A LREJECT -p tcp -j LOG --10g-leve1
prefix "REJECTH
iptab1es -A LREJECT -p udp -j LOG --10g-leve1
prefix "REJECTH
iptab1es -A LREJECT
10g-prefix "REJECTH
iptab1es -A LREJECT
prefix "REJECTH

-p icmp -j LOG --10g-leve1

iptab1es -A LREJECT
iptab1es -N LACCEPT
iptab1es -A LACCEPT
prefix "ACCEPTH

-j REJECT

iptab1es

"REJECT

"

-A LTREJECT

-p icmp -j LOG --10g-leve1

3 --log-

10g-prefix "REJECT "


iptab1es -A LTREJECT -f -j LOG --10g-leve1

3 --log-

prefix "REJECT "


iptab1es -A LTREJECT

-p tcp -j REJECT

tcp-reset
iptab1es -A LTREJECT

-p ! tcp -j REJECT

3 --

3 --

3 --log-

--reject-with
--reject-with

icmp-port-unreachab1e
-f -j LOG --10g-leve1

3 --log-

iptab1es
#printf

-A LTREJECT

-j REJECT

".H

#Aceita trafico em 10 (Ioopback) device


-p tcp -j LOG --10g-leve1

iptab1es -A LACCEPT
prefix "ACCEPTH

-p udp -j LOG --10g-leve1

iptab1es -A LACCEPT
10g-prefix
"ACCEPTH

-p icmp -j LOG --10g-leve1

iptab1es -A LACCEPT
prefix "ACCEPTH

-f -j LOG --10g-leve1

iptab1es
iptab1es

-j ACCEPT

-A LACCEPT
-N TREJECT

10g-prefix

3 --log3 --log3 --

3 --log-

iptab1es -A TREJECT -p tcp -j REJECT --reject-with


tcp-reset
iptab1es -A TREJECT -p ! tcp -j REJECT --reject-with
icmp-port-unreachab1e
iptab1es -A TREJECT -j REJECT
iptab1es -N LTREJECT
iptab1es -A LTREJECT -p tcp -j REJECT --reject-with
tcp-reset
iptab1es -A LTREJECT -p ! tcp -j REJECT --reject-with
icmp-port-unreachab1e
iptab1es -A LTREJECT -p tcp -j LOG --10g-leve1 3
10g-prefix "REJECT "
iptab1es -A LTREJECT -p udp -j LOG --10g-leve1 3

iptab1es

-I 1NPUT -i 10 -j ACCEPT

iptab1es

-I OUTPUT

iptab1es

-I INPUT -i ! 10 -s 127.0.0.0/255.0.0.0

DROP
#printf

-o 10 -j ACCEPT
-j

".H

#Aceita conees por ack bit sets.


iptab1es
#printf

-A INPUT

-p tcp ! --syn -i $IF -j ACCEPT

".H

#Anti-Spoofings
iptab1es

-A INPUT

-j DROP -s 10.0.0.0/8

iptab1es

-A INPUT

-j DROP -s 127.0.0.0/8

iptab1es

-A INPUT -j DROP -s 172.16.0.0/12

iptab1es

-A INPUT -j DROP -s 192.168.1.0/16

#printf

"

-i $IF
-i $IF
-i $IF
-i $1F

#Bloqueando Multicast
iptab1es -A INPUT -s 224.0.0.0/8 -d %
iptab1es -A INPUT -s %
-d 224.0.0.0/8
#printf "
H

-j DROP
-j DROP

85

86

Ur u b at a n Neto

DOMINANDO
LINUX
FIREWALL
II'TABLES

#Bloqueando Back Orifice


iptables -A INPUT -p tcp -i $IF --dport 31337 -j LDROP
iptables -A INPUT -p udp -i $IF --dport 31337 -j LDROP
#printf "
fi

87

iptables -t mangle -A OUTPUT -p tcp --dport 23 -j TOS


--set-tos Minimize-Delay
iptables -t mangle -A OUTPUT -p tcp --dport 110 -j TOS
--set-tos Minimize-Delay
#printf
".fI

#Bloqueando NetBus
iptables -A INPUT -p tcp -i $IF --dport 12345:12346 -j
LDROP
iptables -A INPUT -p udp -i $IF --dport 12345:12346 -j
LDROP
#printf "
fi

INPUT
INPUT
INPUT
INPUT

-p
-p
-p
-p

iptables -A INPUT -m state --state ESTABLISHED -j


ACCEPT
iptables -A INPUT -m state --state RELATED -j ACCEPT
iptables -A INPUT -p tcp -i $IF --dport 1023:65535 -j
ACCEPT
iptables -A INPUT -p udp -i $IF --dport 1023:65535 -j

#Bloqueando TrinOO
iptables -A
iptables -A
iptables -A
iptables -A
#printf "

#Portas abertas para estabelecer coneces

tcp
tcp
udp
udp

-i
-i
-i
-i

$IF
$IF
$IF
$IF

--dport
--dport
--dport
--dport

1524 --j LDROP


27665 -j LDROP
27444 -j LDROP
31335 -j LDROP

fi

#Rejectando (No aceitos) ident requeridos.


iptables -A INPUT -p tcp -i $IF --dport 113 -j TREJECT
iptables -A INPUT -p udp -i $IF --dport 113 -j TREJECT
#printf "
fi

ACCEPT
#printf "
#iptables -A INPUT -p icmp -i $IF -j LDROP
iptables -A INPUT -p icmp --icmp-type echo-reply -s 01
fi

-i $IF -j ACCEPT
iptables -A INPUT -p icmp --icmp-type destinationunreachable -s 010 -i $IF -j ACCEPT
iptables -A INPUT -p icmp --icmp-type time-exceeded -s
010 -i $IF -j ACCEPT

iptables -A OUTPUT -p icmp -o $IF -j ACCEPT

#Bloqueando acesso para o X Server.


#Bloqueando Tracertroute
iptables -A INPUT -p tcp -i $IF --dport 5999:6003 -j LDROP
iptables -A INPUT -p udp -i $IF --dport 5999:6003 -j LDROP
iptables -A INPUT -p tcp -i $IF --dport 7100 -j LDROP
#printf
".fI

#Setando telnet, www, smtp, pop3 e FTP para Pouco Delay


iptables -t mangle -A OUTPUT -p tcp --dport 22 -j TOS
--set-tos Minimize-Delay

iptables -A INPUT -p udp -s 010 -i $IF --dport


33435:33525 -j DROP
#printf
#$LOG
#printf \\ .n"
#printf "Your Internet Connection is up and running.
IP logs can be #found in Ivar/log/iplogs.n
\\

11

fl

88

DOMINANDO

U r u b a t a n Neto

LINUX FIREWALL !PTABLES

7.3 - Script de NAT com bloqueio a P2P, MSN,


ICQ, etc ...

#Napigator
iptables -A FORWARD

-d 209.25.178.0/24

-j

REJECT

##################################################

#Morpheus
iptables -A FORWARD

-d 206.142.53.0/24

-j

REJECT

iptables

-A FORWARD

-p TCP --dport

#KaZaA
iptables

-A FORWARD

-d 213.248.112.0/24

iptables

-A FORWARD

-p TCP --dport

1214 -j REJECT

#Limewire
iptables -A FORWARD

-p TCP --dport

6346 -j REJECT

#Audiogalaxy
iptables -A FORWARD

-d 64.245.58.0/23

Script

Desenvolvido

www.linuxit.com.br

por wrochal

e 1c3_m4n

#
#

##################################################
#!/bin/bash
echo

"1" > /proc/sys/net/ipv4/ip_forward

LAN=ethO
WAN=eth1
IPLAN=192.168.0.0/24
IP

sleep 1
echo "Bloqueando

NET=192.168.1.0/24
MODP=/sbin/modprobe
$MODP

iptables

-P INPUT ACCEPT

iptables

-P OUTPUT

iptables

-P FORWARD

iptables

-F

iptables

-t nat -A POSTROUTING

iptables

-A FORWARD

-i $LAN -j ACCEPT

iptables

-A FORWARD

-m state --state

ESTABLISHED,RELATED
echo
echo

"Bloqueios
"Bloqueando

#bloqueando

ACCEPT
ACCEPT

-j

-o $LAN -j MASQUERADE

ACCEPT

P2P"

#iMesh
iptables

-A FORWARD

-d 216.35.208.0/24

-j

REJECT

#BearShare

-j

REJECT

REJECT

-d login.oscar.aol.com

-j

5190 -j REJECT
4000 -j REJECT

#iptables

-A FORWARD

-p TCP --dport

#iptables

-A FORWARD

-p TCP --dport

#iptables

-A FORWARD

-d login.icq.com

#bloqueando MSN
iptables -A FORWARD

-p TCP --dport

iptables

-d 64.4.13.0/24

-A FORWARD
Yahoo

-j

REJECT

1863 -j REJEC~
-j REJECT

Messenger

iptables

-A FORWARD

-d cs.yahoo.com

iptables

-A FORWARD

-d scsa.yahoo.com

-j

REJECT
-j REJECT

#Bloqueando
Sites
iptables -A FORWARD

-d www.playboy.com.br
-d www.sexy.com.br

-A FORWARD

-j
-j

-A FORWARD

-p TCP --dport

6346 -j REJECT

iptables

iptables
#WinMX

-A FORWARD

-p TCP --dport

6346 -j REJECT

7.4 - Aprimorando Bloqueios P2P e Chat

iptables

-A FORWARD

-d 209.61.186.0/24

iptables

iptables

-A FORWARD

-d 64.49.201.0/24

-j

REJECT
REJECT

# !/bin/bash
echo

"Bloqueando

P2P"

REJECT

REJECT

#ToadNode

-j

REJECT

ICQ

#bloqueando

de Message"

-j

Msn, Icq, AIM e etc"

#bloquenado AIM
iptables -A FORWARD

iptable_nat

1214 -j REJECT

89

90

DOMINANDO

LINUX FIREWALL [PTABLES

Urubatan

#iMesh
iptables

-A FORWARD

-d 216.35.208.0/24

-A FORWARD

-p TCP --dport

6346 -j REJECT

-A FORWARD

-p TCP --dport

6346 -j REJECT

-j

REJECT

#BearShare
iptables

91

Neto

7.5 - Ssh Restrito com liberao a apenas um


Host (192.168.22.33)
iptables

-A INPUT

-s 192.168.22.33

-p tcp --dport

22 -

j ACCEPT

#ToadNode
iptables

7.6 - Liberao de Portas via mdulo multiport

#WinMX
iptables

-A FORWARD
-A FORWARD

iptables

-j

-d 209.61.186.0/24
-d 64.49.201.0/24

REJECT
REJECT

-j

iptables

-A INPUT

-p tcp -m multiport
-j

21,22,25,53,80,110.

--dport

ACCEPT

#Napigator
iptables -A FORWARD
#Morpheus

-d 209.25.178.0/24

-j

iptables

-A FORWARD

-d 206.142.53.0/24

-j REJECT

iptables
#KaZaA

-A FORWARD

-p TCP --dport

iptables

-A FORWARD

-d 213.248.112.0/24

1214 -j REJECT

iptables -A FORWARD
#Limewire

-p TCP --dport

iptables -A FORWARD
#Audiogalaxy

-p TCP --dport

iptables

-d 64.245.58.0/23

echo

-A FORWARD

"Bloqueando

#bloquenado

REJECT

-j

REJECT

7.7 - Bloqueio a Syn-flood via mdulo Iimit


iptables -A FORWARD
-j ACCEPT

l/s

7.8 - Bloqueio a Scanners Ocultos (Shealt Scan)

1214 -j REJECT
iptables

Msn,

-p tcp --syn -m limit --limit

6346 -j REJECT
-j REJECT

Icq, AIM e etc"

-A FORWARD

RST -m limit

-p tcp --tcp-flags

--limit

SYN,ACK,FIN,RST

l/s -j ACCEPT

7.9 - Bloqueio a Pacotes Suspeitos ou Danificados


iptables

-A FORWARD

-m unclean

-j

DROP

AIM

iptables -A FORWARD
#bloqueando
ICQ

-d login.oscar.aol.com

iptables

-p TCP --dport

-A FORWARD

iptables -A FORWARD
#bloqueando MSN

-d login.icq.com

iptables

-p TCP --dport

-A FORWARD

-j

REJECT

5190 -j REJECT
-j

REJECT

1863 -j REJECT

7.10- Bloqueio ao Software P2P Kazaa e Kazaa


Lite via mdulo string
iptables

-m string

iptables

-m string

iptables

-m

--string
--string

string

"X-Kazaa-Username:"

-j

DROP

"X-Kazaa-Network:"

-j

DROP

--string

"X-Kazaa-IP"

iptables -A FORWARD -d 64.4.13.0/24


#bloqueando Yahoo Messenger

-j

REJECT

iptables -m string --string "X-Kazaa-SupernodeIP"

iptables

-A FORWARD

-d cs.yahoo.com

-j

REJECT

7.12 - Bloqueio a IP Spoofing

iptables

-A FORWARD

-d scsa.yahoo.com

-j

REJECT
iptables

-N syn-flood

-j

DROP

-j DROP

92

DOMINANDO

LINUX FIREWALL IPTABLES

Urubatan

Neto

93

iptab1es -A 1NPUT -i ethO -p tcp --syn -j syn-f1ood


iptab1es -A syn-f1ood -rn1irnit --lirnit l/s --lirnitburst 4 -j RETURN
iptab1es -A syn-f1ood -j DROP

iptab1es -A INPUT -p tcp --dport 123456 -j LOG --logprefix "Servio BackOrificeH


iptab1es -A INPUT -p tcp --dport 5042 -j LOG --logprefix "Servio: WincrashH

7.13 - Bloqueio a pacotes ICMP (pings)

7.19 - Habilitando Forwading (NAT)

iptab1es -A FORWARD -p icrnp --icrnp-type echo-request _


DROP

echo 1 > /proc/sys/net/ipv4/ip_forward

7.20 - Desabilitando Forwading (NAT)


7.14 - Bloqueio a cmd.exe (Protege WebServers
Microsoft IIS em Background)

echo

iptab1es -I 1NPUT -j DROP -p tcp -s 0.0.0.0/0 -rn


string --string "crnd.exeH

7.21 - Desabilitando Resposta de Ping


echo

7.15 - Redirecionamento de host de destino (DNAT)


iptab1es -t nat -A PREROUTING -i ethO -j DNAT --to
10.0.30.47

>

>

/proc/sys/net/ipv4/ip_forward

/proc/sys/net/ipv4/icrnp_echo_ignore_a11

7.22 - Habilitando Trfego de Loopback (regra


no opcional)
iptab1es -A INPUT -i 10 -j ACCEPT

7.16 - Alterao de Endereo de Origem (SNAT)

7.23 - Abrindo portas para Servio Pop3

iptables -t nat -A POSTROUTING -o ethl -j SNAT --to


200.244.146.33

iptab1es -A INPUT -j ACCEPT -p tcp --dport 110

7.17 - Priorizao a servio Ftp (TOS)

7.24 - Redirecionando conexes Ftp (21)


entrantes para o host 10.0.50.2

iptab1es -t rnang1e -A PREROUTING -i ethO -p tcp __


sport 21 -j TOS --set-tos 16

7.18 - Inserindo em Log Acessos a Portas


BackOrifice e Wincrash
iptab1es -A INPUT -p tcp --dport 12345
prefix "Servio BackOrificeH

-j

LOG --log-

iptab1es -A FORWARD -j ACCEPT -p tcp --dport 21


iptab1es -t nat -A PREROUTING -i ethl -p tcp --dport
21 -j DNAT --to 10.0.50.2:21

7.24 - Redirecionando conexes Ftp (21) e www


(80) entrantes para o host 10.0.80.32
iptables -A FORWARD

-j

ACCEPT -p tcp --dport 80

94

DOMINANDO

LINUX FIREWALL IrTABLES

iptables -t nat -A PREROUTING


80 -j DNAT --to 10.0.80.32:80
iptables

-A FORWARD

-j ACCEPT

iptables -t nat -A PREROUTING


22 -j DNAT --to 10.0.80.32:22

-i eth1 -p tcp --dport


-p tcp --dport

22

-i ethl -p tcp --dport

SOBRE ...

"Nunca entendi como dois homens podem ser juntar para


escrever um livro. Para mim, como precisar de trs pessoas
para produzir um filho. ))(Evelyn Waugh)

8.1

Aspectos de Instalao

Bem diferente do que a maioria das pessoas imagina, os procedimentos de instalao de um Firewall, em se tratando do
Iptables, extremamente simples conforme veremos a seguir:

8.1.1 - Apt-get

-+

Para instalar o Iptables por via da fantstica ferramenta


Apt-get digite em shell:
[root@johann

-+

/l# apt-get

install

iptables

Para maiores informaes sobre o uso da ferramenta


apt-get consulte seu manual (man apt-get)

8.1.2 - RPM (Red Hat Packet Manager)

-+

Para instalar o Iptables por via de um pacote rpm digite


em shell:
[root@johann

-+

Para atualizar sua verso corrente do Iptables por via


de um pacote rpm digite em shell:
[root@johann

-+

/l# rpm -ivh iptables-versao

/l# rpm -Uvh iptables-versao

Para maiores informaes sobre o uso da ferramenta


rpm consulte seu manual (man rpm)

98

DOMINANDO

LINUX FIREWALL IPTABLES

8.2 - O Projeto
Iptables hoje o maior projeto de Firewall incorporado ao Gnu/
Linux e considerado por muitos a mais complexa e completa
ferramenta a este nvel.

~-------------------~
/

"-

/
I

"l

FAA PARTE DE NOSSO MAILING LIST

Mesmo tendo sido criado originalmente por Paul "Rusty" Russell, o projeto Netfiler/lptables hoje fruto de uma imensa mobilizao que envolve centenas de colaboradores independentes
de todas as partes do mundo.

Nome:
Endereo:

Bairro:

Cep:

Atualmente seu Core Team, ou seja, o ncleo do projeto, conta


com a participao ativa de Martin Josefsson, Jozsef Kadlecsik,
Harald Welte, James Morris, Marc Boucher e Rusty Russell.

Cidade:

Estado:

E-mail:

O Iptables regido pelas normas da GNU (General Public License), que pode ser lida na ntegra em http://www.gnu.org/.
Para maiores informaes sobre o projeto Iptables/Netfilter
visite o site www.iptables.org ou www.netfilter.org

(DOBRE E COLE)

Profi~o:
Professor:
Disciplina:

O sim O no
_

I
reas de interesse:

o Didticos

O Inforrncica
O Auto-ajuda
O Sade

O
O

Jogos
Outros

De que forma tomou conhecimento deste livro:

O amigo

O revista

Internet

O jornal

Outros

Sugestes:

~.a

EDITORA

""",

CINCIA MODERNA

L WWW.LCM.COM.BR

DOMINANDO
LINUX
FIREWALL!PTABLES

"tJI

_~

S-ar putea să vă placă și