Opções de firewall para o Ubuntu
Publicado em 16/04/2009 – 17:56por Carlos Morimoto
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:

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.

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:

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

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:

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.



17 respostas para “Opções de firewall para o Ubuntu”
Morimoto,
com a descontinuidade do K-7 comecei a testar o Big Linux que vem com o Firestarter, que não me agrada. Simplesmente eu adaptei o Kurumin-Firewall para o Big e estou bastante satisfeito com o resultado.
Voce recomendaria fazer o mesmo para o ubuntu?
Também fiz algumas adaptações do kurumin-firewall. No ubuntu e kubuntu já foi testado e funciona:
http://groups.google.com/group/kurumix/web/krm-firewall_2.0_i386.deb
Pode ser carregado no boot como serviço do sistema, e na hora de instalar o pacote .deb o firewall ja vai estar funcionando com a configuração mínima, sem abrir para a rede interna, tudo igual que fazia o kurumin-firewall, somente que com mais recursos.
Depois vc. poder abrir, fechar e/ou redirecionar portas manualmente. O pacote deb inclui algumas ferramentas de edição elementares.
Quando você instala o Firestarter, ele vem com a opção de filtragem de ICMP desabilitada.
Com isso, o micro pode responder um ping na net.
Para evitar isso, você tem que ir em Editar>Preferências>Filtragem ICMP>Habilitar filtragem de ICMP
O ufw não conta?
Ele já vem instalado por padrão, não é um firestarter da vida, nem vem com interface gráfica, mas facilita um pouco pra quem quer começar com o iptables.
Pra quem não gosta de interface gráfica e o firestarter não atende às necessidades (se você fica chaveando entre conexão com fio e sem fio, por exemplo), o GuardDog é uma ótima opção de firewall avançado. Gosto mais do firestarter graças à possibilidade de ir no "log" dele e verificar facilmente qual porta foi bloqueada, podendo liberá-la clicando com o botão direito no evento registrado, o que é muito prático. Mas o GuardDog é mais poderoso, embora mais difícil de usar.
Acima, leia-se "pra quem GOSTA de interface gráfica", he, he :-p
gosto mais do ufw.
tenho ele ativo
Já usei o Firestarter, só acho uma coisa chata, é o lance dele pedir senha toda vez q é aberto. quando tentei mudar isso, quase ferrei o sistema, mas é um bom soft.
Embora essas opções de firewall sejam bastante práticas, aina prefiro usar o bom e velho Shorewall (http://www.shorewall.net), desde simples estações até servidores de redes mais complexos com DMZ.
Qual a opinião de vocês a respeito do GuardDog? Quando instalei aqui o Kurumin NG, senti falta do firewall. Como não vinha nada incluído, procurei e o que mais me agradou foi o GuardDog. O que vocês dizem sobre ele? Grato.
A dificuldade do usuário final que usa apenas uma máquina cliente, é que na internet não existe documentação voltada para ele, exceto algumas dicas do Carlos aqui no GDH.
Tudo o que aparece no google é voltado para redes e servidores, e quando há algo pra desktop cliente, não explica como salvar, onde, e como se ativa.
AndersonTS, como eu disse acima, uso o GuardDog quando necessito de recursos um pouco mais avançados. Ele tem uma ótima documentação no help dele, o que compensa um pouco o fato de o luizimarins dizer que não há tanta informação na Internet sobre a instalação de firewalls em desktops, o que eu não concordo totalmente. Para aplicações normais, eu usaria o Firestarter.
Quanto ao que o Asghan disse a respeito do Firestarter pedir a senha a toda hora, isso é um recurso de segurança do Linux, relacionado ao sudo. Eu não mudaria isso, mas é possível. Para evitar "quase ferrar o sistema", faça ediçoes no arquivo de configuração do sudo somente usando o visudo.
Vou ficando por aqui que isto não é um forum, he, he…
Eu também estou usando um BiGLinux que é o substituto ideal para o kuurmin7, pois estou apto com kommander, scripts e tudo que o Kurumin7 oferecia. E uma das coisas foi e é o kurumin-firewall que a partir dele fiquei conhecendo mais o iptables e acabei estudando mais a fundo. Então, eu mesmo criei meus scripts e configurei o Kommander, Xdialog para facilitar minha vida… É isto aí… Vida longa ao Kurumin….
É por isso que o GDH é meu site favorito para tirar dúvidas. E vc. Marimoto está sempre de parabéns com seus artigos. Este agora me ajudou a fazer algo que já vinha a meses tentando. OU seja, compartilhar a internet 3G na rede local. Com esta regra de iptables estou conectado com o modem 3G e agora tenho um ou pc. com o Windows XP também conectado via rede local. Parabéns pelo artigo, desde que ouvi o nome linux pela primeira vez em 1998, me apaixonei por ele sem nunca ter usado. Depois que o vi pela primeira vez na tela do meu pc, não tive dúvidas que este SO era o que eu iria utilizar sempre. E com uma comunidade que sempre está pronta a ajudar, mesmo sem a gente pedir, melhor ainda.
Instalei a poucos dias o Ubuntu 9.04 e não achei o firewall instalei o Firetarter numa boa e está funcionando bem
Calouro chegando.
Estou iniciando em livre, tenho um projeto para executar e quero saber: quais dist rodam em
rede? onde encontro material em portugues?
para rede seria: red hat mandriva e conectiva?
ou tem outros?
ola Morimoto,.sou iniciante em linux e gostaria de saber como digitar esses dois comandos que indicaste:=================================== iptables -A INPUT -i lo -j ACCEPT===================== iptables -A INPUT -p tcp --syn -j DROP.obrigado