Opções de firewall para o Ubuntu

Opções de firewall para o Ubuntu

Uma questão polêmica em torno do Ubuntu é o fato do sistema não incluir nenhum script ou utilitário de configuração de firewall por padrão. Segundo os desenvolvedores, o firewall não é necessário, pois na configuração padrão o sistema não mantém nenhum servidor ativo, fazendo com que a possibilidade de existir qualquer brecha de segurança seja pequena.

Mesmo assim, é sempre interessante manter um firewall ativo em um PC conectado diretamente à Internet. Você pode fazer isso escrevendo um script simples de firewall, que simplesmente bloqueie o acesso a todas as portas.

Um exemplo de firewall manual, que simplesmente fecha todas as portas, permitindo que você consiga acessar a rede e a internet, mas impedindo que outros micros acessem serviços ativos na sua máquina seria:

iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -p tcp –syn -j DROP

Estes são na verdade dois comandos de terminal, que ativam o Iptables (o firewall nativo do sistema, incluído no próprio kernel), permitindo que programas se comuniquem internamente usando a interface de loopback, mas bloqueando qualquer acesso externo. Pra desativar as regras, use o comando:

$ sudo iptables -F

Para permitir acessos provenientes dos micros da rede local, você inclui mais uma regra (antes das outras duas), especificando os micros dentro da faixa de endereços usada na rede local. Substitua o “192.168.0.0” pela faixa de endereços usada na sua):

iptables -A INPUT -p tcp -s 192.168.0.0/255.255.255.0 -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -p tcp –syn -j DROP

Se preferir, você pode também especificar a interface de rede usada na rede local no lugar da faixa de endereços, o que é mais adequado em casos em que você utiliza interfaces separadas para acessar a rede local e a Internet, como no caso de alguém que utiliza a interface eth0 (rede cabeada) para a rede local e um modem 3G (visto pelo sistema como a interface “ppp0”) para acesso à web. Nesse caso, a regra de firewall seria:

iptables -A INPUT -i eth0 -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -p tcp –syn -j DROP

Este é outro exemplo de configuração, um pouco mais elaborado. Ele utiliza uma regra baseada no parâmetro “-m state” para permitir apenas respostas a conexões iniciadas por você, bloqueando em seguida todas as portas. A vantagem sobre o exemplo anterior é que ele bloqueia também as portas UDP, oferecendo uma proteção mais completa:

iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state –state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp -j DROP
iptables -A INPUT -p udp -j DROP

Você pode também abrir portas específicas, ou intervalos de portas (como no caso das portas usadas pelo bittorrent ou por jogos multiplayer) adicionando a regra a seguir no início do script:

iptables -A INPUT -p tcp –dport 6881:6889 -j ACCEPT

A regra para especificar apenas uma porta é bastante similar:

iptables -A INPUT -p tcp –dport 22 -j ACCEPT

Você pode também repetir a regra parar abrir várias portas e intervalos de portas, conforme necessário.

Estes comandos podem ser executados diretamente no terminal. Para que a mudança torne-se definitiva, inclua-os no final do arquivo “/etc/init.d/bootmisc.sh“, antes do “exit 0”.

Outro uso comum para o firewall é compartilhar a conexão com a rede local. Este é um exemplo de script que compartilha uma conexão 3G (a interface “ppp0”), aceitando conexões provenientes dos micros da rede local (a interface “eth0” no exemplo) e bloqueando todas as conexões vindas da Internet, mantendo aberta apenas a porta 5060 UDP (usada para receber chamadas de VoIP no Ekiga):

echo “Ativando o Firewall.”

# Limpa as regras anteriores:
iptables -F
iptables -t nat -F

# Compartilha a conexão na interface ppp0:
modprobe iptable_nat
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

# Abre a porta 5060 UDP:
iptables -A INPUT -p udp –dport 5060 -j ACCEPT

# Permite pacotes de resposta:
iptables -A INPUT -m state –state RELATED,ESTABLISHED -j ACCEPT

# Permite conexões na interface de rede local e na interface lo:
iptables -A INPUT -i eth0 -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT

# Bloqueia as demais conexões:
iptables -A INPUT -p tcp -j DROP
iptables -A INPUT -p udp -j DROP

Naturalmente, configurar as regras manualmente só é necessário se você realmente gosta da linha de comando. Uma opção mais simples de usar e ao mesmo tempo bastante poderosa é o Firestarter, disponível via apt:

$ sudo apt-get install firestarter

Você pode executá-lo usando o comando “sudo firestarter” ou usando o ícone no “Aplicações > Ferramentas de Sistema > Firestarter”. Ele precisa ser sempre executado através do sudo, pois precisa de permissões de root para modificar as regras do Iptables e criar o serviço de sistema onde salva sua configuração.

Ao abrir o Firestarter pela primeira vez, é aberto um assistente que pede algumas informações básicas sobre a configuração da rede e oferece opções para compartilhar a conexão e ativar o firewall sob demanda, ao conectar usando uma conexão 3G (ou discada) ou via ADSL PPPoE.

Por padrão, uma vez aberto, o Firestarter bloqueia todas as portas e loga todas as tentativas de conexão, uma configuração bastante segura.

Sempre que alguém tenta abrir alguma conexão, seja a partir de outro micro da rede local ou via Internet, o ícone ao lado do relógio fica vermelho. Clicando sobre ele, a Interface do Firestarter é aberta, mostrando detalhes sobre a tentativa de acesso. Digo tentativa, pois por padrão o Firestarter vai bloquear a conexão, fazendo com que a outra pessoa dê com a cara na porta. Entretanto, clicando sobre a entrada, você tem a opção de autorizar futuros acessos:

img_html_m1f0fac3a

Usando a opção “Permitir serviço de entrada para a origem” faz com que daí em diante o endereço possa acessar a porta (o SSH no exemplo), sem disparar novamente o alarme. Como a regra fica vinculada ao IP, esta opção é útil apenas para micros dentro da rede local que estejam configurados para usar IP fixo.

A opção “Permitir conexões a partir da origem” faz com que o endereço em questão possa acessar qualquer serviço disponível na sua máquina, em qualquer porta, sem disparar o alarme, uma opção interessante para micros da rede local. Finalmente, a opção “Permitir serviço de entrada para todos” abre a porta do SSH para todo mundo, incluindo hosts da Internet.

Esta natureza “interativa” é justamente o grande diferencial do Firestarter, que faz com que ele seja atualmente a melhor opção de firewall para desktops em geral. Todas as regras adicionadas entram em vigor imediatamente e ficam acessíveis para modificação ou consulta na aba “Política”.

Uma vez ativado o firewall, as regras ficam ativas, mesmo que você feche a interface principal, mas você perde a possibilidade de monitorar as tentativas de acesso e aceitar conexões. O Firestarter fica residente na forma do serviço de sistema “firestarter”.

Para desabilitar o Firewall, não basta fechar a janela, nem mesmo o ícone ao lado do relógio. Fazendo isso você fecha a interface, mas o serviço continua ativo, com as regras ativas. Para desabilitar o Firewall você precisa realmente clicar no “Parar Firewall” dentro da janela principal.

img_html_m5bfd30f8

Outra opção de configurador gráfico é o Gufw (http://gufw.tuxfamily.org/pt/), um firewall voltado para a facilidade de uso, baseado no UFW (o “Uncomplicated Firewall”, que pode ser usado via linha de comando). Por oferecer menos opções, ele acaba sendo mais adequado que o Firestarter para uso por parte de pessoas não-técnicas, como em casos em que você instala o Ubuntu em PCs de familiares e amigos. Ele também pode ser instalado usando o apt:

$ sudo apt-get install gufw

Uma vez instalado o pacote, será criado um atalho para ele no “Sistema > Administração > Configuração de Firewall”. Assim como no caso do Firestarter, a interface é usada apenas para alterar a configuração do firewall. Uma vez ativado, ele continua ativo mesmo que a interface seja fechada.

O primeiro passo é marcar o “Firewall habilitado”, o que ativa o Gufw em modo restritivo, bloqueando todo o tráfego de entrada, mas permitindo o tráfego de saída; a clássica receita para firewalls destinados a micros desktop. A ideia é justamente oferecer um bom nível de segurança por padrão, a partir da qual você possa criar exceções usando as opções da interface.

A aba “Simples” permite especificar diretamente portas de entrada que devem ser liberadas. Você pode tanto especificar as portas pelos números, como em “22” ou “6889”, quanto pelo protocolo, como em “ssh” ou “ftp”. Usando o terceiro campo, você pode especificar se deve ser aberta a porta TCP, UDP ou ambas:

img_html_m1e33a43a

A maioria dos protocolos utiliza portas TCP, mas existem casos como o do SIP, que usa a porta 5060 UDP para receber chamadas. No caso dele, por exemplo, não adiantaria abrir apenas a porta 5060 TCP, já que não é ela a usada.

A aba “Pré-configurado” inclui algumas regras pontas para autorizar ou bloquear protocolos ou aplicativos específicos. No Ubuntu 8.10 o conjunto de regras disponíveis é bastante incompleto, por isso a utilidade é questionável, mas ela deve melhorar nas versões seguintes.

Concluindo, a aba “Avançado” permite definir regras com um pouco mais de liberdade, especificando endereços de origem e faixas de portas. Ela é um pouco contra-intuitiva, o que gera confusão.

O campo “De” permite especificar o endereço de origem das conexões, o que permite que você abra portas apenas para endereços específicos. Se um amigo precisa se conectar à sua máquina via SSH, por exemplo, você pode criar uma regra específica para ele, especificando o endereço no campo “De” e a porta 22 TCP no segundo campo do “Para”:

img_html_6b22d1a7

O primeiro campo do “Para” permite especificar o endereço da sua máquina onde o pacote será aceito. Ela é usada apenas em casos em que o PC possui duas ou mais interfaces de rede, como no clássico caso em que você usa uma placa para a rede local e outra para a Internet. Deixando o campo em branco, você permite conexões em qualquer uma das interfaces, mas ao especificar seu endereço de rede local, a regra passa a permitir apenas conexões a partir de outros PCs da rede, descartando as conexões vindas da Internet.

Existem dois campos para especificar a porta, pois o segundo é usado quando você precisa especificar um intervalo de portas. Um caso clássico é o bittorrent, que utiliza as portas da 6881 à 6889. Usando os dois campos, você pode abrir todo o intervalo de uma vez, sem precisar criar uma regra para cada porta:

img_html_m6584ed9e

Concluindo, nos menus de opções você encontra opções para salvar as regras em um arquivo de texto (útil caso precise usar a mesma configuração em várias máquinas) e também para exibir o ícone ao lado do relógio.

Sobre o Autor

Redes Sociais:

Deixe seu comentário

X