Script FIREWALL IPTABLES com 3 (três) interfaces (Int, Ext e DMZ)

Publicado por Alessandro Dias 29/05/2007

[ Hits: 15.150 ]

Download iptables.sh




Esse é um script bem completo, implementando um sistema de firewall com 3 interfaces (Rede Interna, DMZ).

É só baixar e usar. Não se esqueça de torná-lo executável.

Abraços.
Alessandro Dias.

  



Esconder código-fonte

#! /bin/sh
##############################################
#============================================#
#=                                          =#
#=            Firewall Iptables             =#
#=                                          =#
#= Autor: Alessandro Dias                   =#
#= Versão: 1.0                              =#
#= Data: 15/06/2004                         =#
#============================================#
##############################################
#
# Desenho da rede:
#
#          ------------
#          | Internet |
#          ------------       
#               |
#               |
#               |
#             ------         -------
#             | FW |---------| DMZ | 
#             ------         -------
#               |
#               |
#             ----------------
#             | Rede Interna |
#             ----------------
#
#
#
#
#=========================================================================
#=   Execução:                                                           =
#=      iptables start    -> Inicia o Firewall                           =
#=      iptables stop     -> Para o firewall, abrindo-o totalmente       =
#=      iptables free     -> Inicia o Firewall com acesso liberado       =
#=      iptables backup   -> Levanta o backup deste arquivo na           =
#=                           máquina 200.20.120.18, diretório /bkp       =
#=      iptables restore  -> Restaura a cópia feita com a opção backup   =
#=========================================================================

##########################
# DEFINIÇÃO DE VARIÁVEIS #
##########################

IPTABLES="/usr/sbin/iptables"
MODPROBE="/sbin/modprobe"
TROJANS="/etc/trojans"

IF_LOC="lo"
IF_INT="eth0"
IF_EXT="eth1"
IF_DMZ="eth2"
IP_INT="10.2.203.254"
IP_EXT="200.20.120.22"
IP_DMZ="10.5.0.22"

IP_NAT1="200.20.120.18"
IP_NAT2="200.20.120.19"
IP_NAT3="200.20.120.21"

NET_LOC="127.0.0.0/8"
NET_INT="10.2.200.0/22"
NET_EXT="200.20.120.16/29"
NET_DMZ="10.5.0.16/29"

BRO_ESP="255.255.255.255"
BRO_INT="10.2.203.255"
BRO_DMZ="200.20.120.23"
BRO_EXT="200.20.120.23"

IP_ADMINRMT="10.5.0.18"
IP_ADMIN="10.2.207.201"

IP_SEC="10.5.0.18"
IP_WWW="10.5.0.19"
IP_DNS="10.5.0.21"
IP_SMTP="10.5.0.21"

IP_DNS_IME="200.20.120.33"

########################
#   CARGA DE MÓDULOS   #
########################
carrega_modulos() 
{
$MODPROBE ip_tables
$MODPROBE iptable_filter
$MODPROBE iptable_nat
$MODPROBE ip_nat_ftp
$MODPROBE ip_conntrack
$MODPROBE ip_conntrack_ftp
}

########################
#   CARGA DE REGRAS    #
########################
cria_regras()
{
echo "Iniciando Firewall..."
  cria_regras_auxiliares
  # if [ -s "$TROJANS"]; then
  #   cria_regras_trojans 
  # fi 
  cria_regras_PREROUTING
  cria_regras_INT2DMZ
  cria_regras_DMZ2INT
  cria_regras_DMZ2EXT
  cria_regras_EXT2DMZ
  cria_regras_INT2EXT
  cria_regras_EXT2INT
  cria_regras_INPUT
  cria_regras_FORWARD
  cria_regras_POSTROUTING
}
#############################
# FLUSH E POLÍTICAS DEFAULT #
#############################
destroi_regras()
{
  echo -e "\n\nFecha o Firewall totalmente para FORWARD e INPUT..."
  # define política defaults para chains defaults
  $IPTABLES -P INPUT DROP      # política default para filter
  $IPTABLES -P FORWARD DROP    # política default para filter
  $IPTABLES -P OUTPUT ACCEPT   # política default para filter
  $IPTABLES -F -t filter       # flush nas regras de filter
  $IPTABLES -F -t nat          # flush nas regras de nat
  $IPTABLES -F -t mangle       # flush nas regras de mangle
  $IPTABLES -X -t filter       # deleta chains de filter
  $IPTABLES -X -t nat          # deleta chains de nat
  $IPTABLES -X -t mangle       # deleta chains de mangle
  $IPTABLES -Z -t filter       # zera contadores de filter
  $IPTABLES -Z -t nat          # zera contadores de nat
  $IPTABLES -Z -t mangle       # zera contadores de mangle

}

