Script FIREWALL IPTABLES com 3 (três) interfaces (Int, Ext e DMZ)
Publicado por Alessandro Dias 29/05/2007
[ Hits: 15.150 ]
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 ####
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
Nenhum comentário foi encontrado.
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Meu Fork do Plugin de Integração do CVS para o KDevelop
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Compartilhamento de Rede com samba em modo Público/Anônimo de forma simples, rápido e fácil
Cups: Mapear/listar todas as impressoras de outro Servidor CUPS de forma rápida e fácil
Criando uma VPC na AWS via CLI
Tem como instalar o gerenciador AMD Adrenalin no Ubuntu 24.04? (15)
Tenho dois Link's ( IP VÁLIDOS ), estou tentando fazer o failover... (0)
Pendrive não formata de jeito nenhum (4)