:. Configurando o Firewall no Kurumin

 Por Carlos E. Morimoto
 http://www.guiadohardware.net
 04/12/2003


O Linux de uma forma geral é relativamente imune a vírus, worms e trojans, que são a principal causa de invasões e dores de cabeça em geral no Windows. Isto não ocorre apenas por que o Windows é usado em mais máquinas e por isso um alvo maior, mas também por que os aplicativos disponíveis no Linux são pela média bem mais seguros.

Apenas um exemplo para não alongar muito:

Se alguém já tentou contabilizar os vírus que afetam o Outlook Express já deve ter desistido, o programa já foi tão exploitado durante sua história que a única solução parece ser substituído definitivamente. Mas afinal, por que um simples leitor de e-mails, que deveria mostrar apenas texto tem tantos problemas? Simples: por que mostra apenas texto! O Outlook Express vem com suporte a ActiveX, Java Script, VB Script, arquivos executáveis e toda sorte de "tecnologias" que são um prato cheio para criadores de vírus. Para cada buraco que é fechado aparecem dois.

Veja o caso do Kmail por exemplo. Ele abre os e-mails como texto puro por default, da forma como deve ser. Se você recebe um e-mail em html ele exibe um aviso e você clica num link para exibi-lo com a formatação, caso contrário ele apenas nostra o código, sem processar nada.

Caso você receba um anexo qualquer, novamente vale a mesma regra. Ele é visto como um arquivo de texto até que você o salve no HD e diga o que quer fazer com ele. Isto garante que mesmo que o Kmail tenha problemas de buffer overflow ou outros problemas, dificilmente eles serão explorados. O programa é fundamentalmente mais seguro.


Mesmo assim, brechas de segurança podem surgir onde menos se espera. Por exemplo, a alguns meses atrás foi descoberto um buffer overflow no servidor SSH, que poderia ser usado para desenvolver um exploit. Esta brecha não chegou a ser explorada, pois assim que a possível vulnerabilidade foi descoberta, uma correção foi rapidamente disponibilizada e a notícia se espelhou pelos sites de notícias. Antes que alguém tivesse tempo de escrever um exploit, a maior parte dos servidores do mundo já estavam seguros.

A moral da historia: é sempre muito melhor prevenir do que remediar e a melhor forma de se proteger contra brechas deste tipo é manter um firewall ativo.

O Kurumin vem com um script que escreve que (modestia à parte) faz um trabalho muito bom. Ative-o em: Iniciar > Configuração do Sistema > Compartilhar Conexão e Firewall > Ativar Kurumin Firewall.

As opções que comento aqui são as encontradas no script do Kurumin 2.11, se você está usando uma versão antiga instalada no HD, clique no "Iniciar > Instalar novos programas > Atualizar ícones mágicos" para baixar a versão mais recente do script.

Um firewall é um software que protege seu micro, bloqueando tentativas de invasão e conexão indevidas vindas da Internet, ao mesmo tempo em que tenta limitar o mínimo possível o seu acesso à Internet e os seus compartilhamentos com os outros micros da rede local.

Existem vários tipos de firewall. O firewall do Kurumin utiliza o Iptables, que é o firewall incluído no Kernel do Linux. Ele é um dos melhores (senão o melhor) firewall disponível atualmente, com uma enorme flexibilidade e excelente desempenho. Ao contrário da maioria das soluções para Windows, o Iptables consome um mínimo de processamento, não causando um impacto significativo no desempenho, mesmo em micros antigos. Você pode ativá-lo e desativá-lo a gosto, clicando nos ícones do menu, sem precisar reiniciar.

O script pode ser usado tanto com o Kurumin rodando a partir do CD quanto com ele instalado no HD. A idéia básica por trás do configurador é criar o que chamo de firewall de bloqueio. Ele segue uma idéia bastante simples: Você diz as portas que gostaria de abrir e ele fecha todas as demais. Ou seja, o firewall fecha por padrão todas as portas, com excessão das que você disser explicitamente que deseja manter abertas.

As portas são fechadas apenas para conexões de entrada, mas não para saída de dados. Isso significa que ninguém conseguirá se conectar no servidor de FTP que você esqueceu habilitado por exemplo, mas você conseguirá acessar a Internet normalmente, com poucas limitações.

Isso garante uma configuração de firewall bastante segura com um mínimo de dor de cabeça para você. Nas opções avançadas você tem acesso a opções úteis ao usar o Kurumin para compartilhar a conexão com a rede local, como por exemplo direcionar faixas de portas para micros da rede interna, fechar portas de saída de forma a bloquear o uso de programas como o ICQ e o MSN e assim por diante.