abre_regras()
{
  echo -e "\n\nAbre o Firewall..."
  # define política defaults para chains defaults
  $IPTABLES -P INPUT ACCEPT    # política default para filter
  $IPTABLES -P FORWARD ACCEPT  # política default para filter
  $IPTABLES -P OUTPUT ACCEPT   # política default para filter
  $IPTABLES -F -t filter       # flush nas regras de filter
  $IPTABLES -F -t nat          # flush nas regras de nat
  $IPTABLES -F -t mangle       # flush nas regras de mangle
  $IPTABLES -X -t filter       # deleta chains de filter
  $IPTABLES -X -t nat          # deleta chains de nat
  $IPTABLES -X -t mangle       # deleta chains de mangle
  $IPTABLES -Z -t filter       # zera contadores de filter
  $IPTABLES -Z -t nat          # zera contadores de nat
  $IPTABLES -Z -t mangle       # zera contadores de mangle
  
  cria_regras_PREROUTING
  cria_regras_POSTROUTING
}

#############################
# CHAIN DE PREROUTING - NAT #
#############################
cria_regras_PREROUTING()
{
  echo "Regras de performance de pacotes e NAT 1:1 ..."
  # Diminui o delay para acesso SSH.
  #$IPTABLES -A PREROUTING -t mangle -p tcp --dport ssh -j TOS --set-tos Minimize-Delay
  # Melhorar a performance do acesso ao servidor WEB
  #$IPTABLES -A PREROUTING -t mangle -p tcp -s $NET_DMZ --sport http -j TOS --set-tos Maximize-Throughput
  # Faz NAT 1:1 com IP público e privado
  $IPTABLES -A PREROUTING -t nat -d $IP_NAT1 -j DNAT --to $IP_SEC
  $IPTABLES -A PREROUTING -t nat -d $IP_NAT2 -j DNAT --to $IP_WWW
  $IPTABLES -A PREROUTING -t nat -d $IP_NAT3 -j DNAT --to $IP_SMTP
  $IPTABLES -A PREROUTING -t nat -d $IP_NAT3 -j DNAT --to $IP_DNS
  
  #$IPTABLES -A PREROUTING -t nat -j MASQUERADE -i $IF_EXT
}

###############################
# CHAINS DE POSTROUTING - NAT #
###############################
cria_regras_POSTROUTING()
{
  echo "Regras para NAT 1:1 ..."
  # Faz NAT 1:1 com IP público e privado
  $IPTABLES -A POSTROUTING -t nat -s $IP_SEC -j SNAT --to-source $IP_NAT1
  $IPTABLES -A POSTROUTING -t nat -s $IP_WWW -j SNAT --to-source $IP_NAT2
  $IPTABLES -A POSTROUTING -t nat -s $IP_SMTP -j SNAT --to-source $IP_NAT3
  $IPTABLES -A POSTROUTING -t nat -s $IP_DNS -j SNAT --to-source $IP_NAT3

  $IPTABLES -A POSTROUTING -t nat -j MASQUERADE -o $IF_EXT
}

