O objetivo deste mini tutorial é mostrar a criação de um firewall iptables básico, baseado na idéia de bloquear tudo e depois liberar apenas o que é necessário.
“Existem diversos scripts de firewall pela internet, muitas vezes mirabolantes e cheio de recursos. Isto é bom pois sempre podemos aproveitar algo. O problema é que muitas vezes o que as pessoas procuram um firewall básico, na qual possa adaptar às suas próprias necessidades.
Pensando nisso, resolvi mostrar um firewall realmente básico, mas que além de ser plenamente funcional, explica o conceito que por trás da liberação e bloqueio de portas, com intuito de servir de alicerce para um firewall mais amplo e customizado”
Primeiro, precisamos definir a política padrão do iptables.
iptables -P INPUT DROP |
Com os comandos acima eu disse que por padrão, nada entra ou atravessa uma interface de rede sem que tenha sido autorizado pelo firewall linux. Aconselho trabalhar desta forma, pois assim você mantém o controle do que está acontecendo com seu servidor.
Como pode notar, OUTPUT eu deixei como ACCEPT, pois são as conexão que se originam de dentro do servidor para fora, logo não tem necessidade de ser bloqueado (afinal de contas é de se esperar que enquanto administrador, você tenha consciencia das conexões que está gerenciando).
Passemos para as linhas seguintes:
Através do comando modprobe, nós vamos carregar os módulos ip_nat (em alguns lugares iptable_nat) . Este módulo é responsável por dar ao servidor a possibilidade de traduzir pacotes (nat), logo, muito importante de se carregar.
echo 1 > /proc/sys/net/ipv4/ip_forward
Por padrão, as distribuições linux vêm com o redirecionamento de ips desativado. No caso de você estar configurando um firewall router, firewall com vpn ou algo assim (motivo pelo qual provavelmente você está lendo isso), é preciso ativa-lo.
iptables -t filter -A INPUT -p tcp -m -tcp –dport 80 -j ACCEPT
Este modelo de firewall com iptables, como visto, bloqueia tudo por padrão, sendo necessário que criemos as excessões. Uma excessão seria esta mostrada acima, que libera a entrada do tráfego pela porta 80.
Você poderia repetir várias vezes esta linha trocando apenas a porta, mas vou mostrar como fazer um looping que torne as coisas mais fáceis e menos repetitivas.
|
|
Neste exemplo acima, eu crio um looping para que a regra do iptables libere o acesso à porta 80. Utilize este looping e adicione as portas que necessita. Veja algumas das principais portas:
20 e 21 ftp
Libere-as caso tenha um servidor ftp instalado no servidor. Caso precise acessar ftp externamente, será usada uma regra de FORWARD.
22 ssh
Permite acesso a conexões SSH. O acesso a ssh fora do servidor é feito mediante regra de FORWARD
25, 143, 445 e 995 e-mail
Essas portas são utilizadas por servidores de e-mail, como postfix, qmail. Mesmo que não tenha um destes instalado, é bom gravar estas portas, pois são necessários redirecionamentos para acessar de pop e imap de servidores na internet.
80 http.
Utilizada por servidor web, como apache e httpd. Também é necessário permitir seu acesso caso vá usar um proxy server, como squid
137,138,139 netbios. Estas portas são necessárias para permitir que se trabalhe com netbios, um protocolo de comunicação para redes simples, que utiliza nomes para resolver hosts. Considero muito importante caso vá se trabalhar com Samba.
443 https. Porta http segura. Quem trabalha com servidor web e proxy, precisa liberar essa porta caso contrário não poderá acessar conexões seguras (como bancos, orkut, gmail)
445 CIFS
Necessário pra quem instalar SAMBA.
3128
A porta do mais famoso proxy server do linux, o squid.
Essas portas mostradas acima são as mais comuns a se liberar em um firewall. Voltando ao looping acima, veja como ficaria com todas as portas liberadas:
|
|
Simples, não? Você pode adicionar as portas tcp que precise liberar, de maneira simples e indolor. Observe que aqui liberamos as portas tcp apenas. Crie um novo loop caso tenha que liberar mais portas, porém udp .. Geralmente a única porta udp que precisamos liberar é a 53, que é responsável por lidar com consultas dns. Sendo assim, criaríamos a regra abaixo:
|
|
Falta apenas liberarmos o ping, que é o método mais comum de consultar um computador na rede. Porém o protocolo icmp (muitas vezes chamado de protocolo do ping) é muito amplo, não sendo necessário que seja liberado por completo. Neste caso vamos apenas liberar o icmp do tipo 8 (echo) e 0 (echo reply), que são suficientes para se fazer um ping.
|
iptables -t filter -A INPUT -p icmp -m icmp –icmp-type 8 -j ACCEPT |
Pronto. Agora já liberamos as portas que precisávamos e o ping. Só o que precisamos é liberar o forward, que são as conexões que atravessam as interfaces de rede, como conexões https e pop3.
|
|
Note que na regra acima, eu não especifiquei interfaces, sendo assim, o acesso estaria liberado tanto de eth1 para eth0 como vice-versa. Se eu quisesse especificar as interfaces, poderia fazer da seguinte forma:
|
|
Nesta regra eu libero apenas o acesso vindo da eth0 (-i) com destino a eth1 (-o).
Para fechar, utilize estas duas regrinhas para aceitar automaticamente todas as conexões já relacionadas e estabelecidas, Desta forma, quando você autoriza uma conexão vinda de uma fonte A para um destino B, automaticamente a resposta desta conexão será aceita, sem a necessidade de criar regras novas para isso:
|
iptables -t filter -A INPUT -p tcp -m state –state RELATED,ESTABLISHED -j ACCEPT |
Bingo! Terminamos nosso pequeno e simples script de firewall. Vejamos ele na íntegra. Com os conceitos explicados acima, fica fácil adapta-lo e expandi-lo conforme as suas necessidades.
|
iptables -P INPUT DROP for PORTA in 20 21 22 25 80 137 138 139 143 ; iptables -t filter -A INPUT -p udp -m -udp –dport 53 -j ACCEPT |
fonte:http://jeferson.info