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
Usando find para expandir listas de arquivos em argumentos de modo seguro
Backup em shell script na virtualização de máquinas (VMWare)
Filtrando sites navegados por máquinas no log do Squid
Shell script com Kdialog
Capturando range de IP via terminal
Comentários
Nenhum comentário foi encontrado.