Uma dica de firewall baseado em iptables

Publicado por Rey Junior em 01/03/2007

[ Hits: 9.530 ]

 


Uma dica de firewall baseado em iptables



Eis uma dica de um firewall baseado em iptables, que fui adaptando aos poucos. Muito útil, pode ser usado como está e/ou adaptado ao seu uso, tanto doméstico, como para empresas.

#! /bin/bash

echo "INICIALIZANDO FIREWALL"
echo " "


# LIMPANDO REGRAS ANTERIORES
iptables -F &&
iptables -t nat -F &&
iptables -t nat -X &&
iptables -t nat -Z &&
iptables -t nat -F POSTROUTING &&
iptables -t nat -F PREROUTING &&
iptables -F INPUT &&
iptables -F OUTPUT &&
iptables -F FORWARD &&
iptables -L &&
echo "OK -> Limpando TODAS regras anteriores"


# FECHANDO EXTERNAMENTE A PORTA 22
iptables -A INPUT -p tcp --dport 22 -s 192.168.0.1 -j ACCEPT # Libera a porta 22 para um determinado micro na rede
iptables -A INPUT -p tcp --dport 22 -j DROP
echo "OK -> Fechada a porta 22 externamente e liberada pro IP 192.168.0.1"


# LIBERANDO O DNS
iptables -A INPUT -i eth0 -p udp -s 200.204.0.10 -j ACCEPT # Adaptar ao seu DNS
iptables -A INPUT -i eth0 -p udp -s 200.204.0.138 -j ACCEPT
iptables -A INPUT -i eth0 -p udp -j REJECT
echo "OK -> Liberando o DNS"


# LIBERANDO ACESSO INTERNO DA REDE
iptables -A INPUT -p tcp --syn -s 192.168.0.0/24 -j ACCEPT
iptables -A OUTPUT -p tcp --syn -s 192.168.0.0/24 -j ACCEPT
iptables -A FORWARD -p tcp --syn -s 192.168.0.0/24 -j ACCEPT
echo "OK -> Libera acesso interno da rede"


# LIBERANDO LOOPBACK
iptables -A OUTPUT -p tcp --syn -s 127.0.0.1/255.0.0.0 -j ACCEPT
echo "OK -> Liberando loopback"


# LIBERANDO PORTAS DE USO COMUM
iptables -A INPUT -p tcp --dport 21 -s 192.168.0.0/24 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -s 192.168.0.0/24 -j ACCEPT
iptables -A INPUT -p tcp --dport 25 -s 192.168.0.0/24 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -s 192.168.0.0/24 -j ACCEPT
iptables -A INPUT -p tcp --dport 110 -s 192.168.0.0/24 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -s 192.168.0.0/24 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 20 -s 192.168.0.0/24 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 21 -s 192.168.0.0/24 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 22 -s 192.168.0.0/24 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 25 -s 192.168.0.0/24 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 110 -s 192.168.0.0/24 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 443 -s 192.168.0.0/24 -j ACCEPT
echo "OK -> Liberando portas de uso comum"


# FECHANDO PORTAS SUSPEITAS
iptables -A INPUT -p tcp --dport 113 -j DROP
iptables -A INPUT -p tcp --dport 111 -j DROP
iptables -A INPUT -p tcp --dport 718 -j DROP
echo "OK -> Fechada as portas suspeitas"


# TESTE DA PORTA 25 SMTP
#iptables -A INPUT -p tcp --dport 25 --syn -m limit --limit 1/s --limit-burst 10 -j ACCEPT
#iptables -A INPUT -p tcp --dport 25 --syn -j DROP
#iptables -A INPUT -p tcp --dport 25 -j ACCEPT
#echo "OK -> Regra para porta 25 - SMTP"


# PROTEÇÃO CONTRA PORT SCANNERS OCULTOS
iptables -A INPUT -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT
echo "OK -> Bloqueado port scanners"


# PROTEÇÃO CONTRA ATAQUES
iptables -A INPUT -m state --state INVALID -j DROP
echo "OK -> Bloqueado attacks"


# PROTEÇÃO CONTRA SYN-FLOODS
iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT
echo "OK -> Bloqueado syn floods"


# PROTEÇÃO CONTRA PING DA MORTE
iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
echo "OK -> Bloqueado ping da morte"


# PROTEGE CONTRA PACOTES QUE PODEM PROCURAR E OBTER INFORMAÇÕES INTERNAS
#iptables -A FORWARD --protocol tcp --tcp-flags ALL SYN,ACK -j DROP
#echo "OK -> Protege contra pacotes para obter dados rede interna"


# PROTEGE CONTRA TODOS PACOTES DANIFICADOS E OU SUSPEITOS
iptables -A FORWARD -m unclean -j DROP
echo "OK -> Protege contra pacotes danificados e ou suspeitos"


# BLOQUEANDO TRACEROUTE
iptables -A INPUT -p udp -s 0/0 -i eth0 --dport 33435:33525 -j DROP
echo "OK -> Bloqueando traceroute"


# BLOQUEANDO QQER TENTATIVA DE CONEXÃO DE FORA PRA DENTRO POR TCP
#iptables -A INPUT -i eth0 -p tcp --syn -j DROP
#echo "OK -> Bloqueando tentativa de conexao por TCP"


