em Sem categoria

Exemplo de script de firewall para Netfilter Iptables

SCRIPT DE FIREWALL
=============

# !/bin/bash
# Script do Firewall / Gateway de Internet
# Utilizando iptables e squid

# Script iniciada automaticamente atraves do link simbolico em:
# /etc/rc.d/init.d/firewall -> chamado atraves do servico IPTABLES

# Fazendo Flush
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X

# Carregando os Modulos do Kernel
#modprobe ip_tables
#modprobe ipt_LOG

# Variaveis do firewall
CONFIAVEL1=192.168.0.30
CONFIAVEL2=192.168.0.50
REDEMASQ=192.168.0.0/24

# Pol?ica Padr? de Acesso
iptables -P INPUT DROP
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -A INPUT -s $REDEMASQ -p tcp –dport 3128 -j ACCEPT
#iptables -A INPUT -s $REDEMASQ -p tcp –dport 8080 -j ACCEPT
iptables -A INPUT -s $REDEMASQ -p tcp –dport 53 -j ACCEPT
iptables -A INPUT -s $REDEMASQ -p udp –dport 53 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp –dport 111 -j DROP
iptables -A INPUT -i eth0 -p tcp –dport 3128 -j DROP
# Habilitando a prote?o contra “TCP SYN COOKIES”
echo 1 > /proc/sys/net/ipv4/tcp_syncookies

# Ocultando a rota de origem dos pacotes (evita spoof)
for f in /proc/sys/net/ipv4/conf/*/accept_source_route; do
echo 0 > $f
done

# Evita atques de spoof (na rede interna)
# Em alguns casos de roteamento esta linha dever?ser desativada

for f in /proc/sys/net/ipv4/conf/*/rp_filter; do
echo 1 > $f
done

# Permisses de acesso ao firewall
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT
# Permite acesso de SSH via Internet
iptables -A INPUT -i eth0 -p tcp –dport 2222 -j ACCEPT

# Trocando o intervalo de portas locais
PORT_INI=61000
PORT_FIM=65095
echo $PORT_INI $PORT_FIM > /proc/sys/net/ipv4/ip_local_port_range

# Criando perfil de acesso administrativo (apenas por SSH)
iptables -N ADMIN
iptables -A ADMIN -i eth1 -p tcp –dport 2222 –syn -j LOG –log-level info
–log-prefix “[Acesso Admin]: “
iptables -A ADMIN -i eth1 -p tcp –dport 2222 –syn -j ACCEPT

iptables -A ADMIN -i eth0 -p tcp –dport 2222 –syn -j LOG –log-level info
–log-prefix “[Acesso Admin EXTERNO]: “
iptables -A ADMIN -i eth0 -p tcp –dport 2222 –syn -j ACCEPT

# Aplicando a permiss? de acesso ssh a CONFIAVEL 1 e 2
iptables -A INPUT -i eth1 -s $CONFIAVEL1 -j ADMIN
iptables -A INPUT -i eth1 -s $CONFIAVEL2 -j ADMIN

# Para tratar as quedas dos roteadores ADSL
GW=`route | grep default | awk ‘{print $2}’`
iptables -A INPUT -i eth0 -s 200.204.179.228 -p tcp ! –syn -j ACCEPT

# Compartilhando o acesso ?Internet
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -s $REDEMASQ -o eth0 -j MASQUERADE
#PROXY TRANSPARENTE
iptables -t nat -A PREROUTING -i eth1 -p tcp –dport 80 -j REDIRECT
–to-port 3128

# Permitindo requisi?es de DNS
iptables -A FORWARD -o eth0 -s $REDEMASQ -p tcp –dport 53 -j ACCEPT
iptables -A FORWARD -o eth0 -s $REDEMASQ -p udp –dport 53 -j ACCEPT

# Bloaquear pacotes com estado “novo/inv?ido” que saiam pela eth1
# Permitir pacotes com estado “estabelecido/reinicidente”
iptables -A FORWARD -o eth1 -m state –state NEW,INVALID -j DROP
iptables -A FORWARD -o eth1 -m state –state ESTABLISHED,RELATED -j ACCEPT

# Permitindo qualquer solicita?o de Internet que parta da rede
192.168.0.0/24
iptables -A FORWARD -i eth1 -s $REDEMASQ -j ACCEPT

# Bloqueia qualquer pacote (forward) que n? liberado por regras anteriores
iptables -A FORWARD -j DROP

# Bloqueando o logando sinais de ping ao firewall
iptables -N LPI
iptables -A LPI -m limit –limit 5/hour –limit-burst 3 -p icmp –icmp-type
echo-request -j LOG –log-level info –log-prefix “Log ping: “
iptables -A LPI -j REJECT –reject-with icmp-port-unreachable
iptables -A INPUT -p icmp –icmp-type echo-request -j LPI

# Bloqueia qualquer pacote (input) que n? liberado por regras anteriores
iptables -A INPUT -j DROP