reynatojr
(usa Ubuntu)
Enviado em 28/01/2010 - 16:01h
#!/bin/sh
############################################
# rc.firewall
# Criado por:
# Eduardo Vieira Mendes
# eduardovmendes@gmail.com
# LUS: 298813
# Uso: rc. firewall start|stop|restart
############################################
firewall_start() {
echo "==========================================="
echo "| :: SETANDO A CONFIGURAÇÃO DO IPTABLES :: |"
echo "==========================================="
# Limpa as regras
iptables -F INPUT
iptables -F OUTPUT
iptables -F FORWARD
echo "Limpando todas as regras .................[ OK ]"
# Definindo a política default das cadeias
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
echo "Setando as regras padrão .................[ OK ]"
# Desabilitando o tráfego IP
echo "0" > /proc/sys/net/ipv4/ip_forward
echo "Setando ip_foward ........................[ OK ]"
# Configurando a proteção anti-spoofing
for spoofing in /proc/sys/net/ipv4/conf/*/rp_filter; do
echo "1" > $spoofing
done
echo "Setando a proteção anti-spoofing .........[ OK ]"
# Impedindo que um atacante possa maliciosamente alterar alguma rota
echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects
echo "Setando anti-redirecionamento ............[ OK ]"
# Utilizado em diversos ataques, isso possibilita que o atacante determine o "caminho" que seu
# pacote vai percorrer (roteadores) até seu destino. Junto com spoof, isso se torna muito perigoso.
echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route
echo "Setando anti_source_route.................[ OK ]"
# Proteção contra responses bogus
echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
echo "Setando anti-bogus_response ..............[ OK ]"
# Proteção contra ataques de syn flood (inicio da conexão TCP). Tenta conter ataques de DoS.
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
echo "Setando proteção anti_synflood ...........[ OK ]"
# Carregando os modulos do iptables
modprobe ip_tables
modprobe iptable_filter
modprobe iptable_mangle
modprobe iptable_nat
modprobe ipt_MASQUERADE
echo "Carregando módulos do iptables ...........[ OK ]"
# Agora, vamos definir o que pode passar e o que não pode
# Cadeia de entrada
# LOCALHOST - ACEITA TODOS OS PACOTES
iptables -A INPUT -i lo -j ACCEPT
# PORTA 80 - ACEITA PARA A REDE LOCAL
iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT
# PORTA 22 - ACEITA PARA A REDE LOCAL
iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT
# No iptables, temos de dizer quais sockets são validos em uma conexão
iptables -A INPUT -m state --state ESTABLISHED,RELATED,NEW -j ACCEPT
echo "Setando regras para INPUT ................[ OK ]"
################################
# Cadeia de reenvio (FORWARD).
# Primeiro, ativar o mascaramento (nat).
iptables -t nat -F POSTROUTING
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
echo "Ativando mascaramento de IP ..............[ OK ]"
# Agora dizemos quem e o que pode acessar externamente
# No iptables, o controle do acesso a rede externa e feito na cadeia "FORWARD"
# PORTA 3128 - ACEITA PARA A REDE LOCAL
iptables -A FORWARD -i eth0 -p tcp --dport 3128 -j ACCEPT
# PORTA 53 - ACEITA PARA A REDE LOCAL
iptables -A FORWARD -i eth0 -p udp --dport 53 -j ACCEPT
# PORTA 110 - ACEITA PARA A REDE LOCAL
iptables -A FORWARD -i eth0 -p tcp --dport 110 -j ACCEPT
# PORTA 25 - ACEITA PARA A REDE LOCAL
iptables -A FORWARD -i eth0 -p tcp --dport 25 -j ACCEPT
# PORTA 21 - ACEITA PARA A REDE LOCAL
iptables -A FORWARD -i eth0 -p tcp --dport 21 -j ACCEPT
# No iptables, temos de dizer quais sockets são válidos em uma conexão
iptables -A FORWARD -m state --state ESTABLISHED,RELATED,NEW -j ACCEPT
echo "Setando regras para FOWARD ...............[ OK ]"
# Finalmente: Habilitando o trafego IP, entre as Interfaces de rede
echo "1" > /proc/sys/net/ipv4/ip_forward
echo "Setando ip_foward: ON ....................[ OK ]"
echo "Firewall configurado com sucesso .........[ OK ]"
echo
}
firewall_restart() {
firewall_start
}
firewall_stop() {
echo "==========================================="
echo "| :: DESLIGANDO FIREWALL :: |"
echo "==========================================="
# Limpa as regras
iptables -F INPUT
iptables -F OUTPUT
iptables -F FORWARD
echo "Limpando todas as regras .................[ OK ]"
}
case "$1" in
'start')
firewall_start
;;
'stop')
firewall_stop
;;
'restart')
firewall_restart
;;
*)
firewall_start
esac