A primeira pergunta é

Você gostaria que o firewall permita conexões vindas da rede local? Isso permite que você compartilhe arquivos, impressoras e outros recursos com os micros da rede local, ao mesmo tempo em que continua protegido contra conexões vindas da Internet.

Esta opção é útil principalmente ao usar o Kurumin para compartilhar a conexão entre vários micros, usando duas placas de rede.

Neste caso, não se esqueça de ativar também o compartilhamento da conexão em Iniciar > Configuração do Sistema > Compartilhar Conexão e Firewall

Respondendo sim ele perguntará a faixa de endereços usada na sua rede local. Se você responder "192.168.0.0" significa que ele aceitará pacotes vindos de qualquer micro que use um endereço IP entre 192.168.0.1 e 192.168.0.254:

Em seguida você terá a opção de abrir portas TCP também para conexões vindas da Internet:

Você gostaria que o firewall permita conexões vindas de alguma porta específica, como por exemplo na porta 22, usada pelo servidor SSH vindas da internet?

Isto permitirá que você use o SSH, FTP ou outro servidor qualquer para acessar seu micro remotamente ou compartilhar arquivos com outras pessoas, mas abrirá uma possível brecha de segurança.

Se você não sabe do que estou falando, responda não.

Caso você responda não, então o firewall mantém todas as portas da conexão com a Internet fechadas. Ao responder sim você deve indicar uma a uma quais portas devem ficar abertas.

Lembre-se do exemplo do SSH: todo servidor disponível para a Internet é um risco potencial de segurança, por isso só abra as portas para os servidores que você realmente for utilizar.

Você pode abrir também as portas usadas pelo bittorrent (6881 à 6889) ou portas usadas por jogos multiplayer por exemplo.

O script gera regras para o iptables com base nas suas respostas. Estas regras são executadas quando você conclui a configuração do Firewall e continuam sendo ativadas durante o boot até que você explicitamente clique no "Desativar Kurumin Firewall".

Estas regras são armazenadas no arquivo /etc/init.d/kurumin-firewall, que é um arquivo de texto. Você pode verificar as regras e até mesmo altera-las manualmente sem precisar responder as perguntas do script todas novamente.

Se você abriu o firewall para conexões vindas da rede local e abriu a porta 22 para Internet por exemplo, o script ficará assim:

-----------------------

#!/bin/bash
# Script de configuração do iptables gerado pelo configurador do Kurumin
# Este script pode ser usado em outras distribuições Linux que utilizam o
# Kernel 2.4 em diante
# Por Carlos E. Morimoto

# Abre para uma faixa de endereços da rede local
iptables -A INPUT -p tcp --syn -s 192.168.0.0/255.255.255.0 -j ACCEPT

# Abre uma porta (inclusive para a Internet)
iptables -A INPUT -p tcp --destination-port 22 -j ACCEPT

# Ignora pings
echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_all

# Proteções diversas contra portscanners, ping of death, ataques DoS, etc.
iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
iptables -A FORWARD -p tcp -m limit --limit 1/s -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT
iptables -A FORWARD --protocol tcp --tcp-flags ALL SYN,ACK -j DROP
iptables -A FORWARD -m unclean -j DROP

# Abre para a interface de loopback.
# Esta regra é essencial para o KDE e outros programas gráficos
# funcionarem adequadamente.

iptables -A INPUT -p tcp --syn -s 127.0.0.1/255.0.0.0 -j ACCEPT

# Ignora qualquer pacote de entrada, vindo de qualquer endereço, a menos que especificado o contrário acima. Bloqueia tudo.

iptables -A INPUT -p tcp --syn -j DROP

-----------------------

As regras são auto explicativas. A receber qualquer conexão, vinda de qualquer endereço o firewall primeiro verifica todas estas regras, seqüencialmente, para decidir de o pacote passa ou não.

- Se o pacote vier da rede local ele é aceito

- Se o pacote for para porta 22 ele é aceito

- Se for um ping ele é recusado (de forma a dificultar um pouco para outros descobrirem se você está online).

- Se o pacote se encaixar dentro de uma das regras que protegem contra ataques ele é recusado. Sem conversa, um tiro na cabeça.

- Se o pacote vier da sua própria máquina (um programa tentando mostrar alguma coisa na tela por exemplo) ele é aceito

- Se o pacote for uma resposta a uma conexão que você iniciou, como por exemplo o servidor do guiadohardware.net enviando a página do site que você está acessando ele é aceito.

- Se o pacote não se encaixar em nenhuma das regras acima, ele é simplesmente descartado pelo firewall. Ele não entra na sua máquina e o emissor não recebe qualquer resposta. Ele não sabe se o pacote foi recebido ou não, fica no vácuo, o que dá a impressão de que o seu micro nem está online.


Depois das duas perguntas da versão básica, você tem a opção de acessar as opções avançadas do script. Elas permitem usar mais alguns truques do iptables, como direcionar portas e bloquear também portas de saída, para evitar que outros micros da sua rede interna usem o ICQ e o MSN por exemplo.

Antes de começar você precisa definir qual é a interface que está conectada na Internet e qual está conectada na rede local para que o script possa criar as regras corretamente. Você pode verificar isso rapidamente rodando o comando "sudo ifconfig". Em resumo:

Se você tem duas placas de rede então uma é a eth0 e a outra a eth1. Você vai saber qual está com o cabo da rede local logo que for configurar a rede.

Se você se conecta na Internet usando uma conexão via ADSL ou cabo com autenticação via PPPoE então o sistema utiliza uma interface virtual chamada ppp0 (como se fosse uma conexão via modem) no lugar de usar a localização correta da placa de rede.

Em seguida caímos na tela de opções. Lembre-se que as regras do iptables são processadas seqüencialmente, desde que as regras não conflitem entre sí, você pode criar quantas regras forem necessárias e em qualquer ordem.

A própria tela de opções fica em loop, permitindo ir adicionando opções até que você escolha a opção f:

Nós já conhecemos as opções a (adicionar uma faixa de endereços para a rede local) e a opção b (abrir uma porta do firewall). Elas são as mesmas opções que vimos na configuração inicial do Firewall.

Mas, a opção a tem mais uma função além de abrir o firewall para os micros da rede local. Imagine que você queira dar acesso aos micros da filial da sua empresa em Marabá, onde usam um link com o ip fixo 200.220.234.12. Você poderia abrir a faixa 200.220.234.0 de forma que o firewall permitisse acessos vindos de lá, mas continuasse bloqueando o restante. Você pode abrir para várias faixas de endereços distintas.

A opção c (Redirecionar uma faixa de portas para um micro da rede local) também é interessante.

Você deve lembrar que ao compartilhar uma conexão entre vários micros, apenas o servidor que está com a conexão recebe conexões vindas da Internet. Os micros da rede local acessam via NAT e apenas recebem respostas para conexões iniciadas por eles.

Mas, imagine que você queira que um servidor Web, escutando na porta 80 do micro 192.168.0.3 da rede local fique disponível para a Internet? É justamente isso que esta opção permite fazer.

Você pode direcionar uma porta ou faixa de portas do servidor para um micro da rede local, de forma que ele passe a receber as conexões vindas da Internet. Fazendo isso, quando o servidor receber uma conexão qualquer na porta 80 ele a repassará para o micro 192.168.0.3, de forma que emissor nem perceba que quem respondeu a solicitação foi outro servidor.

Esta opção pode ser usada também para permitir que os micros da rede local recebam chamadas do net meeting, joguem online e qualquer outra tarefa onde seja necessária manter uma determinada porta aberta.

A limitação é que continua existindo um única por 80, uma única porta 21, etc. De forma que apenas um micro da rede interna pode receber cada porta de cada vez.

Veja um exemplo de como redirecionar as portas 6881 à 6889 usadas pelo bittorrent para o micro 192.168.0.2 da rede local:

As opções d e e do configurador são opções de censura. Eu não gosto muito delas, mas parece que algumas pessoas acham muito importante limitar o que os outros podem fazer.

A opção d permite bloquear portas de saída, ou seja bloquear portas no sentido Rede local > Internet. Isso permite bloquear o uso de determinados programas que utilizem estas portas. O MSN por exemplo utiliza as portas 1863 e 5190 (é preciso bloquear as duas), se você bloqueá-las no firewall o MSN não conseguirá mais se conectar na rede em nenhum dos micros da rede local e nem mesmo a partir do próprio servidor.

A opção e é um batch que bloqueia várias portas usadas por programas P2P. Ela não é totalmente efetiva pois estes programas utilizam técnicas para burlar vários tipos de proteção, mas de qualquer forma o uso dessa opção deve dificultar um pouco as coisas.


Depois de terminar, pressione a tecla f para salvar todas as alterações. O script abrirá uma janela do kedit com o conteúdo do arquivo /etc/init.d/kurumin-firewall gerado para que você possa revisar as regras criadas e alterar qualquer coisa que achar necessária.

Fechando a janela o firewall já fica ativo e configurado para carregar automaticamente durante o boot.




Copyright 2003 Carlos E. Morimoto, http://www.guiadohardware.net - Todos os direitos reservados