########################
#    CHAINS DE INPUT   #
########################
cria_regras_INPUT()
{
  echo "Regras de INPUT ..."
  $IPTABLES -A INPUT -j END_INVALID -m state --state INVALID
  $IPTABLES -A INPUT -j ACCEPT -m state --state ESTABLISHED,RELATED
  if [ -s "$TROJANS" ]; then $IPTABLES -A INPUT -j TROJAN_CHECK; fi
  $IPTABLES -A INPUT -j ACCEPT -i $IF_LOC
  $IPTABLES -A INPUT -j SPOOF_CHECK
  $IPTABLES -A INPUT -j REJECT -p tcp --dport auth
  # Pula para a chain específica
  #$IPTABLES -A INPUT -j INT2DMZ
  #$IPTABLES -A INPUT -j DMZ2INT
  #$IPTABLES -A INPUT -j INT2EXT
  #$IPTABLES -A INPUT -j EXT2INT
  #$IPTABLES -A INPUT -j DMZ2EXT
  #$IPTABLES -A INPUT -j EXT2DMZ
  # Aceita SSH(222) e Relatórios via Web
  $IPTABLES -A INPUT -j ACCEPT -p tcp -s $IP_ADMINRMT -i $IF_DMZ --dport 222
  $IPTABLES -A INPUT -j ACCEPT -p tcp -s $IP_ADMIN -i $IF_INT --dport 222 
  $IPTABLES -A INPUT -j ACCEPT -p tcp -s $IP_ADMIN -i $IF_INT --dport http
  $IPTABLES -A INPUT -j REJECT --reject-with tcp-reset -p tcp --dport 222
  $IPTABLES -A INPUT -j REJECT --reject-with tcp-reset -p tcp --dport http
  $IPTABLES -A INPUT -j REJECT --reject-with tcp-reset -p tcp --dport https
  #Aceita ICMP da rede interna e DMZ apenas
  #$IPTABLES -A INPUT -j ACCEPT -p icmp -s $NET_INT -i $IF_INT
  #$IPTABLES -A INPUT -j ACCEPT -p icmp -s $NET_DMZ -i $IF_DMZ
  $IPTABLES -A INPUT -j ACCEPT -p icmp 
  # Rejeita pacotes vindos de fora com IP's internos - Evitar SPOOFING
  $IPTABLES -t filter -A INPUT -j REJECT -s 10.0.0.0/8 -d 10.0.0.0/8 -i $IF_EXT
}

########################
#   CHAINS DE FORWARD  #
########################
cria_regras_FORWARD()
{
  echo "Regras de FORWARD ..."
  $IPTABLES -A FORWARD -j END_INVALID -m state --state INVALID
  $IPTABLES -A FORWARD -j ACCEPT -m state --state ESTABLISHED,RELATED
  if [ -s "$TROJANS" ]; then $IPTABLES -A FORWARD -j TROJAN_CHECK; fi
  # Pula para chain específica
  $IPTABLES -A FORWARD -j ACCEPT -i $IF_DMZ -o $IF_DMZ
  $IPTABLES -A FORWARD -j ACCEPT -i $IF_INT -o $IF_INT
  $IPTABLES -A FORWARD -j ACCEPT -i $IF_EXT -o $IF_EXT
  $IPTABLES -A FORWARD -j INT2DMZ -s $NET_INT -d $NET_DMZ -i $IF_INT -o $IF_DMZ
  $IPTABLES -A FORWARD -j DMZ2INT -s $NET_DMZ -d $NET_INT -i $IF_DMZ -o $IF_INT
  $IPTABLES -A FORWARD -j INT2EXT -s $NET_INT -d $NET_EXT -i $IF_INT -o $IF_EXT
  $IPTABLES -A FORWARD -j EXT2INT -s $NET_EXT -d $NET_INT -i $IF_EXT -o $IF_INT
  $IPTABLES -A FORWARD -j DMZ2EXT -s $NET_DMZ -d $NET_EXT -i $IF_DMZ -o $IF_EXT
  $IPTABLES -A FORWARD -j EXT2DMZ -s $NET_EXT -d $NET_DMZ -i $IF_EXT -o $IF_DMZ
}

########################################
#    CHAINS DIRECIONAIS - INT -> DMZ   #
########################################
cria_regras_INT2DMZ()
{
  echo "Regras da rede interna para a DMZ ..."
  $IPTABLES -N INT2DMZ
  # Restringe o que a rede interna pode acessar na DMZ
  $IPTABLES -A INT2DMZ -j ACCEPT -p udp -d $IP_DNS --dport domain
  $IPTABLES -A INT2DMZ -j ACCEPT -p tcp -d $IP_DNS --dport domain
  $IPTABLES -A INT2DMZ -j ACCEPT -p tcp -d $IP_SMTP -m multiport --dport pop-3,smtp,5000,6666,194
  $IPTABLES -A INT2DMZ -j ACCEPT -p tcp -d $IP_WWW -m multiport --dport http,https,137,139,5000,6666
  # Máquina Security - redes.eti
  $IPTABLES -A INT2DMZ -j ACCEPT -p udp -d $IP_SEC --dport domain
  $IPTABLES -A INT2DMZ -j ACCEPT -p tcp -d $IP_SEC -m multiport --dport domain,pop-3,smtp,http,https
  # Libera a porta tcp 171(ssh) de $IP_ADMIN para a máquina $IP_SEC
  $IPTABLES -t filter -A FORWARD -j ACCEPT -s $IP_ADMIN  -d $IP_SEC -m multiport -p tcp --destination-port 171,ftp,ftp-data -i $IF_INT
  $IPTABLES -A INT2DMZ -j ACCEPT -p icmp 
  $IPTABLES -A INT2DMZ -j REJECT -p tcp --dport auth
  # Nega todo o resto
  $IPTABLES -A INT2DMZ -j END_INT2DMZ  
}

########################################
#    CHAINS DIRECIONAIS - DMZ -> INT   #
########################################
cria_regras_DMZ2INT()
{
  echo "Regras da DMZ para a rede interna ..."
  $IPTABLES -N DMZ2INT 
  # Rejeita AUTH
  $IPTABLES -A DMZ2INT -j REJECT -p tcp --dport auth
  # Permite ICMP para a rede interna
  $IPTABLES -A DMZ2INT -j ACCEPT -p icmp
  # Nega todo o resto
  $IPTABLES -A DMZ2INT -j END_DMZ2INT  
}

########################################
#    CHAINS DIRECIONAIS - DMZ -> EXT   #
########################################
cria_regras_DMZ2EXT()
{
  echo "Regras da DMZ para a rede externa ..."
  $IPTABLES -N DMZ2EXT
  # Restringe o que a rede interna pode acessar na DMZ
  $IPTABLES -A DMZ2EXT -j ACCEPT -p udp -s $IP_DNS --dport domain
  $IPTABLES -A DMZ2EXT -j ACCEPT -p tcp -s $IP_DNS --dport domain
  $IPTABLES -A DMZ2EXT -j ACCEPT -p tcp -s $IP_SMTP -m multiport --dport smtp,pop-3,http,https
  $IPTABLES -A DMZ2EXT -j ACCEPT -p tcp -s $IP_WWW -m multiport --dport http,https,smtp,pop-3
  # Máquina Security - redes.eti
  $IPTABLES -A DMZ2EXT -j ACCEPT -p udp -s $IP_SEC --dport domain
  $IPTABLES -A DMZ2EXT -j ACCEPT -p tcp -s $IP_SEC -m multiport --dport domain,pop-3,smtp,http,https,ftp,ftp-data
  $IPTABLES -A DMZ2EXT -j ACCEPT -p icmp 
  $IPTABLES -A DMZ2EXT -j ACCEPT -p tcp --dport auth
  $IPTABLES -A DMZ2EXT -j DROP -d $BRO_ESP
  # Nega todo o resto
  $IPTABLES -A DMZ2EXT -j END_DMZ2EXT  
}


########################################
#    CHAINS DIRECIONAIS - EXT -> DMZ   #
########################################
cria_regras_EXT2DMZ()
{
  echo "Regras da rede externa para a DMZ ..."
  # Restringe o que a rede externa pode acessar na DMZ
  $IPTABLES -N EXT2DMZ
  $IPTABLES -A EXT2DMZ -j ACCEPT -p tcp -d $IP_DNS --dport domain
  $IPTABLES -A EXT2DMZ -j ACCEPT -p udp -d $IP_DNS --dport domain
  $IPTABLES -A EXT2DMZ -j ACCEPT -p tcp -d $IP_SMTP -m multiport --dport pop-3,smtp
  $IPTABLES -A EXT2DMZ -j ACCEPT -p tcp -d $IP_WWW -m multiport --dport http,https
  # Máquina Security - redes.eti
  $IPTABLES -A EXT2DMZ -j ACCEPT -p udp -d $IP_SEC --dport domain
  $IPTABLES -A EXT2DMZ -j ACCEPT -p tcp -d $IP_SEC -m multiport --dport domain,pop-3,smtp,http,https,171,ftp,ftp-data
  # Rejeita AUTH
  $IPTABLES -A EXT2DMZ -j REJECT -p tcp --dport auth
  # Permite ICMP para a DMZ
  $IPTABLES -A EXT2DMZ -j ACCEPT -p icmp
  # Nega todo o resto
  $IPTABLES -A EXT2DMZ -j END_EXT2DMZ  
}

########################################
#    CHAINS DIRECIONAIS - INT -> EXT   #
########################################

# MÁQUINAS DA REDE INTERNA QUE ACESSAM A INTERNET
permite_acesso()
{
  $IPTABLES -A INT2EXT -j ACESSO -s 10.1.7.13   # Maj Elza
  $IPTABLES -A INT2EXT -j ACESSO -s 10.1.7.15   # Maj Elza
  $IPTABLES -A INT2EXT -j ACESSO -s 10.1.12.2
  $IPTABLES -A INT2EXT -j ACESSO -s 10.1.12.6
  $IPTABLES -A INT2EXT -j ACESSO -s 10.1.12.8
  $IPTABLES -A INT2EXT -j ACESSO -s 10.1.12.11
  $IPTABLES -A INT2EXT -j ACESSO -s 10.1.12.14 
  $IPTABLES -A INT2EXT -j ACESSO -s 10.1.12.31
  $IPTABLES -A INT2EXT -j ACESSO -s 10.1.12.32
  $IPTABLES -A INT2EXT -j ACESSO -s 10.1.12.33
  $IPTABLES -A INT2EXT -j ACESSO -s 10.1.12.45 
  $IPTABLES -A INT2EXT -j ACESSO -s 10.1.12.46
  $IPTABLES -A INT2EXT -j ACESSO -s 10.1.12.47
  $IPTABLES -A INT2EXT -j ACESSO -s 10.1.12.80
  $IPTABLES -A INT2EXT -j ACESSO -s 10.1.12.81
  $IPTABLES -A INT2EXT -j ACESSO -s 10.1.12.86
  $IPTABLES -A INT2EXT -j ACESSO -s 10.1.12.90
  $IPTABLES -A INT2EXT -j ACESSO -s 10.1.12.100
  $IPTABLES -A INT2EXT -j ACESSO -s 10.1.12.102
  $IPTABLES -A INT2EXT -j ACESSO -s 10.1.12.106
  $IPTABLES -A INT2EXT -j ACESSO -s 10.1.12.123
  $IPTABLES -A INT2EXT -j ACESSO -s 10.1.12.131 
  $IPTABLES -A INT2EXT -j ACESSO -s 10.1.12.134
  $IPTABLES -A INT2EXT -j ACESSO -s 10.1.12.141
  $IPTABLES -A INT2EXT -j ACESSO -s 10.1.12.143
  $IPTABLES -A INT2EXT -j ACESSO -s 10.1.12.150
  $IPTABLES -A INT2EXT -j ACESSO -s 10.1.12.167
  $IPTABLES -A INT2EXT -j ACESSO -s 10.1.12.202
  $IPTABLES -A INT2EXT -j ACESSO -s 10.1.12.203
  $IPTABLES -A INT2EXT -j ACESSO -s 10.1.12.213
  $IPTABLES -A INT2EXT -j ACESSO -s 10.1.12.215
  $IPTABLES -A INT2EXT -j ACESSO -s 10.1.12.218
  $IPTABLES -A INT2EXT -j ACESSO -s 10.1.12.223
  $IPTABLES -A INT2EXT -j ACESSO -s 10.1.12.227
  $IPTABLES -A INT2EXT -j ACESSO -s 10.1.14.56
  $IPTABLES -A INT2EXT -j ACESSO -s 10.1.14.156
  $IPTABLES -A INT2EXT -j ACESSO -s 10.1.56.6    # CRO/1
  $IPTABLES -A INT2EXT -j ACESSO -s 10.1.56.12   # CRO/1
  $IPTABLES -A INT2EXT -j ACESSO -s 10.1.56.18   # CRO/1
  $IPTABLES -A INT2EXT -j ACESSO -s 10.1.56.19   # CRO/1
  $IPTABLES -A INT2EXT -j ACESSO -s 10.1.56.21   # CRO/1
  $IPTABLES -A INT2EXT -j ACESSO -s 10.1.56.23   # CRO/1
  $IPTABLES -A INT2EXT -j ACESSO -s 10.1.56.26   # CRO/1
  $IPTABLES -A INT2EXT -j ACESSO -s 10.1.156.93   # SCT
  $IPTABLES -A INT2EXT -j ACESSO -s 10.2.207.200  # SNASERVER
  $IPTABLES -A INT2EXT -j ACESSO -s 10.2.207.201  # SNABACKUP
  $IPTABLES -A INT2EXT -j ACESSO -s 10.4.100.1  # PDC-SIP
  $IPTABLES -A INT2EXT -j ACESSO -s 10.3.4.10   # SIMATEX - Cap Motta
}

cria_regras_INT2EXT()
{
  echo "Regras da rede interna para a rede externa ..."
  # Restringe o que a rede interna pode acessar na rede externa
  $IPTABLES -N ACESSO
  $IPTABLES -A ACESSO -j ACCEPT -p udp -m multiport --dport domain,194
  $IPTABLES -A ACESSO -j ACCEPT -p tcp -m multiport --dport domain,194
  $IPTABLES -A ACESSO -j ACCEPT -p tcp -m multiport --dport pop-3,smtp
  $IPTABLES -A ACESSO -j ACCEPT -p tcp -m multiport --dport http,https
  $IPTABLES -A ACESSO -j ACCEPT -p tcp -m multiport --dport ftp,ftp-data
  $IPTABLES -A ACESSO -j ACCEPT -p tcp -m multiport --dport 137,139
  $IPTABLES -A ACESSO -j ACCEPT -p tcp -m multiport --dport 5000,6666
  # Libera a porta tcp 5190(icq) para a máquina 10.2.207.201
  $IPTABLES -t filter -A FORWARD -j ACCEPT -s $IP_ADMIN -m multiport -p tcp --destination-port 5190 -i $IF_INT
  
  #Cria Chain INT2EXT
  $IPTABLES -N INT2EXT
  # Acoplar os IPs que terão acesso à Internet
  permite_acesso
  # Rejeita AUTH
  $IPTABLES -A INT2EXT -j REJECT -p tcp --dport auth
  # Permite ICMP para a Rede Externa
  $IPTABLES -A INT2EXT -j ACCEPT -p icmp
  # Nega todo o resto
  $IPTABLES -A INT2EXT -j END_INT2EXT  
}

########################################
#    CHAINS DIRECIONAIS - EXT -> INT   #
########################################
cria_regras_EXT2INT()
{
  echo "Regras da rede externa para a rede interna ..."
  $IPTABLES -N EXT2INT 
  # Rejeita AUTH
  $IPTABLES -A EXT2INT -j REJECT -p tcp --dport auth
  # Permite ICMP para a rede interna
  $IPTABLES -A EXT2INT -j ACCEPT -p icmp
  # Nega todo o resto
  $IPTABLES -A EXT2INT -j END_EXT2INT  
}

#####################
# CHAINS AUXILIARES #
#####################
cria_regras_auxiliares()
{
  echo "Regras para LOGs ..."
  # END_SPOOF
  $IPTABLES -N END_SPOOF
  $IPTABLES -A END_SPOOF -j LOG --log-prefix "Firewall: SPOOF!!! "
  $IPTABLES -A END_SPOOF -j DROP
  # END_INVALID
  $IPTABLES -N END_INVALID
  $IPTABLES -A END_INVALID -j LOG --log-prefix "Firewall: Invalid!!! "
  $IPTABLES -A END_INVALID -j DROP
  # END_TROJAN
  $IPTABLES -N END_TROJAN
  $IPTABLES -A END_TROJAN -j LOG --log-prefix "Firewall: Trojan!!! "
  $IPTABLES -A END_TROJAN -j DROP
  # END_INT2DMZ
  $IPTABLES -N END_INT2DMZ
  $IPTABLES -A END_INT2DMZ -j LOG --log-prefix "Firewall: INT -> DMZ !!! "
  $IPTABLES -A END_INT2DMZ -j DROP
  # END_DMZ2INT
  $IPTABLES -N END_DMZ2INT
  $IPTABLES -A END_DMZ2INT -j LOG --log-prefix "Firewall: DMZ -> INT !!! "
  $IPTABLES -A END_DMZ2INT -j DROP
  # END_INT2EXT
  $IPTABLES -N END_INT2EXT
  $IPTABLES -A END_INT2EXT -j LOG --log-prefix "Firewall: INT -> EXT !!! "
  $IPTABLES -A END_INT2EXT -j DROP
  # END_EXT2INT
  $IPTABLES -N END_EXT2INT
  $IPTABLES -A END_EXT2INT -j LOG --log-prefix "Firewall: EXT -> INT !!! "
  $IPTABLES -A END_EXT2INT -j DROP
  # END_DMZ2EXT
  $IPTABLES -N END_DMZ2EXT
  $IPTABLES -A END_DMZ2EXT -j LOG --log-prefix "Firewall: DMZ -> EXT !!! "
  $IPTABLES -A END_DMZ2EXT -j DROP
  # END_EXT2DMZ
  $IPTABLES -N END_EXT2DMZ
  $IPTABLES -A END_EXT2DMZ -j LOG --log-prefix "Firewall: EXT -> DMZ !!! "
  $IPTABLES -A END_EXT2DMZ -j DROP
  # SPOOFCHECK
  # As redes internas são consideradas confiáveis, só é checado o path 
  # de roteamento. Para se proteger do SPOOF interno também seria
  # necessário monitorar os MAC:IP na rede interna.
  $IPTABLES -N SPOOF_CHECK
  $IPTABLES -A SPOOF_CHECK -j END_SPOOF -s 127.0.0.0/8 -i $IF_EXT
  $IPTABLES -A SPOOF_CHECK -j END_SPOOF -s 10.0.0.0/8 -i $IF_EXT
  $IPTABLES -A SPOOF_CHECK -j END_SPOOF -s 172.16.0.0/12 -i $IF_EXT
  $IPTABLES -A SPOOF_CHECK -j END_SPOOF -s 192.168.0.0/16 -i $IF_EXT
  $IPTABLES -A SPOOF_CHECK -j END_SPOOF -s  $NET_INT -i ! $IF_EXT
  $IPTABLES -A SPOOF_CHECK -j END_SPOOF -s  $NET_DMZ -i ! $IF_EXT
}