# BLOQUEANDO QQER ACESSO EXTERNO, PERMITINDO APENAS A REDE
iptables -N block
iptables -A block -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A block -m state --state NEW -i ! eth0 -j ACCEPT
iptables -A block -j DROP
echo "OK -> Bloqueado acesso externo"


# REGRAS DE SEGURANÇA NA INTERNET
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
echo "OK -> Regras de seguranca na Internet"


# GERANDO LOG DE BACKDOORS
iptables -A INPUT -p tcp --dport 5042 -j LOG --log-prefix "WinCrash"
iptables -A INPUT -p tcp --dport 12345 -j LOG --log-prefix "BackOrifice"
iptables -A INPUT -p tcp --dport 12346 -j LOG --log-prefix "BackOrifice"
echo "OK -> Gerando log de backdoors"


# NAO GERA LOGS APOS PERDA DE CONEXAO POR LONGO PERIODO DE NAVEGACAO
iptables -A INPUT -p tcp --dport 80 -j REJECT
iptables -A INPUT -p tcp --dport 443 -j REJECT
echo "OK -> Nao gera log em longos periodos de navegacao"


# PROTECOES DE KERNEL
echo 0 > /proc/sys/net/ipv4/conf/eth0/accept_source_route
echo 0 > /proc/sys/net/ipv4/conf/eth1/accept_source_route
echo 0 > /proc/sys/net/ipv4/conf/eth0/accept_redirects
echo 0 > /proc/sys/net/ipv4/conf/eth1/accept_redirects
echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects
echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
echo 1 > /proc/sys/net/ipv4/conf/all/accept_source_route
echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter
echo "OK -> Protecoes para Kernel"


# NAT - COMPARTILHANDO INTERNET
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE
echo 1 > /proc/sys/net/ipv4/ip_forward
echo "OK -> NAT . Compartilhando internet"


# BLOQUEANDO DEMAIS PORTAS
iptables -A INPUT -p tcp --syn -j DROP
iptables -A OUTPUT -p tcp --syn -j DROP
iptables -A FORWARD -p tcp --syn -j DROP
echo "OK -> Bloqueando demais portas"


# TERMINA
echo " "
echo " "
echo "FIREWALL INICIADO"
echo " "
Outras dicas deste autor

Resolvendo bug de trocar avatar e enviar arquivos do aMSN 0.97

Dica para instalar webcam no Fedora Core 6

Compilar aMSN 0.96 com fontes antialiasing

Resolvendo problema ao subir DHCP no Debian Sarge

Leitura recomendada

Imagem do Windows XP virtual para testes de segurança

O que é um Fuzzer em Penetration Testing (Pentesting)

Como encriptar o diretório home do seu usuário

Webinars sobre proteção de perímetro e hardening de servidores GNU/Linux

Limitador de conexões para usuários

  

Comentários
[1] Comentário enviado por davis.peixoto em 01/03/2007 - 07:57h

Olá Rey, muito bom esta dica. Script de alta qualidade, muito bem comentado e organizado. Obrigado pela contribuição e parabéns.

[2] Comentário enviado por Cyber Punk em 01/03/2007 - 10:51h

Mais inicia junto ao sistema ??

é melhor que o firestarter ?

[3] Comentário enviado por luiscarlos em 01/03/2007 - 12:44h

seu firewall tem um furo na parte

# BLOQUEANDO QQER ACESSO EXTERNO, PERMITINDO APENAS A REDE
iptables -N block
iptables -A block -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A block -m state --state NEW -i ! eth0 -j ACCEPT
iptables -A block -j DROP
echo "OK -> Bloqueado acesso externo"

as regras da chain block nunca serao verifcadas por que vc nao redirecionou as entradas pra ela, no link abaixo ensina vc a fazer isso e obrigado pela contribuição


http://focalinux.cipsga.org.br/guia/avancado/ch-fw-iptables.htm#s-fw-iptables-chains-N

[4] Comentário enviado por rey em 01/03/2007 - 18:58h

luis0101, obrigado pela dica, estarei verificando isso o mais rápido possivel.

Cyber Punk, esse script funciona melhor em servidores, mas nada impede que vc o adapte a um desktop.

[5] Comentário enviado por PREVIRB em 06/07/2007 - 14:08h

oLA SOU MEIA LEIGA EM LINUX. MAI ESSE FIREWAAL, PODE USAR EM QUALQUER VERSÃO, INCLUSIVE NO KURUMIM.

Rosa Maria.

[6] Comentário enviado por julianobe em 23/07/2007 - 17:27h

a regra:
# PROTEGE CONTRA TODOS PACOTES DANIFICADOS E OU SUSPEITOS
iptables -A FORWARD -m unclean -j DROP
echo "OK -> Protege contra pacotes danificados e ou suspeitos"

na empresa que trabalho tem esta regra.
quando eu executo o firewall aparece uma mensagem nesta linha.

##############################
iptables: No chain/target/match by that name
################################

to aprendendo a usar o firewall a poco tempo.
mas posso concluir que isto nao he normal.
alguem sabe o porque desta mensagem.????

[7] Comentário enviado por balani em 13/10/2007 - 13:36h

muito util, gostei do seu firewall



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts