Pular para o conteúdo

Uma dica de firewall baseado em iptables

Dica publicada em Linux / Segurança
Rey Junior rey
Hits: 10.113 Categoria: Linux Subcategoria: Segurança
  • Indicar
  • Impressora
  • Denunciar

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 " "

Dica para instalar webcam no Fedora Core 6

Resolvendo bug de trocar avatar e enviar arquivos do aMSN 0.97

Compilar aMSN 0.96 com fontes antialiasing

Resolvendo problema ao subir DHCP no Debian Sarge

PKI na Prática: Criando CA e Certificado Wildcard (Automatizado)

Vídeo laboratório de Pentest - Pós-exploração, byPass Firewall, etc

Criador de perfil falso

Conhecendo o Backtrack para pentests

rssh - Cópia segura de arquivos entre máquinas GNU/Linux

#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

Entre na sua conta para comentar.