Configurando um Firewall de A a Z. Parte 2
Estamos de volta com a segunda parte da nossa série. Nesta etapa vamos configurar um firewall básico de forma que nossa rede esteja protegia e os usuários possam utilizar Internet.
Antes de iniciarmos temos que levantar as redes e os serviços que serão disponibilizados. Primeiro, em relação as redes, nosso servidor tem três interfaces, uma para a rede interna, outra para a Internet e mais uma para uma DMZ que iremos criar. Se você não tem três interfaces de rede em seu computador não se preocupe, a DMZ que iremos criar será apenas para ilustrar um cenário que, um dia, você pode enfrentar.
Nossa rede está disposta da seguinte maneira:
Rede Local (192.168.0.0/255.255.255.0)————DMZ com WWW, Email (172.16.0.0)
———————-(192.168.0.254, 172.16.0.1) Servidor -> Internet
Os serviços disponíveis para os usuários da rede serão WWW, FTP, EMail, Messenger e Skype.
Existem duas formas de atuarmos, uma é bloquear tudo e liberarmos apenas a utilização destes serviços. Neste caso surge um problema, caso o usuário queira utilizar o serviço de câmeras do Messenger, pois este utiliza uma variedade muito grande de portas de forma aleatória. A outra maneira é liberar tudo, e bloquearmos apenas aquilo que não pode ser utilizado.
Bom, eu sempre gosto de bloquear tudo e liberar o resto depois. Mesmo que libere a rede toda!
A tabela de ip´s que vamos utilizar para filtrar tudo com o comando iptables é formada por três tabelas, cada uma com suas respectivas cadeias. As tabelas e cadeias são:
filter – Esta é a tabela padrão, contém 3 chains:
- INPUT – Dados que chegam a máquina
- OUTPUT – Dados que saem da máquina
- FORWARD – Dados que são redirecionados para outra interface de rede ou outra máquina
nat – Dados mascarados como masquerading, source nat, destination nat, port forwarding, proxy transparente. Possui 3 chains:
- PREROUTING – Pacotes precisam ser modificados logo que chegam. É o chain ideal para realização de DNAT e redirecionamento de portas.
- OUTPUT – Pacotes gerados localmente precisam ser modificados antes de serem roteados. Este chain somente é consultado para conexões que se originam de IPs de interfaces locais.
- POSTROUTING – Pacotes que precisam ser modificados após o tratamento de roteamento. É o chain ideal para realização de SNAT e IP Masquerading.
mangle – Utilizada para alterações especiais de pacotes. Possui 2 chains padrões:
- INPUT – Consultado quando os pacotes precisam ser modificados antes de serem enviados para o chain INPUT da tabela filter.
- FORWARD – Consultado quando os pacotes precisam ser modificados antes de serem enviados para o chain FORWARD da tabela filter.
- PREROUTING – Consultado quando os pacotes precisam ser modificados antes de ser enviados para o chain PREROUTING da tabela nat.
- POSTROUTING – Consultado quando os pacotes precisam ser modificados antes de serem enviados para o chain POSTROUTING da tabela nat.
- OUTPUT – Consultado quando os pacotes precisam ser modificados antes de serem enviados para o chain OUTPUT da tabela nat.
Vamos começar limpando qualquer regra e definindo as políticas a serem utilizadas no nosso firewall. Caso não seja indicada qual tabela você está utilizando, o iptables assume que será utilizada a tabela filter.
# iptables -F
# iptables -t nat -F
# iptables -t mangle -F
# iptables -P INPUT DROP
# iptables -P FORWARD DROP
# iptables -P OUTPUT ACCEPT
Agora vamos liberar o acesso da rede interna ao nosso firewall. A interface de rede que responde a internet é a eth0, a da rede interna é a eth1, e a interface da DMZ é a eth2.
# iptables -A INPUT -i eth1 -s 192.168.0.0/24 -j ACCEPT
# iptables -A INPUT -i eth2 -s 172.16.0.0/24 -j ACCEPT
Desta forma os pacotes vindos da minha rede, e que entram exclusivamente pela interface correta serão aceitos.
Temos que liberar, também, a entrada de conexões geradas internamente. Ou seja, aceite os pacotes de conexões que eu inicie, como “me entregue o site do google!”.
# iptables -A INPUT -i eth0 -m state –state ESTABLISHED,RELATED -j ACCEPT
Como ainda estamos na parte básica do firewall, nosso forward será, também básico, e seguirá as regras do INPUT.
# iptables -A FORWARD -i eth1 -s 192.168.0.0/24 -j ACCEPT
# iptables -A FORWARD -i eth2 -s 172.16.0.0/24 -j ACCEPT
# iptables -A FORWARD -i eth0 -m state –state ESTABLISHED,RELATED -j ACCEPT
Agora nossos usuários precisam ter acesso a Internet, então teremos que mascarar a rede e ativar o roteamento.
# iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE
# iptables -t nat -A POSTROUTING -s 172.16.0.0/24 -j MASQUERADE
# echo 1 > /proc/sys/net/ipv4/ip_forward
Finalmente vamos configurar o acesso a DMZ. São dois serviços rodando no IP 172.16.0.2. Os serviços são WWW (porta 80), POP3 (porta 110) e SMTP (porta 25).
# iptables -A INPUT -i eth0 -p tcp –dport 80 -j ACCEPT
# iptables -A INPUT -i eth0 -p tcp –dport 25 -j ACCEPT
# iptables -A INPUT -i eth0 -p tcp –dport 110 -j ACCEPT
# iptables -t nat -A PREROUTING -p tcp –dport 80 -j DNAT –to 172.16.0.2:80
# iptables -t nat -A PREROUTING -p tcp –dport 25 -j DNAT –to 172.16.0.2:25
# iptables -t nat -A PREROUTING -p tcp –dport 110 -j DNAT –to 172.16.0.2:110
Agora todos já devem ter condições de acessar a Internet através do nosso firewall. Vamos resumir os comandos do iptables.
(preparando as regras)
# iptables -F
# iptables -t nat -F
# iptables -t mangle -F
# iptables -P INPUT DROP
# iptables -P FORWARD DROP
# iptables -P OUTPUT ACCEPT
(Aceitando os pacotes da rede interna e os gerados internamente)
# iptables -A INPUT -i eth1 -s 192.168.0.0/24 -j ACCEPT
# iptables -A INPUT -i eth2 -s 172.16.0.0/24 -j ACCEPT
# iptables -A INPUT -i eth0 -m state –state ESTABLISHED,RELATED -j ACCEPT
(Habilitando a passagem de pacotes entre as redes e a internet)
# iptables -A FORWARD -i eth1 -s 192.168.0.0/24 -j ACCEPT
# iptables -A FORWARD -i eth2 -s 172.16.0.0/24 -j ACCEPT
# iptables -A FORWARD -i eth0 -m state –state ESTABLISHED,RELATED -j ACCEPT
(mascarando as redes e habilitando o acesso a internet)
# iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE
# iptables -t nat -A POSTROUTING -s 172.16.0.0/24 -j MASQUERADE
# echo 1 > /proc/sys/net/ipv4/ip_forward
(Liberando o acesso aos serviços da DMZ)
# iptables -A INPUT -i eth0 -p tcp –dport 80 -j ACCEPT
# iptables -A INPUT -i eth0 -p tcp –dport 25 -j ACCEPT
# iptables -A INPUT -i eth0 -p tcp –dport 110 -j ACCEPT
# iptables -t nat -A PREROUTING -p tcp –dport 80 -j DNAT –to 172.16.0.2:80
# iptables -t nat -A PREROUTING -p tcp –dport 25 -j DNAT –to 172.16.0.2:25
# iptables -t nat -A PREROUTING -p tcp –dport 110 -j DNAT –to 172.16.0.2:110
Por hoje vamos ficar com esses comandos. No próximo artigo da série vamos ver algumas opções avançadas para deixar nosso sistema mais seguro.
Até a próxima.
Índice de Configurando um Firewall de A a Z
- Configurando um Firewall de A a Z. Parte 1
- Configurando um Firewall de A a Z. Parte 2
- Configurando um Firewall de A a Z. Parte 3
- Configurando um Firewall de A a Z. Parte 5
