Firewall Pessoal (iptables)

Publicado por Dix (última atualização em 08/09/2014)

[ Hits: 10.259 ]

Download firewall2.0.sh




Shell Script comentado contendo regras de um firewall iptables estruturado em funções.

  



Esconder código-fonte

#!/bin/bash
#
# Shell Script - Firewall
# Testado em Dedian 7
# =======================
# by Hudson A. Gadioli (huddioli)
# 2014-09-05
#
# Se for adicionado na inicialização do sistema irá funcionar corretamente

echo -e "{FONTE}33[01;37m"

# Variaveis
# Não implementado
# inet=$1
# ipt=/sbin/iptables
# network="192.168.0.0/24"
# ip="10.5.1.3"

function CarregaModulos(){
echo -n "Carregando módulos ............................................"
 # Carrega os módulos
 modprobe ip_tables
 #modproble iptable_nat
}

function LimpaRegras(){
echo -n "Limpando regras ..............................................."
 # Limpando as Chains
 iptables -F INPUT
 iptables -F OUTPUT
 iptables -F FORWARD
 iptables -F -t filter
 iptables -F POSTROUTING -t nat
 iptables -F PREROUTING -t nat
 iptables -F OUTPUT -t nat
 iptables -F -t nat
 iptables -t nat -F
 iptables -t mangle -F
 iptables -X
 # Zerando contadores
 iptables -Z
 iptables -t nat -Z
 iptables -t mangle -Z
 # Define politicas padrao ACCEPT
 iptables -P INPUT ACCEPT
 iptables -P OUTPUT ACCEPT
 iptables -P FORWARD ACCEPT
}

function PoliticaPadrao(){
 echo -n "Definindo politica padrão ....................................."
 # Define a politica padrao de cada chain
 iptables -P INPUT DROP
 iptables -P OUTPUT ACCEPT
 iptables -P FORWARD DROP
}

function CriaChain(){
 echo -n "Criando chains ................................................"
 # iptables -N LOGADO
}

function LiberaLoopback(){
 echo -n "Liberando loopback ............................................"
 iptables -A INPUT -i lo -d 127.0.0.1 -j ACCEPT
 # A potítica padrão da chain OUTPUT já é ACCEPT
 # iptables -A OUTPUT -o lo -d 127.0.0.1 -j ACCEPT
}

function LiberaConexoes(){
 echo -n "Liberando conexões ............................................"
 # Liberar Conexões Estabelecidas
 iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
 iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
 # Liberar o ping da propria máquina para a sua placa de rede
 # iptables -A INPUT -p icmp -s $ip -j ACCEPT
}

function LiberaPortas(){
 echo -n "Liberando portas .............................................."
 # iptables -A INPUT -p tcp --dport 80 -j ACCEPT
}

