Google

terça-feira, 18 de novembro de 2008

Firewall com iptables Linux

Imagine um cenário onde teremos uma interface de rede voltada para o roteador de saída(INTERNET) com o ip 192.168.100.2 eem eth1 para rede 192.168.254.0/24 em eth0 para rede local. Segue um exemplode firewall para esta situação.

Módulos necessários:

iptable_nat
ip_tables
ipt_state
ip_conntrack
ip_conntrack_ftp
ipt_multiport
ip_nat_ftp
iptable_mangle
ipt_tos
ipt_limit
ipt_ttl
iptable_filter
ipt_MASQUERADE
ipt_LOG
#ipt_layer7
nf_nat
iptable_mangle
xt_string
ts_kmp
xt_MARK
xt_mark
xt_CONNMARK

######## SCRIPT DE FIREWALL #################

#!/bin/bash
################################ Limpa tables e seta variaveis do kernel ############################
echo "Iniciando firewall.."
echo "Limpando tabelas e setando variaveis do kernel.."
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X

### Variaveis ###
echo 1 > /proc/sys/net/ipv4/ip_forward
echo 2 > /proc/sys/net/ipv4/conf/all/rp_filter
echo 2 > /proc/sys/net/ipv4/conf/eth0/rp_filter
echo 2 > /proc/sys/net/ipv4/conf/eth1/rp_filter
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
echo "0" > /proc/sys/net/ipv4/conf/eth0/accept_source_route
echo "0" > /proc/sys/net/ipv4/conf/eth1/accept_source_route

### Seta Politicas de privacidade ###
echo "Setando politicas de privacidade.."
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT

# Abre a interface de loopback.
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

########################## SNAT - COMPARTILHAMENTO ########################
echo "Habilitando compartilhamento.."
iptables -t nat -A POSTROUTING -s 192.168.254.0/24 -j SNAT --to-source 192.168.100.2
More...
########################## Seta prioridades TOS ##########################
echo "Dando prioridades TOS para portas e ips importantes.."
PRIO="20 21 25 53 80 110 137 139 445 443 8046 20000"
IPSPRIO="192.168.10.0/24 192.168.3.0/24"

for i in $PRIO; do
echo " -Prioridade para porta $i tcp/udp"
iptables -t mangle -A PREROUTING -p tcp --dport $i -j TOS --set-tos 16
iptables -t mangle -A PREROUTING -p udp --dport $i -j TOS --set-tos 16
iptables -t mangle -A PREROUTING -p tcp --sport $i -j TOS --set-tos 16
iptables -t mangle -A PREROUTING -p udp --sport $i -j TOS --set-tos 16
done

for i in $IPSPRIO; do
echo " -Dada prioridade para ip $i"
iptables -t mangle -A PREROUTING -s $i -j TOS --set-tos 16
iptables -t mangle -A PREROUTING -d $i -j TOS --set-tos 16
iptables -t mangle -A PREROUTING -p icmp -s $i -j TOS --set-tos 16
iptables -t mangle -A PREROUTING -p icmp -d $i -j TOS --set-tos 16
done

##################### Bloqueio de sites por string ##################
echo "Fazendo bloqueio por palavras.."
PALAVRAS="putaria putas gays playboy superiorpics"

for i in $PALAVRAS; do
echo " -Bloqueio feito para a string $i"
iptables -t mangle -A FORWARD -p tcp --dport 80 -m string --string "$i" --algo kmp -j DROP
done

################### Libera serviços para este roteador #############
echo "Liberando portas de servicos a para esse roteador.."
PORTSALLOW="53 80 123 8046 8081 8082 20000 4445 5550"

for i in $PORTSALLOW; do
iptables -A INPUT -p tcp --dport $i -j ACCEPT
iptables -A INPUT -p udp --dport $i -j ACCEPT
iptables -A INPUT -p tcp --sport $i -j ACCEPT
iptables -A INPUT -p udp --sport $i -j ACCEPT
done

############################### REDIRECIONAMENTO DE PORTAS ###############
echo "Redirecionando portas da internet para micros da rede interna.."
EXTIP="192.168.100.2"

iptables -A PREROUTING -t nat -i eth1 -p tcp -d $EXTIP --dport 8081 -j DNAT --to 192.168.10.5:80

iptables -A PREROUTING -t nat -i eth1 -m multiport -p tcp -d $EXTIP --dport 4550,5550,3650,3550,90 -j DNAT --to 192.168.254.31
iptables -A PREROUTING -t nat -i eth1 -m multiport -p udp -d $EXTIP --dport 4550,5550,3650,3550,90 -j DNAT --to 192.168.254.31

######################Protege contra pacotes danificados e alguns ataques
## PROTECOES
# ------------------------------------------------------
# CONTRA TROJANS
echo "Bloqueando contra trojans e logando pacotes.."
iptables -N TROJAN
iptables -A TROJAN -j LOG --log-prefix '** TROJANS E WORMS **' --log-level debug
iptables -A FORWARD -p tcp --dport 666 -j TROJAN
iptables -A FORWARD -p tcp --dport 4000 -j TROJAN
iptables -A FORWARD -p tcp --dport 6000 -j TROJAN
iptables -A FORWARD -p tcp --dport 6006 -j TROJAN
iptables -A FORWARD -p tcp --dport 16660 -j TROJAN
iptables -A FORWARD -p tcp --dport 135 -i eth1 -j TROJAN
iptables -A FORWARD -p tcp --dport 137 -i eth1 -j TROJAN
iptables -A FORWARD -p tcp --dport 139 -i eth1 -j TROJAN
iptables -A FORWARD -p udp --dport 69 -i eth1 -j TROJAN
iptables -A TROJAN -j DROP

####### #BLOQUEIA PING EM EXCESSO

echo "Bloqueando ping flood.." iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
# Libera pacotes tcp e udp de conexoes ja estabelecidas ou relacionadas

iptables -A FORWARD -i eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

### Bloqueia Tudo Que chega a esse roteador e bloqueia FORWARD para rede interna #######################
echo "Bloquando tudo que restou.."
iptables -A INPUT -p tcp -j DROP
iptables -A INPUT -p udp -j DROP
iptables -A FORWARD -i eth1 -p tcp -j DROP
iptables -A FORWARD -i eth1 -p udp -j DROP
echo "Firewall iniciando!"



Esse artigo tem como fonte o site: www.marcelosantana.com.br, é de um grande amigo/parceiro grande conhecedor do mundo linux, espero que aproveitem e tirem o máximo de informação possível.

Abraços..

Escola Técnica de Viçosa - R. Dr. Milton Bandeira 160 3º andar