Firewall e Iptables - O melhor conteúdo sobre iptables da internet. Parte 1 - 9 PDF Imprimir E-mail
Escrito por cbini   
Sex, 31 de Dezembro de 2010 01:15

Firewall

1.1. Objetivos:

• Entender os conceitos por trás de um firewall;
• Configurar um firewall gateway;
• Como organizar as regras do firewall em um script profissional;

Firewall - 4

1.2. Revisão de redes básica

Antes de partirmos para a configuração de um firewall, vamos fazer uma revisão rápida de alguns conhecimentos que são necessários para trabalhar com um firewall. Detalhes como: endereços, portas, protocolos de rede. Como os dados são transmitidos na Internet?

Os dados são agrupados em pacotes TCP (de maneira geral). Esses pacotes TCP podem conter até quantos bytes de dados? 1460 bytes. Além dos dados, quantos bytes adicionais vão junto no pacote? 40 bytes a mais! E o que vai nesses 40 bytes a mais?

- IP de origem;
- IP de destino;
- Porta de origem;
- Porta de destino;
- Códigos de verificação;
- Número do pacote;

E para que servem os códigos de verificação? Servem para garantir a integridade dos dados que estão sendo trafegados na rede. Qual a função básica do IP? A função básica do IP é cuidar do endereçamento e entrega de pacotes. Qual a função básica do TCP? A função básica do TCP é fazer verificações de erros e numeração de portas.

Logo, os dados serão transmitidos de foram quebradas em pacotes menores. Quantas portas TCP existem? 65.536 portas. Como elas são numeradas? De 0 e 65.535. O que são portas baixas? De 0 a 1023. Elas estão reservadas para que? Para serviços mais conhecidos como: servidor web, ftp, ssh, telnet, servidores de e-mail, compartilhamento de arquivos, como, por exemplo, Samba, NFS etc.

O que são portas altas? São portas acima de 1023.

Firewall - 5

Qual a porta padrão de um ftp? 21 e 20.
Qual a porta padrão de um servidor web? 80
Qual a porta padrão de um servidor web com https? 443
Qual a porta padrão do SMTP? 25
Qual a porta padrão POP? 110
Qual porta padrão do SSH? 22

Essas perguntas podem cair na prova da LPI!

Qual arquivo que posso obter essa relação de portas e serviços? /etc/services

Pode ser visto no site: http://www.iana.org/assignments/port-numbers

Importante reforçar que existe o mesmo número de portas para os serviços UDP. O Samba, por exemplo, utiliza várias portas. Quais são? 137 UDP, 138 UDP, 139 TCP e 445 TCP.

Firewall - 6

Importante dizer também que os dados são transmitidos através de conexões. Tudo começa com o cliente enviando o pacote "SYN", que solicita a abertura da conexão. Caso a porta esteja fechada, o que servidor responde? Ele responde com um pacote "RST" e a comunicação se encerra. Se existir algum serviço disponível na porta solicitada (um servidor http, por exemplo), o que acontece? Ele responde com outro pacote "SYN", seguido de um um pacote "ACK", a fim de avisar que a porta está disponível e abre a conexão. E o cliente o que vai fazer? O cliente responderá então com outro pacote "ACK", o que abre oficialmente a conexão.

Daí é iniciada a transferência dos dados, que como já dito anteriormente são organizados em pacotes. Para cada pacote recebido, a máquina cliente irá fazer o que? Enviar um pacote de confirmação. E se um pacote se perder? Ela solicita a retransmissão. Como que vai se saber se um pacote está integro ou não? Cada pacote inclui 4 bytes adicionais com um código de CRC a fim de verificar a integridade do pacote. Depois que todos os dados são transmitidos, o que acontece?

O servidor envia um pacote "FYN" que avisa que não tem mais nada a transmitir. E o cliente o que faz? O cliente responde com outro pacote "FYN" e a conexão é oficialmente encerrada.

Firewall - 7

Revisão:

1. Cliente: SYN (solicita a abertura da conexão)
2. Servidor: SYN (confirma o recebimento e avisa que a porta está disponível)
3. Servidor: ACK (inicia a conexão)
4. Cliente: ACK (confirma)
5. Cliente: DATA (é enviado o pacote com a mensagem de texto)
6. Servidor: OK (a confirmação, depois de verificar a integridade do pacote)
7. Cliente: FYN (solicita o fechamento da conexão)
8. Servidor: FYN (confirma)
9. Cliente: FYN (confirma que recebeu a confirmação)