function Protecao(){
 echo -n "Aplicando regras de proteção .................................."
 i=/proc/sys/net/ipv4
 # Desabilita o trafego IP entre as placas de rede
 echo "0" > /proc/sys/net/ipv4/ip_forward
 # Protecao contra SYN flood
 echo "1" > $i/tcp_syncookies
 echo "1" > $i/icmp_echo_ignore_broadcasts
 # Protecao contra responses bogus
 echo "1" > $i/icmp_ignore_bogus_error_responses

 for i in /proc/sys/net/ipv4/conf/*; do
   # Impedir que um atacante possa maliciosamente alterar alguma rota
   echo "0" > $i/accept_redirects
   # Utilizado em diversos ataques, isso possibilita que o atacante
   # determine o "caminho" que seu pacote vai percorrer (roteadores)
   # ate seu destino.
   echo "0" > $i/accept_source_route
   echo "1" > $i/log_martians
   # Configurando a Protecao anti-spoofing
   echo "1" > $i/rp_filter
 done

 # Proteção contra Ataques - Registra no LOG do sistema
 iptables -I INPUT 1 -m state --state INVALID -j LOG --log-level info --log-prefix "PKT INVALIDO - "
 iptables -I INPUT 2 -m state --state INVALID -j DROP

 # Proteção contra os "Ping of Death"
 # Na configuração padrão do script todos as respostas aos PINGs foram desativadas
 #
 # iptables -A INPUT -i $inet -p icmp --icmp-type 8 -m limit --limit 5/m -j DROP
 # iptables -A INPUT -i $inet -p icmp --icmp-type 0 -j ACCEPT
 # iptables -A INPUT -i $ilan -p icmp -j ACCEPT

 # Proteção contra Port Scanner
 iptables -A INPUT -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 5/m -j ACCEPT
}

function Servidores(){
 echo -n "Liberando conexão de entrada nos servidores ..................."

    # Apache - Servidor Web
    #iptables -A INPUT -p tcp -m multiport --dports 80,443 -j ACCEPT

    # Apache TomCat - Servidor Web
    #iptables -A INPUT -p tcp --dport 8080 -j ACCEPT

    # Bind - Servidor DNS
    #iptables -A INPUT -p udp --dport 53 -j ACCEPT

    # DanGuardian - Servidor Proxy
    #iptables -A INPUT -p tcp --dport 8080 -j ACCEPT

    # ProFTP - Servidor FTP
    #iptables -A INPUT -p tcp --dport 21 -j ACCEPT
    #iptables -A INPUT -p tcp -m multiport --dports 49152:49162 -j ACCEPT

    # Postfix - Servidor de E-mail
    #iptables -A INPUT -i $ilan -p tcp -m multiport --dports 25,110 -j ACCEPT
    #iptables -A INPUT -i $ilan -p tcp -m multiport --dports 465,995 -j ACCEPT
    #iptables -A INPUT -i $ilan -p tcp --sport 25 -j ACCEPT

    # PostgreSQL - Servidor Postgresql
    #iptables -A INPUT -i $ilan -p tcp --dport 5432 -j ACCEPT

    # SSH - Servidor SSH
    #iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 300 --hitcount 3 -j DROP
    #iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set
    #iptables -A INPUT -p tcp --dport 22 -j ACCEPT

    # VNC - Servidor de Acesso Remoto
    #iptables -A INPUT -p tcp --dport 5900 -j ACCEPT

    # PROTOCOLOS E SERVIÇOS #

    # AIM
    #iptables -A INPUT -i $inet -p tcp --sport 5190 -j ACCEPT
    #iptables -A FORWARD -i $inet -p tcp --sport 5190 -j ACCEPT
    #iptables -A FORWARD -o $inet -p tcp --dport 5190 -j ACCEPT

    # DNS - Serviço de Nomes de Dominios
    #iptables -A INPUT -p tcp -m multiport --sports 53,5353 -j ACCEPT
    #iptables -A INPUT -p udp -m multiport --sports 53,5353 -j ACCEPT
    #iptables -A FORWARD -p tcp -m multiport --sports 53,5353 -j ACCEPT
    #iptables -A FORWARD -p udp -m multiport --sports 53,5353 -j ACCEPT
    #iptables -A FORWARD -p tcp -m multiport --dports 53,5353 -j ACCEPT
    #iptables -A FORWARD -p udp -m multiport --dports 53,5353 -j ACCEPT

    # FTP - Protocolo de Transferência de Arquivo
    #iptables -A INPUT -i $inet -p tcp --sport 21 -j ACCEPT
    #iptables -A FORWARD -i $inet -p tcp --sport 21 -j ACCEPT
    #iptables -A FORWARD -o $inet -p tcp --dport 21 -j ACCEPT

    # HTTP - Protocolo de Transferência de Hypertext
    #iptables -A INPUT -i $inet -p tcp -m multiport --sports 80,8080 -j ACCEPT
    #iptables -A FORWARD -i $inet -p tcp -m multiport --sports 80,8080 -j ACCEPT
    #iptables -A FORWARD -o $inet -p tcp -m multiport --dports 80,8080 -j ACCEPT

    # HTTPS - Protocolo de Transferência de Hypertext Seguro
    #iptables -A INPUT -i $inet -p tcp --sport 443 -j ACCEPT
    #iptables -A FORWARD -i $inet -p tcp --sport 443 -j ACCEPT
    #iptables -A FORWARD -o $inet -p tcp --dport 443 -j ACCEPT

    # IAPP - Protocolo de Ponto de Acesso
    #iptables -A INPUT -i $ilan -p udp --sport 2313 -j ACCEPT

    # IPP - Protocolo de Impressão na Internet
    #iptables -A INPUT -i $ilan -p tcp --dport 631 -j ACCEPT
    #iptables -A INPUT -i $ilan -p udp -m multiport --dports 138,631 -j ACCEPT

    # IRC - Internet Relay Chat
    #iptables -A INPUT -i $inet -p tcp --sport 6667 -j ACCEPT
    #iptables -A FORWARD -i $inet -p tcp --sport 6667 -j ACCEPT
    #iptables -A FORWARD -o $inet -p tcp --dport 6667 -j ACCEPT

    # Microsoft-DS - Serviços de Diretório da Microsoft
    #iptables -A INPUT -i $ilan -p tcp --dport 445 -j ACCEPT
    #iptables -A INPUT -i $ilan -p tcp -m multiport --sports 139,445 -j ACCEPT

    # MSNMS - Serviço de Mensageiro de Rede da Microsoft
    #iptables -A INPUT -i $inet -p tcp -m multiport --sports 1863,1900 -j ACCEPT
    #iptables -A INPUT -i $inet -p udp --sport 1900 -j ACCEPT
    #iptables -A FORWARD -i $inet -p tcp -m multiport --sports 1863,7001 -j ACCEPT
    #iptables -A FORWARD -i $inet -p udp --sport 7001 -j ACCEPT
    #iptables -A FORWARD -o $inet -p tcp -m multiport --dports 1863,7001 -j ACCEPT
    #iptables -A FORWARD -o $inet -p udp --dport 7001 -j ACCEPT

    # NETBIOS-SSN - Serviço de Sessão NetBIOS
    #iptables -A INPUT -i $ilan -p udp -m multiport --dports 137,138 -j ACCEPT
    #iptables -A INPUT -i $ilan -p tcp --dport 139 -j ACCEPT

    # NO-IP - Provedor de DNS Dinâmico
    #iptables -A INPUT -i $inet -p tcp --sport 8245 -j ACCEPT

    # NTP - Protocolo para sincronização dos relógios
    #iptables -A INPUT -i $inet -p udp --sport 123 -j ACCEPT
    #iptables -A FORWARD -i $inet -p udp --sport 123 -j ACCEPT
    #iptables -A FORWARD -o $inet -p udp --dport 123 -j ACCEPT

    # POP3S - Protocolo de Correio Seguro
    #iptables -A INPUT -i $inet -p tcp --sport 995 -j ACCEPT
    #iptables -A FORWARD -i $inet -p tcp --sport 995 -j ACCEPT
    #iptables -A FORWARD -o $inet -p tcp --dport 995 -j ACCEPT

    # SSDP - Protocolo para Descoberta de Serviços Simples
    #iptables -A INPUT -i $ilan -p udp --dport 1900 -j ACCEPT

    # SSH - Shell Seguro
    #iptables -A INPUT -p tcp --sport 22 -j ACCEPT
    #iptables -A FORWARD -i $inet -p tcp --sport 22 -j ACCEPT
    #iptables -A FORWARD -o $inet -p tcp --dport 22 -j ACCEPT

    # SSMTP - Protocolo Simples para Transferência de Correio Seguro
    #iptables -A INPUT -i $inet -p tcp -m multiport --sports 465,587 -j ACCEPT
    #iptables -A FORWARD -i $inet -p tcp --sport 465 -j ACCEPT
    #iptables -A FORWARD -o $inet -p tcp --dport 465 -j ACCEPT

    # TELNET
    #iptables -A INPUT -p tcp --sport 23 -j ACCEPT
    #iptables -A FORWARD -i $inet -p tcp --sport 23 -j ACCEPT
    #iptables -A FORWARD -o $inet -p tcp --dport 23 -j ACCEPT

    # VNC - Computação em Rede Virtual
    #iptables -A INPUT -p tcp --sport 5900 -j ACCEPT
    #iptables -A FORWARD -i $inet -p tcp --sport 5900 -j ACCEPT
    #iptables -A FORWARD -o $inet -p tcp --dport 5900 -j ACCEPT

    # XMPP - Protocolo de Presença e Mensagens Extensiva
    #iptables -A INPUT -i $inet -p tcp --sport 5222 -j ACCEPT
    #iptables -A FORWARD -i $inet -p tcp --sport 5222 -j ACCEPT
    #iptables -A FORWARD -o $inet -p tcp --dport 5222 -j ACCEPT
}

function AtivaPing(){
 echo -n "Ativando resposta do ping ....................................."
 echo "0" > /proc/sys/net/ipv4/icmp_echo_ignore_all
}

function DesativaPing(){
 echo -n "Desativando resposta do ping .................................."
 echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_all
}

function DesativaProtecao(){
 echo -n "Removendo regras de proteção .................................."
 i=/proc/sys/net/ipv4
 echo "1" > /proc/sys/net/ipv4/ip_forward
 echo "0" > $i/tcp_syncookies
 echo "0" > $i/icmp_echo_ignore_broadcasts
 echo "0" > $i/icmp_ignore_bogus_error_responses
 for i in /proc/sys/net/ipv4/conf/*; do
   echo "1" > $i/accept_redirects
   echo "1" > $i/accept_source_route
   echo "0" > $i/log_martians
   echo "0" > $i/rp_filter
 done
}

function IniciaFirewall(){
 echo "FIREWALL 1.0 - by HUDDIOLI"
 echo
  if CarregaModulos
  then
   echo -e "[{FONTE}33[01;32m  OK  {FONTE}33[01;37m]"
  else
   echo -e "[{FONTE}33[01;31m  Erro  {FONTE}33[01;37m]"
 fi
 if LimpaRegras
  then
   echo -e "[{FONTE}33[01;32m  OK  {FONTE}33[01;37m]"
  else
   echo -e "[{FONTE}33[01;31m  Erro  {FONTE}33[01;37m]"
 fi
 if PoliticaPadrao
  then
   echo -e "[{FONTE}33[01;32m  OK  {FONTE}33[01;37m]"
  else
   echo -e "[{FONTE}33[01;31m  Erro  {FONTE}33[01;37m]"
 fi
 if CriaChain
  then
   echo -e "[{FONTE}33[01;32m  OK  {FONTE}33[01;37m]"
  else
   echo -e "[{FONTE}33[01;31m  Erro  {FONTE}33[01;37m]"
 fi
 if LiberaLoopback
  then
   echo -e "[{FONTE}33[01;32m  OK  {FONTE}33[01;37m]"
  else
   echo -e "[{FONTE}33[01;31m  Erro  {FONTE}33[01;37m]"
 fi
 if LiberaConexoes
  then
   echo -e "[{FONTE}33[01;32m  OK  {FONTE}33[01;37m]"
  else
   echo -e "[{FONTE}33[01;31m  Erro  {FONTE}33[01;37m]"
 fi
 if LiberaPortas
  then
   echo -e "[{FONTE}33[01;32m  OK  {FONTE}33[01;37m]"
  else
   echo -e "[{FONTE}33[01;31m  Erro  {FONTE}33[01;37m]"
 fi
 if Protecao
  then
   echo -e "[{FONTE}33[01;32m  OK  {FONTE}33[01;37m]"
  else
   echo -e "[{FONTE}33[01;31m  Erro  {FONTE}33[01;37m]"
 fi
 if DesativaPing
  then
   echo -e "[{FONTE}33[01;32m  OK  {FONTE}33[01;37m]"
  else
   echo -e "[{FONTE}33[01;31m  Erro  {FONTE}33[01;37m]"
 fi
 if Servidores
  then
   echo -e "[{FONTE}33[01;32m  OK  {FONTE}33[01;37m]"
  else
   echo -e "[{FONTE}33[01;31m  Erro  {FONTE}33[01;37m]"
 fi
 # Lista de Funções executadas
 #LimpaRegras
 #PoliticaPadrao
 #CriaChain
 #LiberaLoopback
 #LiberaConexoes
 #LiberaPortas
 #Protecao
 #DesativaPing
 #Servidores
 echo
}

function ParaFirewall(){
 echo "FIREWALL 1.0 - by HUDDIOLI"
 echo
 if LimpaRegras
  then
   echo -e "[{FONTE}33[01;32m  OK  {FONTE}33[01;37m]"
  else
   echo -e "[{FONTE}33[01;31m  Erro  {FONTE}33[01;37m]"
 fi
 if AtivaPing
  then
   echo -e "[{FONTE}33[01;32m  OK  {FONTE}33[01;37m]"
  else
   echo -e "[{FONTE}33[01;31m  Erro  {FONTE}33[01;37m]"
 fi
 if DesativaProtecao
  then
   echo -e "[{FONTE}33[01;32m  OK  {FONTE}33[01;37m]"
  else
   echo -e "[{FONTE}33[01;31m  Erro  {FONTE}33[01;37m]"
 fi
 # Lista de Funções executadas
 #LimpaRegras
 #AtivaPing
 #DesativaProtecao
 echo
}

function ReiniciaFirewall(){
 echo "FIREWALL 1.0 - by HUDDIOLI"
 echo
 ParaFirewall
 IniciaFirewall
 echo
}

case $1 in
  start)
   IniciaFirewall
   exit 0
  ;;

  stop)
   ParaFirewall
  ;;

  restart)
   ReiniciaFirewall
  ;;

  -l)
   iptables -L -nv --line-numbers
  ;;

  ativaping)
   if AtivaPing
    then
      echo -e "[{FONTE}33[01;32m  OK  {FONTE}33[01;37m]"
    else
      echo -e "[{FONTE}33[01;31m  Erro  {FONTE}33[01;37m]"
   fi
   #AtivaPing
  ;;

  desativaping)
   if DesativaPing
    then
       echo -e "[{FONTE}33[01;32m  OK  {FONTE}33[01;37m]"
    else
       echo -e "[{FONTE}33[01;31m  Erro  {FONTE}33[01;37m]"
   fi
 #DesativaPing
  ;;

  *)
   echo "Escolha uma opção válida { start | stop | restart | ativaping | desativaping | -l }"
   echo
esac

# Outras opções úteis

# Mais uma linha interessante de se adicionar, que protege contra pacotes danificados (usados em ataques DoS por exemplo) é:
#iptables -A FORWARD -m unclean -j DROP

# Compartilha a conexão (IP Masquerading)
#modprobe iptable_nat
#iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
#echo "1" > /proc/sys/net/ipv4/ip_forward

# Abre para a rede local

#iptables -A INPUT -p tcp --syn -s 10.4.152.0 -j ACCEPT
#iptables -A INPUT -p tcp --syn -s 10.4.0.0 -j ACCEPT
#iptables -A OUTPUT -p tcp --syn -s 10.4.128.0/255.255.252.0 -j ACCEPT

# Para registrar os pacotes ICMP no LOG do sistema /var/log/messages
 #iptables -A LOGADO -j LOG --log-level info --log-prefix "ICMP Registrado - "
 #iptables -I OUTPUT 1 -d 127.0.0.1 -p icmp -j LOGADO

Scripts recomendados

Make Knoppix

Bloquear Facebook no Linux Educacional 3

Fedora autenticando no LDAP.

Script de Inventário

Criando Boot pelo USB para o VirtualBox no Linux KDu5


  

Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts