Servidor Firewall Seguro
13 13UTC outubro 13UTC 2009
Firewall Iptables
O Firewall é um programa que como objetivo proteger a máquina contra acessos indesejados, tráfego indesejado, proteger serviços que estejam rodando na máquina e bloquear a passagem de coisas que você não deseja receber (como conexões vindas da Internet para sua segura rede local, evitando acesso aos dados corporativos de uma empresa ou a seus dados pessoais). No kernel do Linux 2.4, foi introduzido o firewall iptables (também chamado de netfilter) que substitui o ipchains dos kernels da série 2.2. Este novo firewall tem como vantagem ser muito estável (assim como o ipchains e ipfwadm), confiável, permitir muita flexibilidade na programação de regras pelo administrador do sistema, mais opções disponíveis ao administrador para controle de tráfego, controle independente do tráfego da rede local/entre redes/interfaces devido a nova organização das etapas de roteamento de pacotes.
O iptables é um firewall em nível de pacotes e funciona baseado no endereço/porta de origem/destino do pacote, prioridade, etc. Ele funciona através da comparação de regras para saber se um pacote tem ou não permissão para passar. Em firewalls mais restritivos, o pacote é bloqueado e registrado para que o administrador do sistema tenha conhecimento sobre o que está acontecendo em seu sistema.
Montando um firewall seguro
1 – Crie um arquivo chamado firewall.sh onde desejar, por padrão eu estou acostumado a criar em /opt
vi /opt/firewall.sh
2 – Insira as seguintes linhas no seu firewall:
#!/bin/bash
#Variáveis de Interfaces de rede
LAN=eth0
WAN=eth1
REDE=”192.168.0.0/24″
#Variáveis de Maquinas locais
DIRETOR_IP=192.168.0.126
DIRETOR_MAC=00:22:64:CB:1C:24
USUARIO_IP=192.168.0.5
USUARIO=00:14:2A:27:F9:CE
#Limpa as regras (Limpa todas as regras de iptables existentes no seu firewall)
iptables -F
iptables -F INPUT
iptables -F OUTPUT
iptables -F FORWARD
iptables -t mangle -F
iptables -t nat -F
iptables -X
#Define politica interna (Aqui ele define qual a política inicial do seu firewall, por padrão
#entrada de pacotes e comunicação entre as placas de rede são bloqueadas e saida do servidor liberado
#Embora a saira seja liberada os clientes deste servidor não poderão fazer nenhum tipo de navegação devido
#a comunicação entre as placas de rede estarem desablitadas
iptables -P INPUT DROP #Entrada
iptables -P OUTPUT ACCEPT #Saida
iptables -P FORWARD DROP #Comunitação entre placas
#Ativando Bloqueios
#Ativa bloqueio contra ping da morte
echo “0″ > /proc/sys/net/ipv4/icmp_echo_ignore_all
iptables -N PING-MORTE
iptables -A INPUT -p icmp –icmp-type echo-request -j PING-MORTE
iptables -A PING-MORTE -m limit –limit 1/s –limit-burst 4 -j RETURN
iptables -A PING-MORTE -j DROP
#Ativando bloqueio syn-flood
echo “0″ > /proc/sys/net/ipv4/tcp_syncookies
iptables -N syn-flood
iptables -A INPUT -i $WAN -p tcp –syn -j syn-flood
iptables -A syn-flood -m limit –limit 1/s –limit-burst 4 -j RETURN
iptables -A syn-flood -j DROP
#Ativando bloqueio SSH-Brut-Force
iptables -N SSH-BRUT-FORCE
iptables -A INPUT -i $WAN -p tcp –dport 22 -j SSH-BRUT-FORCE
iptables -A SSH-BRUT-FORCE -m limit –limit 1/s –limit-burst 4 -j RETURN
iptables -A SSH-BRUT-FORCE -j DROP
#Ativando bloqueio Anti-spoofings
for i in /proc/sys/net/ipv4/conf/*/rp_filter; do
echo 1 >$i
done
#Liberações
#Liberando acesso total a internet para o Diretor
iptables -A INPUT -s $DIRETOR_IP -m mac –mac-source $DIRETOR_MAC -j ACCEPT
iptables -A FORWARD -s $DIRETOR_IP -m mac –mac-source $DIRETOR_MAC -j ACCEPT
#Liberando acesso a internet via Proxy Squid
#Você pode liberar qualquer porta de acesso para esse usuário utilizando essas linhas
#podendo também liberar mais de uma porta nesta mesma linha, acrescentando o comando
#-m multport após a palavra tcp, e separando as portas por linhas
#Ex. iptables -A INPUT -p tcp -m multiport –dport 3128,5900 -s $USUARIO_IP -m mac –mac-source $USUARIO_MAC -j ACCEPT
iptables -A INPUT -p tcp –dport 3128 -s $USUARIO_IP -m mac –mac-source $USUARIO_MAC -j ACCEPT
iptables -A FORWARD -p tcp –dport 3128 -s $USUARIO_IP -m mac –mac-source $USUARIO_MAC -j ACCEPT
#Liberando DNS
#Essas linhas irão liberar o DNS tanto se o servidor for local ou remoto
iptables -A INPUT -p udp -s $REDE –dport 53 -j ACCEPT
iptables -A FORWARD -p udp -s $REDE –dport 53 -j ACCEPT
iptables -A INPUT -p tcp -s $REDE –dport 53 -j ACCEPT
iptables -A FORWARD -p tcp -s $REDE –dport 53 -j ACCEPT
#Liberando SAMBA, caso o samba for instalado no mesmo servidor de firewall
iptables -A INPUT -i $LAN -s $REDE -p tcp –dport 137:139 -j ACCEPT
iptables -A INPUT -i $LAN -s $REDE -p udp –dport 137:139 -j ACCEPT
#Liberando Acesso FTP, ser ser autenticado pelo squid
iptables -A INPUT -p tcp –dport 21 -s $REDE -d servidor.com.br -j ACCEPT
iptables -A FORWARD -p tcp –dport 21 -s $REDE -d servidor.com.br -j ACCEPT
#Liberando SSH para ser acessado de fora da empresa
iptables -A INPUT -p tcp –dport 22 -i $WAN -j ACCEPT
#Ativando ICMP para estabelecer conexao (PING)
iptables -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state –state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -p icmp -o $WAN -j ACCEPT
iptables -A INPUT -p icmp -j ACCEPT
#Compartilhando internet
iptables -t nat -A POSTROUTING -o $WAN -j MASQUERADE
echo “1″ > /proc/sys/net/ipv4/ip_forward
3 – De permissão de execução para este arquivo
chmod +x /opt/firewall.sh
4 – Adicione a linha onde esse arquivo se encontra dentro do /etc/rc.local
echo “/opt/firewall.sh” >> /etc/rc.local
5 – Feito isso seu firewall já esta funcionando com as regras acima.
Obs.1: Lembrando que todos esses comandos precisam ser executados como ROOT ou como SUDO, caso contrário não irá funcionar
Obs.2: Você pode adicionar quantas variáveis quiser e utilizalas sempre que achar necessário.