Um pouco sobre IPTables[Tutorial]

Iniciado por DeamoN Cheat®, 24 de Maio de 2006, 16:04

tópico anterior - próximo tópico

DeamoN Cheat®

Um pouco sobre IPTables

Introdução:
Acho que todos que estão aqui nesse fórum sabem o que é um Firewall, mas acho que nem todos conhecem firewall de Linux.

Os kerneis até versão 2.2 usam o IPChains, e apartir do kernel 2.4 o Firewall usado é o IPTables. Como o IPChains não é mais muito usado, vou falar sobre o IPTables.

O IPTables é um firewall SPF (Statefull Packet Filter, ou ainda, Filtro de Pacote por Estado), é um dos mais poderosos tipos de firewall, pois ele segue regras dadas pelo Admin, e ainda verifica o estado (Ex: Vê se o pacote foi solicitado).

O IPTables possue três tabelas, a primeira é a "filter", ela é a tabela defaut, controla o tráfego de dados sem ocorrencia de NAT. Aceita as Chains INPUT, OUTOUT e FOWARD. A segunda é a NAT, ela é utilizado quando se tem NAT (Ex: Um pacote sai da rede interna pra interet), aceita as Chains PREROUTING, OUTPOST e POSTROUTING. A terceira, última, e menos usada é a Mangle, ela trabalha basicamente com marcação de pacotes QoS.

Vou explicar aqui as chains:
Citar
INPUT: Verifica os pacotes que entram na rede pelo Firewall.

OUTPUT: Verifica os pacotes que saem da rede, e passando pelo Firewall.

FORWARD: Verifica pacotes que entram entram e saem do firewall na rede interna.

PREROUTING: Verifica pacotes que estão entrando através de NAT. Faz ações de NAT com o endereço de destino DNAT.

POSTROUTING: Verifica os pacotes que estão saindo através de NAT. Faz ações de NAT com o endereço DNAT.
Agora vamos ver um pouco de regras de filtragem.

Regras de Filtragem:
As regras (rules) de fitragem, geralmente, são compostas assim:

#iptables [-t tabela] [opção] [chain] [dados] -j [ação]

Exemplo:

#iptables -A FORWARD -d 192.168.1.1 -j DROP

A linha acima determina que todos os pacotes destinados à máquina 192.168.1.1 devem ser descartados. No caso:

tabela: filter (é a default)

opção: -A

chain: FORWARD

dados: -d 192.168.1.1

ação: DROP

Existem outras possibilidades que fogem à sintaxe mostrada anteriormente. É o caso do comando #iptables -L, que mostra as regras em vigor.

Opções:
As principais opções são:

-P --> Policy (política). Altera a política da chain. A política inicial de cada chain é ACCEPT. Isso faz com que o filtro, inicialmente, aceite qualquer INPUT, OUTPUT ou FORWARD. A política pode ser alterada para DROP, que irá negar o serviço da chain, até que uma opção -A entre em vigor. O -P não aceita REJECT ou LOG. Exemplos:

#iptables -P FORWARD DROP

#iptables -P INPUT ACCEPT

-A --> Append (anexar). Acresce uma nova regra à chain. Tem prioridade sobre o -P. Geralmente, como buscamos segurança máxima, colocamos todas as chains em política DROP, com o -P e, depois, abrimos o que é necessário com o -A. Exemplos:

#iptables -A OUTPUT -d 172.20.5.10 -j ACCEPT

#iptables -A FORWARD -s 10.0.0.1 -j DROP

#iptables -A FORWARD -d www.chat.com.br -j DROP

-D --> Delete (apagar). Apaga uma regra. A regra deve ser escrita novamente, trocando-se a opção para -D. Exemplos:

Para apagar as regras anteriores, usa-se:

#iptables -D OUTPUT -d 172.20.5.10 -j ACCEPT

#iptables -D FORWARD -s 10.0.0.1 -j DROP

#iptables -D FORWARD -d www.chat.com.br -j DROP

Também é possível apagar a regra pelo seu número de ordem. Pode-se utilizar o -L para verificar o número de ordem. Verificado esse número, basta citar a chain e o número de ordem. Exemplo:

#iptables -D FORWARD 4

Isso deleta a regra número 4 de forward.

-L --> List (listar). Lista as regras existentes. Exemplos:

#iptables -L

#iptables -L FORWARD

-F --> Flush (esvaziar). Remove todas as regras existentes. No entanto, não altera a política (-P). Exemplos:

#iptables -F

#iptables -F FORWARD

Dados:
Os elementos mais comuns para se gerar dados são os seguintes:

-s --> Source (origem). Estabelece a origem do pacote. Geralmente é uma combinação do endereço IP com a máscara de sub-rede, separados por uma barra. Exemplo:

-s 172.20.0.0/255.255.0.0

No caso, vimos a sub-rede 172.20.0.0. Para hosts, a máscara sempre será 255.255.255.255. Exemplo:

-s 172.20.5.10/255.255.255.255

Agora vimos o host 172.20.5.10. Ainda no caso de hosts, a máscara pode ser omitida. Caso isso ocorra, o iptables considera a máscara como 255.255.255.255. Exemplo:

-s 172.20.5.10

