Exemplo de Script de Firewall com Iptables

Share

Configurar uma Firewall “descente” não é uma tarefa fácil. Existem muitos (mas muitos mesmo) “administradores de rede” ou “profissionais de segurança” que acham que sabem configurar um firewall, e até dizem que “é moleza”. Isso, até o dia que são invadidos. E o pior, os atacantes nem precisam usar vulnerabilidades do sistema. Usam a má implementação de segurança que estes “profissionais” fazem. Tome cuidado. Se você acha que está seguro, aí que você estará vulnerável!

No Linux, o firewall nativo do kernel é nosso amigo Netfilter. O comando que gerencia o netfilter é o Iptables. Isso mesmo, o iptables não é o firewall do Linux, e sim o netfilter.

O site do projeto netfilter é www.netfilter.org

Mas vamos lá. Essa dica é muito boa: você precisa configurar um firewall com iptables que seja eficiente, seguro e simples. Mas como?

Segue abaixo um exemplo bem prático de firewall iptables:

#!/bin/bash
##########################
### Variaveis ############
##########################
echo “Definindo Variaveis”
REDE=”192.168.60.0/24″
echo “Rede interna”
NET=”0.0.0.0/0″
echo “Todas as Redes”
PA=”1024:65535″
echo “Portas Altas”
DPORT=”80,443″
echo “Portas HTTP e HTTPS que sairao pelo Proxy”
IPG=”192.168.60.1″ ## Conforme /etc/init.d/roteamento.sh ##
echo “IP Gateway”
ETHINTERNET=”eth0″ ## Conforme /etc/init.d/roteamento.sh ##
echo “Placa Internet”
ETHREDE=”eth1″ ## Conforme /etc/init.d/roteamento.sh ##
echo “Placa Rede Interna”
######################################
### Politicas de Seguranca Iniciais ##
######################################
echo “limpando Tabelas”
iptables -F
iptables -t nat -F
iptables -t mangle -F
echo “Dropando as Politicas”
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
#####################################
############# REGRAS ################
#####################################
echo “Autorizando o kernel a rotear pacotes”
sysctl -w net.ipv4.ip_forward=1
echo “Liberando cenexoes na Loopback”
iptables -A OUTPUT -d 127.0.0.1 -j ACCEPT
iptables -A INPUT -d 127.0.0.1 -j ACCEPT
echo “Liberando Ping”
iptables -A OUTPUT -p icmp -j ACCEPT
iptables -A INPUT -p icmp -j ACCEPT
echo “Liberando acesso SSH”
iptables -A OUTPUT -p tcp –sport 22 -j ACCEPT
iptables -A OUTPUT -p tcp –dport 22 -j ACCEPT
iptables -A INPUT -p tcp –dport 22 -j ACCEPT
iptables -A INPUT -p tcp –sport 22 -j ACCEPT
echo “Liberando Resolucoes de Nome”
iptables -A OUTPUT -p udp –sport $PA –dport 53 -j ACCEPT
iptables -A INPUT -p udp –sport 53 –dport $PA -j ACCEPT
echo “Navegacao na Web”
iptables -A OUTPUT -p tcp –sport $PA –dport 80 -j ACCEPT
iptables -A OUTPUT -p tcp –sport $PA –dport 443 -j ACCEPT
iptables -A INPUT -p tcp –sport 80 –dport $PA -j ACCEPT
iptables -A INPUT -p tcp –sport 443 –dport $PA -j ACCEPT
echo “Navegacao web com Proxy”
iptables -A INPUT -p tcp –dport 3128 -j ACCEPT
iptables -A OUTPUT -p tcp –sport 3128 -j ACCEPT
iptables -t nat -A PREROUTING -i eth1 -p tcp -m multiport –dport $DPORT -j REDIRECT –to-port 3128
echo “Liberacao mtr”
iptables -A INPUT -p icmp –icmp-type 11 -s $IPG -j ACCEPT
echo “Redirecionamento para Rede Interna”
iptables -A FORWARD -s $REDE -j ACCEPT
iptables -A FORWARD -d $REDE -j ACCEPT
echo “Mascarando a Rede Interna”
iptables -t nat -A POSTROUTING -o $ETHINTERNET -j MASQUERADE
###########################################
#### Politicas de Seguranca Adicionais ####
###########################################
echo “Protecao contra ip spoofing”
echo 1 > /proc/sys/net/ipv4/conf/default/rp_filter
echo “Ptoteção Contra ping por Broadcast”
echo 1 >/proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
echo “Descarta pacotes mal formados”
iptables -A INPUT -m state –state INVALID -j DROP
echo “Protecao contra DDoS por icmp”
iptables -A INPUT -p icmp –icmp-type echo-request -m limit –limit 1/s -j ACCEPT
echo “Descartando pacotes inválidos ou mal formados”
iptables -A INPUT -m conntrack –ctstate INVALID -j DROPiptables -A OUTPUT -m conntrack –ctstate INVALID -j DROPiptables -A FORWARD -m conntrack –ctstate INVALID -j DROP
echo “Aceitando pacotes de conexões já estabelecidas”
iptables -A INPUT -m conntrack –ctstate ESTABILISHED,RELATED -j ACCEPTiptables -A OUTPUT -m conntrack –ctstate ESTABLISHED,RELATED -j ACCEPTiptables -A FORWARD -m conntrack –ctstate ESTABLISHED,RELATED -j ACCEPT
echo “Ok”

Coloque isso num arquivo e de permissão de execução.
Feito isso, coloque o script na inicialização do sistema (para o Debian ou derivados, use o comando abaixo):

# update-rc.d nome_do_seu_arquivo defaults

Não se esqueça que existem várias outras implementações que o Iptables suporta. Este foi um exemplo simples e eficiente de uso do nosso amigo Netfilter.

Vlw pessoal, até a próxima.