Um pouco sobre IPTables

Started by Cloudy, 05 de February , 2006, 06:29:36 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Cloudy

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 -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:


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
"You have to be trusted by the people tou lied to, so when they turn their back on you, you have the chance to the put the knife in." (Roger Waters)

...by Cloudy

Anonymous

Hey cara, ageita ai as tags, porque o smf não deve ter ou aceitar assim...
Mas ótimo tuto cara, curti mesmo =]

Anonymous

Bom, já que o tutorial é seu eu bou opinar, tá muito bom, fico bem legal e bem explicado ;)

Cloudy

Quais tags Morte? A única que tá ruinzinha é a Glow, mas ainda não entendi o porque... ???

...by Cloudy
"You have to be trusted by the people tou lied to, so when they turn their back on you, you have the chance to the put the knife in." (Roger Waters)

...by Cloudy

Anonymous

só glow mesmo...
vou testar aqui:
Morte137: The Heart Collector
e usei assim:
Morte137: The Heart Collector

Cloudy

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
"You have to be trusted by the people tou lied to, so when they turn their back on you, you have the chance to the put the knife in." (Roger Waters)

...by Cloudy