Protegendo sua rede com Iptables - Proxy - NAT - IDS: PARTE 1

Este post tenta esclarecer um pouco sobre como funcionam as redes e como transformar nosso equipamento Linux em um Roteador que deixa nossa rede um pouco mais segura, seja em casa ou mesmo no escritório. Então, vamos ao que interessa:

Este conteúdo é baseado no livro "Linux - Administração de Sistemas e Operação de Serviços de Rede" - Sébastien BOBILLIER

Roteamento e filtragem

Para falar e entender sobre roteamento, podemos primeiro definir qual é a função do roteador? Por isso podemos dizer que um roteador, além de criar uma rede e permitir a conexão com outros equipamentos (sabendo que podemos fazer isso com um AP, Switch, Hub ou outros) tem a capacidade de conectar duas redes diferentes entre si.

roteador

Como podemos ver na imagem, existe uma rede local "10.0.1.0" que é criada pelo roteador e atinge uma de suas duas interfaces. Então, o roteador em sua outra interface, tem outra rede, com seu IP público com o qual ele pode se conectar à Internet. A função de roteamento é basicamente servir de intermediário entre essas duas redes para que possam se comunicar.

Linux como roteador.

Naturalmente, o kernel do Linux já tem a capacidade de "encaminhar", mas por padrão está desabilitado, então se quisermos que nosso Linux faça este trabalho, devemos ir ao arquivo.

/proc/sys/net/ipv4/ip_forward

Lá descobriremos que é um arquivo que contém apenas um zero "0", o que devemos fazer é alterá-lo para um "1" para ativar este comportamento. Este infelizmente é apagado quando reiniciamos o computador, para deixá-lo ativado por padrão devemos usar o comando:

sysctl net.ipv4.ip_forward=1

Ou edite-o diretamente no arquivo /etc/sysctl.conf. Dependendo da distribuição, esta configuração também pode estar em um arquivo em  /etc/sysctl.d/.

Por padrão, nosso Linux deve ter uma tabela de roteamento, que geralmente é a configuração de nossa rede lan e a conexão com o roteador. Se quisermos ver esse roteamento, podemos usar dois comandos:

route -n

o

netstat -nr

Ambos os comandos devem retornar o mesmo.

Captura de tela de 2014-09-30 18:23:06

Em geral, esta configuração é suficiente para que seu Linux funcione como um Gateway e outros computadores possam navegar em nosso computador. Agora, se quisermos que nosso Linux conecte duas ou mais redes, sejam locais ou não, por exemplo, podemos fazer uso de rotas estáticas.

Suponha que meu Linux tenha duas interfaces de rede, a primeira tem uma conexão à Internet cuja rede é 172.26.0.0 e a segunda (10.0.0.0) tem alguns computadores de outra rede local. Se quisermos rotear pacotes para essa outra rede, podemos usar:

route add -net 10.0.0.0 netmask 255.0.0.0 gw 172.26.0.8

Em geral, é:

route add -net REDDESTINO netmask MASCARA gw IPDELLINUX

se dermos rota -n independente de esta rede existir ou não, esse roteamento será corrigido em nossa tabela.

Captura de tela de 2014-09-30 18:31:35

Se quisermos eliminar o referido roteamento, podemos usar

route del -net 10.0.0.0 netmask 255.0.0.0

iptables.

Basicamente, o iptables é usado para filtrar pacotes de saída, entrada ou outros, o que o torna uma ótima ferramenta para gerenciar o tráfego de nossa rede. Bem, iptables, assim como nos permite filtrar o tráfego do mesmo computador, também nos permite filtrar o tráfego que passa por ele. (Encaminhamento). Os iptables podem ser divididos em tabelas, strings e ações.

  • Pranchas:  basicamente, pode haver duas tabelas, filtro, para filtrar pacotes e  nat para traduzir endereços, ou seja, para passar de uma rede para outra.
  • Correntes: A cadeia se refere ao tipo de tráfego que queremos filtrar ou nadar, ou seja, a qual tráfego vamos aplicar as tabelas? e eles podem ser:  INPUT : Tráfego de entrada, SAÍDA: tráfego de saída ou FRENTE: Tráfego que passa por ele, mas não é sua própria conexão.
  • Também pode aparecer PÓS-ROTEAMENTO, que é usado para tratar o pacote de uma determinada maneira após ele ter sido roteado.
  • Ações: Ações são basicamente as ações a serem realizadas com a corrente. Esta ação pode ser SOLTA, que apenas destrói esse tráfego ou ACEITAR. que permite que o tráfego faça essa ação.

As regras IPTABLES são salvas e executadas na ordem em que foram criadas e, se uma regra excluir uma regra anterior, a última regra da ordem sempre será aplicada.

Políticas de firewall.

Em geral, os firewalls funcionam naturalmente de duas maneiras:

  1. Permitir todo o tráfego, exceto ou
  2. Não permitir nenhum tráfego, exceto ...

Para aplicar políticas, use IPTABLES - P ACTION CHAIN

Onde a string representa o tipo de tráfego (INPUT, OUTPUT, FORWARD, POSTROUTING ...) e a ação é DROP OR ACCEPT.

Vejamos um exemplo.

Captura de tela de 2014-09-30 18:53:23

Aqui vemos que a princípio consegui pingar, depois disse ao IPTABLES que todo o tráfego de OUTPUT estava DROP ou não permitido. Então eu disse a IPTABLES para aceitar.

Se vamos construir um firewall do zero, devemos sempre aplicar as regras de (Não permitir nenhum tráfego, exceto ... Para isso, então aplicamos as regras

iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP
Se essas políticas se aplicarem, eles não terão nenhum tipo de conexão
.

Para retornar, escrevemos o mesmo e substituímos DROP por ACCEPT.

Neste ponto, como todo o tráfego é negado, começamos a dizer ao nosso IPTABLES que tráfego ele pode ter.

A sintaxe é:

iptables -A cadena -s ip_orgigen -d ip_destino -p protocolo --dport puerto -j acción

Onde:

String = INPUT, OUTPUT ou FORWARD

origin_ip = Origem dos pacotes, pode ser um único IP ou uma rede e neste caso devemos especificar a máscara).

destination_ip = para onde os pacotes estão indo. pode ser um único IP ou uma rede e neste caso devemos especificar a máscara).

protocolo = indica o protocolo usado pelos pacotes (icmp, tcp, udp ...)

porta = porto de destino do tráfego.

ação = DROP ou ACCEPT.

Exemplo:

Captura de tela de 2014-09-30 19:26:41

TODAS as políticas restritas se aplicam.

Captura de tela de 2014-09-30 19:27:42

Em seguida, adicionamos as regras para poder ter tráfego pela porta 80 HTTP e 443 HTTPS, com o protocolo TCP. Então a porta 53 é aplicada para o cliente DNS resolver os domínios, caso contrário você não vai navegar. Isso funciona com o protocolo udp.

A linha:

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

O motivo é o seguinte: Quando você faz uma solicitação HTTP, por exemplo, você se conecta à porta 80 do servidor, mas o servidor para retornar as informações precisa se conectar a você por qualquer porta. (Geralmente maior que 1024).

Como todas as nossas portas estão fechadas, isso não será alcançado a menos que abramos todas as portas acima de 1024 (má ideia). O que isso diz é que todo o tráfego de entrada proveniente de uma conexão que eu mesmo estabeleci é aceito. Quer dizer, uma conexão que em princípio eu comecei.

Ao colocar OUTPUT nas regras, isso só se aplica ao equipamento em questão, se estivermos usando nosso equipamento como roteador para permitir essas conexões, devemos alterar OUTPUT para FORWARD. Como o tráfego passa pelo computador, mas não é iniciado por ele
Todas essas regras são excluídas após a reinicialização, portanto, você deve criar scripts para que sejam iniciados por padrão. Mas veremos isso no próximo

Espero que tenha gostado desta informação. Na próxima falarei sobre NAT, Proxy e scripts para Firewal.


Deixe um comentário

Seu endereço de email não será publicado. Campos obrigatórios são marcados com *

*

*

  1. Responsável pelos dados: Miguel Ángel Gatón
  2. Finalidade dos dados: Controle de SPAM, gerenciamento de comentários.
  3. Legitimação: Seu consentimento
  4. Comunicação de dados: Os dados não serão comunicados a terceiros, exceto por obrigação legal.
  5. Armazenamento de dados: banco de dados hospedado pela Occentus Networks (UE)
  6. Direitos: A qualquer momento você pode limitar, recuperar e excluir suas informações.

  1.   Roger Pinto dito

    Essa é a base que muitos empreendedores usam para fabricar seus próprios firewalls, por isso existem tantas marcas de firewalls com Linux embutido no mercado, algumas boas e outras nem tanto.

  2.   Heber dito

    Excelente artigo. Estou ansioso para a segunda parte.

  3.   Milton dito

    Explicação muito boa, me ajudou a entender a proxy do meu trabalho. Obrigado

  4.   Faustod dito

    Olá Jlcmux,

    Excelente, gostei muito, quando a outra parte estará disponível?

    Saudações e obrigado por compartilhar

    1.    @Jlcmux dito

      Obrigado pelo comentário.

      Mandei a outra parte ontem, no decorrer do dia acho que vão publicar.

      Saudações.

  5.   Israel dito

    Artigo muito bom amigo @ Jlcmux, realmente aprendi com ele desde que ele esclareceu algumas dúvidas que eu tinha há algum tempo, aliás você não se importaria de compartilhar o livro da fonte do artigo, o de Sébastien BOBILLIER, bom slau2s e agora to veja a 2ª parte, salu2s.

    1.    @Jlcmux dito

      Olá, obrigado por comentar Israel.

      Acontece que tenho o livro em forma física. Mas eu encontrei este link no Google Livros. http://books.google.com.co/books?id=zxASM3ii4GYC&pg=PA356&lpg=PA356&dq=S%C3%A9bastien+BOBILLIER+Linux+%E2%80%93+Administraci%C3%B3n+del+sistema+y+explotaci%C3%B3n+de+los+servicios+de+red#v=onepage&q=

      Acho que está completo.

  6.   Ariel dito

    Artigo muito bom, acrescento uma pergunta: Qual seria a vantagem de usar o linux como roteador, se houver, no que diz respeito a um hardware dedicado a ele? Ou é apenas para fazer exercícios? Eu sei que existem distros dedicadas, mas não sei se são para recuperar PCs antigos ou fornecer mais flexibilidade na configuração.

    1.    @Jlcmux dito

      Bem, acho que as vantagens e desvantagens dependem do cenário em que você vai implementar isso. Por que certamente você não vai comprar um UTM ou algo parecido para sua casa? E talvez para uma pequena empresa que também não pode pagar. Também é um bom exercício, pois ajuda a entender toda a lógica disso e você pode configurar melhor um FWall dedicado. Além disso, quase todos esses dispositivos realmente possuem Linux embarcado.

      Saudações.

  7.   Ariel dito

    Olá, uma pergunta, você pode gerar uma interface "artificial" no linux para roteamento semelhante entre redes? (estilo packet tracer) para trabalhar com máquinas virtuais? por exemplo, se eu tiver a eth0 (porque tenho uma única placa, é claro) posso criar a eth1 para fazer outra rede? Muito bom tutor!

    1.    elav. dito

      No Linux, você pode criar interfaces virtuais, é claro. Se você tiver eth0, pode ter eth0: 0, eth0: 1, eth0: 2 ... etc

  8.   chinoloco dito

    Tão bom, obrigado por compartilhar