Firewall Pessoal (iptables)

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

[ Hits: 10.240 ]

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

Remove linhas

Script de Backup para FITA DAT usando "tar"

DHCP com Proxy Squid

Kernel 4.0 para Ubuntu, Linux Mint, Lubuntu e derivados

Redundância de dois links de internet


  

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