Isso corresponde ao host 172.20.5.10. Há um recurso para simplificar a utilização da máscara de sub-rede. Basta utilizar a quantidade de bits 1 existentes na máscara. Assim, a máscara 255.255.0.0 vira 16. A utilização fica assim:

-s 172.20.0.0/16

Outra possibilidade é a designação de hosts pelo nome. Exemplo:

-s www.chat.com.br

Para especificar qualquer origem, utilize a rota default, ou seja, 0.0.0.0/0.0.0.0, também admitindo 0/0.

-d --> Destination (destino). Estabelece o destino do pacote. Funciona exatamente como o -s, incluindo a sintaxe.

-p --> Protocol (protocolo). Especifica o protocolo a ser filtrado. O protocolo IP pode ser especificado pelo seu número (vide /etc/protocols) ou pelo nome. Os protocolos mais utilizados são udp, tcp e icmp. Exemplo:

-p icmp

-i --> In-Interface (interface de entrada). Especifica a interface de entrada. As interfaces existentes podem ser vistas com o comando #ifconfig. O -i não pode ser utilizado com a chain OUTPUT. Exemplo:

-i ppp0

O sinal + pode ser utilizado para simbolizar várias interfaces. Exemplo:

-i eth+

eth+ refere-se à eth0, eth1, eth2 etc.

-o --> Out-Interface (interface de saída). Especifica a interface de saída. Similar a -i, inclusive nas flexibilidades. O -o não pode ser utilizado com a chain INPUT.

! --> Exclusão. Utilizado com -s, -d, -p, -i, -o e outros, para excluir o argumento. Exemplo:

-s ! 10.0.0.1

Isso refere-se a qualquer endereço de entrada, exceto o 10.0.0.1.

-p ! tcp

Todos os protocolos, exceto o TCP.

--sport --> Source Port. Porta de origem. Só funciona com as opções -p udp e -p tcp. Exemplo:

-p tcp --sport 80

Refere-se à porta 80 sobre protocolo TCP.

--dport --> Destination Port. Porta de destino. Só funciona com as opções -p udp e -p tcp. Similar a --sport.

Ações:
As principais ações são:

ACCEPT --> Aceitar. Permite a passagem do pacote.

DROP --> Abandonar. Não permite a passagem do pacote, descartando-o. Não avisa a origem sobre o ocorrido.

REJECT --> Igual ao DROP, mas avisa a origem sobre o ocorrido (envia pacote icmp unreachable).

LOG --> Cria um log referente à regra, em /var/log/messages. Usar antes de outras ações.

Conclusão:
Não adianta nada vc ter um filtro de pacotes que proteja sua rede mas que não se proteja. Então o firewall deve ser protegido para que a rede seja protegida. Então siga as "diquinhas" que eu vou lhes dar:
Citar
- Feche a máquina com Iptables, de modo que todas os pacotes destinados diretamente a ela sejam descartados (#iptables -P INPUT DROP), e vá abrindo aos poucos quando necessário.
- Prefira topologia de filtro isolado combinado com filtro incorporado;
- Atualize sempre o Iptables e o kernel;
- NUNCA rode qualquer serviço, principalmente os remotos, como telnet e ftp, nas máquinas firewall. Mas...
- ...Se tiver que administrar remotamente uma máquina firewall, utilize ssh. Nesse caso, o ssh não deverá permitir o login como root;
- Nunca cadastre qualquer usuário na máquina Iptables, caso se trate de filtro isolado, a não ser os que irão administrar por ssh;
- Utilize TCP Wrappers totalmente fechado (ALL:ALL em /etc/hosts.deny) em filtros isolados. Abra o ssh (em /etc/hosts.allow) apenas para os clientes que forem fazer administração remota;
- Anule as respostas a ICMP 8 (echo reply) no filtro isolado, para evitar ataques de Ping of Death.
- Não insira referências ao sistema de firewall no DNS;
- Não deixe as máquinas firewall isolado com cara de firewall. Utilize nomes descaracterizados;
- Faça log de ações suspeitas que estiverem ocorrendo na rede.

Autor: Cloudy

100+

Lex Luthor

Amigo, muito bom sua dica.
Por acaso você conheça algum programinha bom para edição de regras do IPTables gráfico, mas que não seja tão simples como o guarddog ? Gostaria de algo mais avançado para criar regras diretamente do IPTables, e de preferência que ele consiga importar as regras ativas no IPTables ...

Abraço...
Analista de Redes- Segurança da Informação
Bacharel em Ciências da Computação - UnB
Ubuntu Forever - Compiz Fusion -

DeamoN Cheat®

Ola amigo, to meio sem tempo para escrever um Tuto sobre isso, mais dei uma procurada e achei um material muito bom.

:arrow: Gerenciando regras de Iptables com Firewall Builder

:arrow: Gerenciando regras de Iptables com Firewall Builder (parte 2)


100+

Lex Luthor

Valeu, eu tava já brincando com o FWBuilder, resolvi usá-lo de vez, pois é desse mesmo que gosto, só não sei se teria alguma forma de importar as regras já ativas no meu IPTAbles... mas eu já fiz tudo novamente....
Abraços....
Analista de Redes- Segurança da Informação
Bacharel em Ciências da Computação - UnB
Ubuntu Forever - Compiz Fusion -

faroffiuts


iGama


Extremist

muito bom o tuto, tava precisando!  vlws!