Script para o netfilter (iptables)
Utilizando o 
iptables, elaborei um script para rodar na inicialização da máquina, para que não tenha que rodar todos os processos na mão e para fazer isto de forma mais automatizada.
Função do script:
-  Habilita o roteamento entre as interfaces de rede, para um servidor de acesso a Internet, carregando os módulos necessários para a execução do script. 
-  Limpa primeiramente as tabelas filter e nat, depois irá negar todo o tráfego das interfaces de rede, permitindo as conexões na interface localhost (loopback) para serviços que o servidor venha a rodar, e depois libera acesso a interface da rede local (LAN) com a liberação de alguns protocolos e portas de comunicação em cima dos protocolos icmp, udp e tcp. 
-  Exemplifica como estipular regras para que a conexão ao firewall se dê somente por uma única máquina na rede, que vai ser controlado pelo MAC Address desta máquina.
-  Libera acesso para a interface da Internet, com algumas portas específicas (DNS:53, http:80 e SMTP:25). 
-  Permite a saída da rede interna, habilitando o módulo state e também o mascaramento. 
-  Permite a entrada para a rede interna, caso seja necessário, colocar senão desconsidere esta parte.
-  Habilita a proteção contra o ping da morte.
-  Habilita a geração dos logs na tela do console.
Laboratório:
Este script é para se ter uma base, não é nenhuma receita de bolo.
Cada firewall terá sua particularidade.
Utilizei em meu laboratório o 
Fedora Core 4.0 com o 
kernel 2.6.
Abaixo, segue o script:
#!/bin/bash
echo
echo " Iniciando o FIREWALL"
echo
sleep 1
echo " Definindo variáveis"
IPTABLES="/usr/sbin/iptables"
INTERNA="192.168.0.1" # IP da placa interna
EXTERNA="10.1.1.3" # IP da placa externa
REDEINTERNA="192.168.0.0/24" # rede interna
REDEEXTERNA="10.1.1.0/24"
#echo " Habilitando o forward entre as interfaces"
#sleep 1
#echo "1" > /proc/sys/net/ipv4/ip_forward # habilitando o roteamento
echo " Carregando os módulos necessários"
sleep 1
/sbin/modprobe ip_conntrack
/sbin/modprobe ip_conntrack_ftp
/sbin/modprobe ip_nat_ftp
/sbin/modprobe ip_tables
echo " Limpando as regras da tabela nat"
sleep 1
$IPTABLES -t nat -F
$IPTABLES -t nat -X
$IPTABLES -t nat -Z
echo " Limpando as regras da tabela filter"
sleep 1
$IPTABLES -F
$IPTABLES -X
$IPTABLES -Z
echo " Definindo as polices"
sleep 1
$IPTABLES -P INPUT   DROP # drop nega tudo
$IPTABLES -P FORWARD DROP # ninguem passa pelo firewall
echo " Permitindo conexoes loopback"
# Liberando acessos para o próprio micro
sleep 1
$IPTABLES -A INPUT -s 127.0.0.1   -j ACCEPT
$IPTABLES -A INPUT -s $EXTERNA    -j ACCEPT
$IPTABLES -A INPUT -s $INTERNA    -j ACCEPT
echo " Permitindo conexoes para a placa interna"
sleep 1
$IPTABLES -A INPUT -d $INTERNA -p icmp -j ACCEPT # aceita ping
$IPTABLES -A INPUT -d $INTERNA -p tcp --dport   80 -j ACCEPT # http WEB
$IPTABLES -A INPUT -d $INTERNA -p tcp --dport  443 -j ACCEPT # https
$IPTABLES -A INPUT -d $INTERNA -p udp --dport  53 -j ACCEPT # dns
$IPTABLES -A INPUT -d $INTERNA -p tcp --dport  53 -j ACCEPT # dns
$IPTABLES -A INPUT -d $INTERNA -p tcp --dport  25 -j ACCEPT # SMTP
$IPTABLES -A INPUT -d $INTERNA -p tcp --dport  110 -j ACCEPT # POP3
$IPTABLES -A INPUT -d $INTERNA -p tcp --dport  143 -j ACCEPT # imap
$IPTABLES -A INPUT -d $INTERNA -p tcp --dport  143 -j ACCEPT # imap
$IPTABLES -A INPUT -d $INTERNA -p udp --dport  3128 -j ACCEPT # proxy
$IPTABLES -A INPUT -d $INTERNA -p tcp --dport  3128 -j ACCEPT # proxy
echo " Permitindo conexoes para a placa externa"
sleep 1
# Permitindo o acesso da internet para o firewall
$IPTABLES -A INPUT -d $EXTERNA -p udp --dport 53 -j ACCEPT
$IPTABLES -A INPUT -d $EXTERNA -p tcp --dport 53 -j ACCEPT
$IPTABLES -A INPUT -d $EXTERNA -p tcp --dport 25 -j ACCEPT
$IPTABLES -A INPUT -d $EXTERNA -p tcp --dport 80 -j ACCEPT
# Exemplo de conexão para a placa de rede externa via MAC Address
# $IPTABLES -A INPUT -d $EXTERNA  -m mac --mac-source 00:10:DC:55:D6:A9 -p tcp --dport 22  -j ACCEPT
# Exemplo de uma máquina externa (modem) para acessar a placa externa de 
# um único endereço externo não para toda a Internet
# $IPTABLES -A INPUT -s 10.1.1.1 -d $EXTERNA -p tcp --dport 20 -j ACCEPT
# $IPTABLES -A INPUT -s 10.1.1.1 -d $EXTERNA -p tcp --dport 21 -j ACCEPT
# $IPTABLES -A INPUT -s 10.1.1.1 -d $EXTERNA -p tcp --dport 22 -j ACCEPT
echo " Habilitando statefull"
sleep 1
$IPTABLES -A INPUT   -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
echo " Permitindo a saida da rede interna"
sleep 1
$IPTABLES -A FORWARD -s $REDEINTERNA -p icmp -j ACCEPT
# Libera web
$IPTABLES -A FORWARD -s $REDEINTERNA -p tcp --dport 80 -j ACCEPT
# Sem proxy
$IPTABLES -A FORWARD -s $REDEINTERNA -p udp --dport 80 -j ACCEPT
echo " Habilitando o masquerade"
sleep 1
# Habilitando o mascaramento
$IPTABLES -t nat -A POSTROUTING  -s $REDEINTERNA  -j MASQUERADE
echo " Permitindo a entrada para a rede interna"
sleep 1
$IPTABLES -A FORWARD -d 192.168.0.1 -p tcp --dport 3389 -j ACCEPT
$IPTABLES -A FORWARD -d 192.168.0.1 -p tcp --dport 20 -j ACCEPT
$IPTABLES -A FORWARD -d 192.168.0.1 -p tcp --dport 21 -j ACCEPT
echo " Redirecionando portas do Firewall para Web Server e FTP Server"
sleep 1
# NAT reverso
$IPTABLES -t nat -A PREROUTING  -d $EXTERNA -p tcp --dport 3389 -j DNAT --to 192.168.0.1
$IPTABLES -t nat -A PREROUTING  -d $EXTERNA -p tcp --dport 20 -j DNAT --to 192.168.0.1
$IPTABLES -t nat -A PREROUTING  -d $EXTERNA -p tcp --dport 21 -j DNAT --to 192.168.0.1
echo " Protecao contra ping da morte"
sleep 1
$IPTABLES -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
echo " Gerando Logs"
sleep 1
$IPTABLES -A INPUT -d $INTERNA -j LOG
$IPTABLES -A INPUT -d $EXTERNA -j LOG
$IPTABLES -A FORWARD -s $REDEINTERNA -j LOG
$IPTABLES -A FORWARD -d $REDEINTERNA -j LOG
 
Outras dicas deste autor
  Problemas com o Squid 2.5 no Fedora Core 4
Leitura recomendada 
  Kernel for Newbies - Fácil Assistente de Compilação do Kernel
  Jogo da Forca em Shell Script 
  Linux From Scratch
  SSH simultâneo para vários servidores
  O Mais Prático ou o Mais Rápido? Alternativa ao cut -c
 
  
Comentários
Nenhum comentário foi encontrado.