Outro detalhe importante! Através de um simples ping, conseguimos deduzir o Sistema Operacional de uma máquina. Por exemplo:

# ping www.terra.com.br
PING
www.terra.com.br (200.176.3.142) 56(84) bytes of data.
64 bytes from
www.terra.com.br (200.176.3.142): icmp_seq=1 ttl=243 time=133 ms
64 bytes from
www.terra.com.br (200.176.3.142): icmp_seq=2 ttl=243 time=37.0 ms

Firewall - 8

Outro exemplo:

# ping www.uol.com.br
PING
www.uol.com.br (200.221.2.45) 56(84) bytes of data.
64 bytes from home.uol.com.br (200.221.2.45): icmp_seq=1 ttl=57 time=60.1 ms
64 bytes from home.uol.com.br (200.221.2.45): icmp_seq=2 ttl=57 time=22.8 ms

Aparentemente o ping é inofensivo, mas o que temos de interessante nele são os valores de TTL. No primeiro exemplo, temos uma TTL no valor de 243 e no segundo exemplo, TTL no valor de 57. TTL (Time to Live). Os valores de TTL (padrões) são seguidos por:

Roteadores Ciclades = 30
Linux = 64
Windows = 128
Cisco = 255
Linux + Iptables = 255

Raramente quando damos um ping, o valor de TTL será exatamente o valor da tabela. Isso se deve ao fato do caminho que o pacote faz até o destino. Porque quando eu envio um ping para uma máquina, é como se eu enviasse um pacote com informações.

Mas geralmente quando pingo o site da uol por exemplo, ele não vai diretamente para o servidor da uol, ele passa por alguns roteadores até chegar ao seu destino. E cada roteador que ele passa, é um salto (hop) que o pacote faz. E a cada hop que o pacote dá, é decrementado 1 do valor geral.

Firewall - 9

Por exemplo, quando demos um ping www.uol.com.br ele respondeu o valor 57. O valor mais próximo desse valor de TTL é o valor 64, que vem de Linux. Se considerarmos que o pacote deu 7 hops até chegar ao destino (passou por 7 roteadores) então temos o cálculo: 64-7=57 Sendo assim, conseguimos saber que o sistema operacional que o servidor da uol está usando é Linux. E para saber essa quantidade de hops que um pacote faz até chegar ao seu destino, podemos usar ferramentas como traceroute e mtr.

Para sabermos o valor de TTL do sistema operacional, podemos dar um cat no arquivo:

# cat /proc/sys/net/ipv4/ip_default_ttl 64

E se quisermos alterar esse valor de TTL, também podemos! Podemos colocar por exemplo, 128 dentro desse arquivo, que assim consigo enganar quem quiser informações da minha máquina!

Mas se alterarmos simplesmente esse arquivo, não será o suficiente, porque ele não ficará fixo! Para ficar sempre um valor diferente do valor padrão, é necessário editar o arquivo:

# vim /etc/sysctl.conf

E no final dele, acrescentar uma linha com o novo valor de TTL que você definir:

# Uncomment the next line to enable packet forwarding for IPv6 net.ipv4.ip_default_ttl = 64

Firewall - 10

Outro terminal que conseguimos verificar também o valor de TTL é o terminal:

# sysctl -a | grep default

Nele, entre as linhas temos:

net.ipv4.ip_default_ttl = 64

Que é o valor de TTL padrão! E é a mesma linha que temos que colocar no arquivo /etc/sysctl.conf. Quando adicionamos a linha com o valor de TTL no arquivo /etc/sysctl.conf, temos que usar o terminal:

# sysctl -p /etc/sysctl.conf

Esse terminal valida essa alteração para que torne o valor fixo. Qual ferramenta podemos usar para calcular a quantidade de saltos que um pacote faz até chegar ao seu destino? Uma das ferramentas que podemos usar para calcular a quantidade de hops que um pacote faz até chegar ao seu destino, é usando o terminal traceroute. Esse terminal como o próprio nome fala, traça a rota do pacote até o seu destino.

# aptitude install traceroute

Firewall - 11

Exemplo do terminal:

# traceroute www.uol.com.br
traceroute to www.uol.com.br (200.221.2.45), 30 hops max, 40 byte packets
1 192.168.3.1 (192.168.3.1) 0.594 ms 0.377 ms 0.311 ms
2 200.212.122.129 (200.212.122.129) 0.838 ms 0.842 ms 0.673 ms
3 embratel-S5-0-3-53-acc01.spomb.embratel.net.br (200.182.12.137)
6.560 ms 39.029 ms 52.630 ms
4 ebt-G5-0-gacc02.spolp.embratel.net.br (200.230.243.194) 9.180 ms 48.516 ms 31.541 ms
5 telefonicaempresas-net-P4-0-gacc02.spolp.embratel.net.br (200.228.126.30) 27.838 ms 25.022 ms 37.049 ms
6 * * *
7 fr2-border5.ix.uol.com.br (200.221.30.41) 27.413 ms 32.046 ms 16.809 ms
8 * * *
9 * * *
10 * * *
11 * * *
12 * * *
13 * * *
14 * * *
15 * * *
16 * * *
17 * * *
18 * * *
19 * * *
20 * * *
21 * * *
22 * * *
23 * * *
até...
28 * * *
29 * * *
30 * * *

Firewall - 12

Cada linha que aparece um nome, é um roteador por onde o pacote passa. Note que ele passa por 7 lugares! E quando pingo para o site da uol, ele dá um valor de TTL 57 + 7 hops dos pacotes: 64. Por padrão o terminal traceroute procura por até 30 hops, mesmo que ele não encontre nada, que é o caso de quando aparece ***.

Mas na linha de hop 6 por exemplo, apareceu *** e depois aparaceu um nome na linha 7. Nesse caso, provavelmente temos uma máquina que está com o ping bloqueado ou então uma máquina com firewall, portanto ela não aparece quando o terminal traceroute faz as buscas.

1.3. Introdução ao firewall

Nos tempos atuais tem se falado muito em segurança, pois a internet se tornou um ambiente perigoso. Todos nossos servidores que estão expostos para a internet necessitam de uma proteção para que não exponha os serviços que estão ali rodando e muito menos informações importantes sobre a empresa.

A configuração de um firewall depende diretamente da disponibilidade de serviços de rede e roteamento. Criar um estrutura de configuração para um firewall nem sempre é uma tarefa simples. Se você ainda não tem um conhecimento básico sólido em Redes é necessário estudar mais para que não ocorra maiores dificuldades na implementação do mesmo. Para configurar um firewall, é necessário o conhecimento sobre a estrutura da rede em questão e dos diferentes protocolos envolvidos na comunicação, isto é, dos serviços que a rede usa para que eles não percam a comunicação.

O objetivo em ter uma máquina fazendo o papel de Firewall Gateway em nossa é rede é minimizar as tentativas de ataques que nossas redes recebem, tentando impedir possíveis invasões e levantamento de informações. Os sistemas GNU/Linux com Kernel série 2.4 e 2.6 trabalham com o Iptables para fazer o gerenciamente de regras de Firewall. Lembrando que o Iptables é apenas um Front-End que gerencia o suporte Netfilter no Kernel. Um firewall faz o filtro de pacotes que passam na rede.

Firewall - 13

1.4. Características do iptables:

– Filtro de pacotes statefull: isso significa que o iptables é capaz de atuar sobre as camadas do protocolo TCP;
– Modularidade: a configuração do kernel é modular e com o netfilter não é diferente, pois novas funcionalidades podem ser adicionadas em muito esforço. Um módulo só será usado se for da necessidade do administrador;
– O Iptables possui as seguintes tabelas, sendo elas: filter, nat, mangle. A tabela filter é a tabela padrão do Iptables. Cada uma dessas tabelas possui o que chamamos de CHAINS. As CHAINS são onde vão ser definidos as regras para o nosso firewall.

1.5. Os conceitos de tabelas e chains

A tabela filter serve para atribuir permissões de acessos essenciais (permitir/negar). A tabela NAT, que significa Network Address Translation, é um recurso que permite compartilhar acessos de Internet ou redirecionar conexões.

Já a table mangle é utilizada para modificar uma propriedade de um pacote e seu uso é avançado, como por exemplo influenciar na decisão de roteamento ou controle de banda.

As CHAINS da tabela filter são as seguintes:

INPUT Regras de entrada de pacotes.
OUTPUT Regras de saída de pacotes.
FORWARD Regras de passagem de pacotes pelo firewall.

Firewall - 14

As CHAINS da tabela nat são as seguintes:

PREROUTING Regras que serão processadas antes do roteamento dos pacotes nas interfaces do firewall.

POSTROUTING Regras que serão precessadas pós roteamento dos pacotes nas interfaces do firewall.

OUTPUT Regras de saída de pacotes.

Firewall - 15

