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

Publicado por Alessandro Dias 29/05/2007

[ Hits: 14.994 ]

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

Controla Daemon do ProFTP

Conexão Remota Linux No Windows

Enviar e-mail via shell script usando e-mail autenticado

Backup-Script3.0

Monitorando seus daemon de impressão...


  

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