Script FIREWALL IPTABLES com 3 (três) interfaces (Int, Ext e DMZ)
Publicado por Alessandro Dias 29/05/2007
[ Hits: 15.428 ]
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.
#! /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 ####
Administrar squid com autenticação, simples e objetivo.
sync2test - sincroniza arquivos do subversion
Algoritmo para calcular notas com array
Resolvendo alguns erros ao executar o apt-get, Ubuntu 16.04
Nenhum comentário foi encontrado.
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Como instalar o repositório do DBeaver no Ubuntu
Como instalar o Plex Media Server no Ubuntu
Digitando underscore com "shift" + "barra de espaços"
Como ativar a lixeira e recuperar aquivos deletados em um servidor Linux
Como mudar o nome de dispositivos Bluetooth via linha de comando
O programa assinador digital (5)
Assinador JNLP do Site Portal da Nota Fiscal Eletrônica (5)