##################
# CHAINS TROJANS #
##################
cria_regras_trojans()
{
  echo "Regras para TROJANs ..."
  ### TROJANS
  # Alguns trojans, os mais comuns.
  # não é necessário checar por trojans se vc adota a política
  # de tudo fechado, abrem-se as excessões. Mas, vc pode querer 
  # verificar mesmo assim para poder registrar um log mais específico.
  $IPTABLES -N TROJAN_CHECK
  for bloco in "`cat trojans | cut -d "/" -f1,2 | cut -d "#" -f1 | tr '/t' ':' | cut -d ":" -f2`"
  do
    for trojan in $bloco
    do
      porta="`echo $trojan | cut -d "/" -f1`"
      proto="`echo $trojan | cut -d "/" -f2`"
      $IPTABLES -A TROJAN_CHECK -j END_TROJAN -p $proto --dport $porta
    done
  done
}

####################
# SCRIPT PRINCIPAL #
####################

  # checa se o pacote iptables foi instalado
  if [ ! -x "$IPTABLES" ]; then
    echo "O executável $IPTABLES não existe!" 
    exit 1
  fi

  # checa se o kernel é 2.3 ou 2.4
  KERNELMAJ=`uname -r | sed -e 's,\..*,,'`
  KERNELMIN=`uname -r | sed -e 's,[^\.]*\.,,' -e 's,\..*,,'`
  if [ ! "$KERNELMAJ" -eq 2 -o ! "$KERNELMIN" -eq 4 ]; then
     echo "Você não está usando um kernel versão 2.4!"
     exit 1
  fi
  
  # Não insere regras se o módulo IPCHAINS estiver carregado
  if /sbin/lsmod 2>/dev/null | grep -q ipchains; then
     echo "Descarregue o módulo IPCHAINS para o netfilter!"
     exit 1
  fi

  if ! carrega_modulos; then
     echo "Não consegui carregar os módulos do IPTABLES!"
     exit 1
  fi

# Inicio do CASE
case "$1" in
   backup)
echo "Montando Dispositivo /bkp..."
mount -t nfs $IP_SEC:/tmp/firewall/bkp /bkp
echo "Copiando arquivo iptables..."
cp ./iptables* /bkp
echo "Desmontando Dispositivo..."
umount /bkp
echo "Ok"
   ;;
   restore)
echo "Montando Dispositivo /bkp..."
mount -t nfs $IP_SEC:/tmp/firewall/bkp /bkp
echo "Restaurando Script anterior..."
cp /bkp/iptables ./iptables
echo "Desmontando Dispositivo..."
umount /bkp
echo "Ok"
   ;;
   free)
echo "Libera todos os pacotes..."
echo 1 > /proc/sys/net/ipv4/ip_forward
carrega_modulos
$IPTABLES -t filter -A FORWARD -j ACCEPT
$IPTABLES -t filter -A FORWARD -j ACCEPT -m state --state ESTABLISHED,RELATED
$IPTABLES -t nat -A POSTROUTING -j MASQUERADE -o eth1
echo "Ok"
   ;;
   start)
echo -n "Configurando regras do firewall:"
destroi_regras && cria_regras
touch /var/lock/subsys/iptables
echo 1 > /proc/sys/net/ipv4/ip_forward
echo "Ok"
   ;;
   stop)
echo "Removendo regras e abrindo firewall:"
abre_regras
rm -f /var/lock/subsys/iptables
echo "Ok"
   ;;
   status)
echo -e "\nApresentação do status do IPTABLES:\n"
$IPTABLES --list -n
$IPTABLES --list -n > STATUS
echo -e "\nStatus Gravado no arquivo STATUS." 
echo "Utilize o comando: vi STATUS" 
echo "Ok"
   ;;
   restart)
echo "Isso não é um daemon, não precisa de stop! Então:"
$0 start
echo "Ok"
   ;;
   *)
   echo "Use o Comando:"
        echo;echo "    iptables (status|start|stop|free|backup|restore)"
esac
exit 0
####  FIM DO SCRIPT PRINCIPAL ####

Scripts recomendados

Bashblog v1.0 0 - cria um microblog em HTML5

Veja os 10 últimos tópicos das comunidades

PDC Samba + LDAP no Debian Lenny

FTP Linux-Windows Baseado na Data Atual

Gerenciamento de espaço em disco


  

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