FORUM DARKERS

Segurança & Hacking => Segurança => Topic started by: Cloudy on 05 de February , 2006, 06:29:36 PM

Title: Um pouco sobre IPTables
Post by: Cloudy on 05 de February , 2006, 06:29:36 PM
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:
QuoteINPUT: 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 (http://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 (http://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 (http://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:


Quote- 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.


Então é isso, acho que deu pra vcs captarem. Agora é só seguir as "instruções" e com certeza sua rede vai ficar mais segura. Mas vcs não devem se restringir a um firewall, instalem IDS, IPS, Anti-Rootkit's, HoneyPots e HoneyNets (Mas muito cuidado com isso, pois podem fácilmente ser usados contra vc), e o mais importante, use a mente hacker.

Opinem! ;D

...by Cloudy
Title: Re: Um pouco sobre IPTables
Post by: Anonymous on 05 de February , 2006, 06:47:56 PM
Hey cara, ageita ai as tags, porque o smf não deve ter ou aceitar assim...
Mas ótimo tuto cara, curti mesmo =]
Title: Re: Um pouco sobre IPTables
Post by: Anonymous on 05 de February , 2006, 06:49:07 PM
Bom, já que o tutorial é seu eu bou opinar, tá muito bom, fico bem legal e bem explicado ;)
Title: Re: Um pouco sobre IPTables
Post by: Cloudy on 05 de February , 2006, 07:04:06 PM
Quais tags Morte? A única que tá ruinzinha é a Glow, mas ainda não entendi o porque... ???

...by Cloudy
Title: Re: Um pouco sobre IPTables
Post by: Anonymous on 05 de February , 2006, 07:20:31 PM
só glow mesmo...
vou testar aqui:
Morte137: The Heart Collector
e usei assim:
Morte137: The Heart Collector
Title: Re: Um pouco sobre IPTables
Post by: Cloudy on 05 de February , 2006, 07:35:18 PM
Hmmm... EU não sabia que tinha que por essas "vígulas". Vlw.

Mas aí, alguem sabe pra que server? O que são os números? ???

...by Cloudy