#!/bin/sh
#
# Script de configuracao do firewall
#
# Regras do Firewall
iptables -F
iptables -F -t nat
iptables -Z
iptables -X
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
# Libera o INPUT para a interface de loopback
iptables -A INPUT -p ALL -s 127.0.0.1 -i lo -j ACCEPT
iptables -A INPUT -p ALL -s 192.168.0.1 -i lo -j ACCEPT
iptables -A INPUT -p ALL -s 200.200.200.200 -i lo -j ACCEPT
# Para conexao estabelecida ou relacionada deve ser mantida
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
# Libera as respostas do DNS para o firewall
iptables -A INPUT -p udp -s 200.204.0.10 --sport 53 -d 200.200.200.200 -j ACCEPT
iptables -A INPUT -p udp -s 200.204.0.138 --sport 53 -d 200.200.200.200 -j ACCEPT
# Trava os pacotes fragmentados
iptables -A INPUT -i eth1 -f -j DROP
# Evitando o Spoofing
iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP
iptables -A INPUT -i eth1 -s 172.16.0.0/12 -j DROP
iptables -A INPUT -i eth1 -s 192.168.0.0/16 -j DROP
iptables -A INPUT -i eth1 -s 224.0.0.0/4 -j DROP
iptables -A INPUT -i eth1 -s 240.0.0.0/5 -j DROP
# Liberando o ping para a rede interna
iptables -A INPUT -p icmp --icmp-type 8 -i eth0 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT
# Libera o acesso ao squid para a rede interna ...
iptables -A INPUT -p tcp -i eth0 -s 192.168.0.0/24 --dport 3128 -j ACCEPT
# ... e tambem ao servidor dns
iptables -A INPUT -p udp -i eth0 -s 192.168.0.0/24 --dport 53 -j ACCEPT
# Libera o acesso ao ssh para a rede interna ...
iptables -A INPUT -p tcp -s 192.168.0.0/24 -i eth0 --dport 22 -j ACCEPT
# Libera o acesso ao Webmin para a rede interna
iptables -A INPUT -p tcp -s 192.168.0.0/24 -i eth0 --dport 10000 -j ACCEPT
# Libera o envio e recebimento de e-mails deste servidor ...
# ... para a rede interna ...
iptables -A INPUT -p tcp -s 192.168.0.0/24 -i eth0 --dport 25 -j ACCEPT
iptables -A INPUT -p tcp -s 192.168.0.0/24 -i eth0 --dport 110 -j ACCEPT
# ... e para a rede externa ...
iptables -A INPUT -p tcp --dport 110 -i eth1 -j ACCEPT
iptables -A INPUT -p tcp --dport 25 -i eth1 -j ACCEPT
# Libera resposta de servidores www para o squid ...
iptables -A INPUT -p tcp -i eth1 --sport 80 -j ACCEPT
iptables -A INPUT -p tcp -i eth1 --sport 443 -j ACCEPT
iptables -A INPUT -p tcp -i eth1 --sport 20 -j ACCEPT
iptables -A INPUT -p udp -i eth1 --sport 21 -j ACCEPT
# Travando inutilidades
iptables -A INPUT -p tcp --dport 3128 -j REJECT --reject-with tcp-reset
iptables -A INPUT -j DROP
# Barra pesada com o FORWARD
iptables -A FORWARD -m state --state INVALID -j DROP
# Aceitando as conexoes estabelecidas e relacionadas com outras feitas
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
# "Dropar" o restante e logar
iptables -A FORWARD -j DROP
# Proxy transparente
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 3128
iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-ports 3128