1.6. Fluxo de verificações em que um pacote é submetido

Fluxo de verificações em que um pacote é submetido. Quando um pacote chega ao firewall, a primeira chain verificada é a PREROUTING.

É exatamente nesse momento que algumas decisões de roteamento podem acontecer, exemplo: um redirecionamento de conexão ou de porta. Dependendo do destino, o pacote pode ser verificado na chain INPUT ou FORWARD. A chain INPUT é usada quando o destino é o próprio firewall, senão é usada a chain FORWARD que é um encaminhamento (roteamento). Se a chain INPUT é executada, o próximo passo é que chain OUTPUT seja processada, pois aí é que vai a resposta. A chain POSTROUTING é a última a ser processada, que é o momento antes de o pacote ser entregue ao destino.

Importante: A chain PREROUTING é a primeira a ser analisada e a POSTROUTING a última. Não é possivel utilizar as chains PREROUTING e POSTROUTING na tabela filter. Na tabela nat o redirecionamento de conexões é feita na chain PREROUTING e para compartilhar acesso usa-se
a chain POSTROUTING.

PREROUTING
INPUT
OUTPUT
FORWARD
POSTROUTING

Firewall - 16

1.7. Compreendendo as políticas BÁSICAS e o conceito das EXCEÇÕES A metodologia utilizada para implementação do firewall será a seguinte:

Iremos negar todo o tráfego para as CHAINS de INPUT, OUTPUT e FORWARD da tabela filter, posteriormente iremos definir a relação dos serviços que devem ser liberados no firewall, a estes, iremos chamar de exceções. Todo o tráfego de pacotes que as nossas exceções não cobrir serão bloqueado por padrão. Em suma, o que não for oficialmente permitido já está expressamente negado.

Firewall - 17

1.8. Sintaxe do terminal iptables

# iptables [-t tabela] [opção] [chain] [dados] -j [alvo]
Parâmetros para o iptables Descrição do parâmetro
-P --policy Estabelece a política de acesso de uma chain
-t --table Seleciona tabela
-A --append Adiciona como última regra da sequência de uma chain
-I --insert Insere como primeira regra da sequência de uma chain
-N --new-chain Cria uma nova chain
-D --delete Remove uma regra
-X --delete-chain Elimina todas as regras presentes em chains de usuário
-F --flush Elimina todas as regras presentes em uma chain padrão (INPUT, FORWARD etc) ou tabela (para todas as chains)
-s --source Determina a origem do pacote
-d --destination Determina o destino do pacote
--dport --destination-port Define a porta de destino
--sport --source-port Define a porta de origem
-i --in-interface Define a interface de entrada (input), exemplos: eth0, eth1, ppp0 etc.
-o --out-interface Define a interface de saída (output)
-p --protocol Seleciona protocolo (tcp, udp, icmp etc)

Firewall - 18

Alvos:

Alvo (target) Descrição do alvo
ACCEPT O pacote é aceito
REJECT O pacote é rejeitado imediatamente
DROP O pacote é negado silenciosamente (mais interessante, pois diminui a eficiência de um ataque DOS/DDOS, isto é, o host de origem fica sem resposta até cair por tempo esgotado.

1.9. Prática

Verifique como estão configuradas as políticas básicas que estão definidas por padrão:

# iptables -n -L

Modifique as políticas básicas para DROP ALL:

# iptables -P INPUT DROP
# iptables -P OUTPUT DROP
# iptables -P FORWARD DROP

Verifique se a nova política foi assumida:

# iptables -n -L

Agora que percebemos que temos um firewall ativo, devemos pensar nas demais políticas, uma vez que, por mais seguro que seja um firewall, cuja política base seja negar tudo, não é um firewall prático, pois precisamos realizar comunicações.

Firewall - 19

Dessa forma, precisamos definir políticas de exceções para o Firewall. Realize o teste usando o terminal ping na sua interface loopback:

# ping 127.0.0.1

O teste anterior nos permitiu verificar que devemos definir uma política de exceção para a interface loopback. Criaremos uma política que possibilite isso:

# iptables -A OUTPUT -d 127.0.0.1 -j ACCEPT
# iptables -A INPUT -d 127.0.0.1 -j ACCEPT

Liste as políticas ativas:

# iptables -n -L

Vejamos se agora conseguimos fazer um ping na intreface de loopback:

# ping 127.0.0.1

Última atualização em Sex, 31 de Dezembro de 2010 01:26
 

Adicionar comentário


Código de segurança
Atualizar