Firewall com balanceamento de N links comuns (IP fixo ou dinâmico) + acesso HTTPS (todos links ativos)

Publicado por Marcelo De Zan em 07/05/2015

[ Hits: 6.157 ]

 


Firewall com balanceamento de N links comuns (IP fixo ou dinâmico) + acesso HTTPS (todos links ativos)



Saudações, pessoal.

Vou postar um firewall que trabalhei em 2009 e localizei estes dias em meus arquivos, este faz balanceamento de dois ou mais links de internet comuns, mantendo todos links ativos. E também permite a navegação em sites seguros, pois rastreia por qual link cada cliente sai e mantém este, sempre saindo pelo mesmo link.

Também está todo comentado para facilitar.

Com alguns poucos ajustes, creio que todos consigam utilizar o mesmo em seus ambientes, eu também havia criado um script de monitoramento de links com teste simples de ping, pois na falha de um link, o script deve baixar a interface com falha ou a rota para aquela saída, para que a navegação dos usuários não seja prejudicada

Depois, o mesmo subia a interface e realizava testes de ping a cada 10 minutos. Se ela volta a responder, o script subia a interface com falha e tornava a funcionar normalmente (porém, este eu não localizei).

Comentem e se houver dúvidas, na medida do possível tentarei ajudar. Abraço a todos.

#!/bin/bash

#######################################################
#        FIREWALL CDZNET NETWORKS 2.0 05-03-2009     #
#        Autor: Marcelo De Zan                       #
#######################################################
########################
# DEFINICAO VARIAVEIS  #
########################
##############################################################################
#                                                                           #
# CAMINHO DO BINARIO DO IPTABLES                                            #
#                                                                           #
# Seta o valor da variavel IPTABLES para o binario do iptables instalado    #
# no servidor caso tenha compilado confirmar o local onde se encontra o     #
# binario do iptables                                                       #
#                                                                           #
# /sbin/iptables para iptables padrao instalado no debian                   #
#                                                                           #
# /usr/local/sbin/iptables para iptables compilado                         #
#                                                                           #
##############################################################################
IPTABLES=/sbin/iptables
########################################################################
#                                                                                      #
# variaveis para alterar comportamento do firewall                                                             #
#                                                                                                              #
# ip_forward - Ativa roteamento do servidor quando '1' | nao roteia quando '0'                                 #
#                                                                                                              #
# ip_forward - Ativa protecao anti-spoofing quando '1' | desabilita quando '0'                                 #
#       Obs.: setar como '0' quando servidor tiver mais de um link de internet                                 #
#             realizando balanceamento de saida                                                                #
#                                                                                                              #
# tcp_ecn - Explicit Congestion Notification, RFC 3168 proposta nos padroes de internet                        #
#       Notificacao explicita de congestionamento, Quando Ativado todas conexoes TCP                           #
#       sao enviadas oferecendo ECN, sites que nao suportam ECN ignoram conexoes com                           #
#       suporte a ECN. parac habilitar sete '1' caso tenha problemas altere para '0'                           #
#       Obs.: site da UOL e sites hospadados neles costumam dar problema sete '0'                              #
#                                                                                                              #
########################################################################
echo 1 > /proc/sys/net/ipv4/ip_forward
echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter
echo 1 > /proc/sys/net/ipv4/tcp_ecn
###################################################################################################
#                                                                                                 #
# CONFIGURACAO DE VARIAVEIS DAS INTERFACES DO SERVIDOR                                            #
#                                                                                                 #
#  As variaveis devem ser definidas para todas interfaces de rede do servidor                     #
#  unindo 'V1' a 'V2' e adicionando um valor numerido que corresponde ao numero da interface.     #
#                                                                                                 #
#  'V1'                                                                                           #
#                                                                                                 #
#  IF - Variavel para interface de rede                                                           #
#  IP - Variavel para valor do ip                                                                 #
#  NM - Variavel para Netmask                                                                     #
#  GW - Variavel para valor Gateway                                                               #
#  NW - Variavel para valor do end. de rede                                                       #
#  BRD - Variavel para valor de Broadcast da rede                                                 #
#                                                                                                 #
#  'V2'                                                                                           #
#                                                                                                 #
#  I - Interna                                                                                    #
#  E - Externa                                                                                    #
#                                                                                                 #
#   VARIAVEL RTEx - sao variaveis para criacao de tabelas de roteamento                           #
#                                                                                                 #
#  Obs.: Para ip dinamico utilize o seguinte valor para devifinir a variavel                      #
#       Ex.:    IPE1=$(ifconfig ppp0 | grep end.: | awk '{ print $3 }');                          #
#                                                                                                 #
###################################################################################################
###### INTERFACE INTERNA
IFI1=eth1
IPI1=192.168.1.2
NMI1=24
NWI1=192.168.1.0
BRDI1=192.168.1.255
###### INTERFACE EXTERNA 1 LINK SPEEDY TELEFONICA
IFE1=ppp0
IPE1=$(ifconfig ppp0 | grep end.: | awk '{ print $3 } ' );
NWE1=$(ip -d route | grep ppp0 | grep / | cut -f1 -d /);
NME1=$(ip -d addr | grep ppp0 | grep inet | awk '{ print $2 } ' | cut -f2 -d /);
BRDE1=$(ifconfig ppp0 | grep end.: | awk '{ print $4 } ' |   cut -c7- );
##GWE1=$(route -n | grep UG | awk '{ print $2}');
RTE1=201
#########################################
#                                       #
#       LIMPA REGRAS DO FIREWALL        #
#                                       #
#########################################
$IPTABLES -F
$IPTABLES -X
$IPTABLES -Z
$IPTABLES -t nat -F
$IPTABLES -t nat -X
$IPTABLES -t nat -Z
$IPTABLES -t mangle -F
$IPTABLES -t mangle -X
$IPTABLES -t mangle -Z
$IPTABLES -F INPUT
$IPTABLES -F OUTPUT
$IPTABLES -F FORWARD
#################################################################
#                                                                                                       #
#                        CARREGAR MODULOS IPTABLES                                                      #
#                                                                                                       #
#  Modulos nao foram compilados diretamente no kernel mas podem ser carregados, linkados                #
#  ao iptables em tempo de uso para verificar modulos carregados digite 'lsmod' na linha                #
#  de comando                                                                                           #
#
#  ipt_mark -
#  ipt_MARK -
#  ipt_CONNMARK -
#  ip_tables -
#  iptable_nat -
#  ipt_conntrack -
#  ip_nat_ftp -
#  ip_conntrack_ftp -
#  ipt_layer7 -
#  ipt_LOG -
#  ipt_state -
#  iptale_filter -
#
#################################################################
/sbin/modprobe ipt_MARK
/sbin/modprobe ipt_mark
/sbin/modprobe ipt_CONNMARK
/sbin/modprobe ip_tables
/sbin/modprobe iptable_nat
/sbin/modprobe ipt_conntrack
/sbin/modprobe ip_nat_ftp
/sbin/modprobe ip_conntrack_ftp
#/sbin/modprobe ipt_layer7
/sbin/modprobe ipt_LOG
/sbin/modprobe ipt_state
/sbin/modprobe iptable_filter
#########################################################################
#                                                                                                               #
#       CHECA QUANTIDADE DE LINKS EXTERNOS APLICA REGRAS PARA CADA LINK EXTERNO                                 #
#                                                                                                               #
# _numlink - checa quantos links externos o firewal tem                                                         #
# if - se houver mais de um link execute primeiro bloco senao execute apenas o segundo  bloco                   #
#########################################################################
_numlink=`cat $0 | grep ^IFE | wc -l`
        if [ $_numlink -gt 1 ]
        then

        ip rule del table main
        ip route flush table $RT_M 2>/dev/null
        ip route del default table main 2>/dev/null

        ip link set lo up
        ip addr add 127.0.0.1/8 brd + dev lo

        ip link set $IFI1 up
        ip addr add $IPI1/$NMI1 brd + dev $IFI1
        ip rule add prio 50 table main
fi
_numlink=`cat $0 | grep ^IFE | wc -l`
        if [ $_numlink -gt 1 ]
        then
        for i in $(seq $_numlink);
                do
_IFEX=$(eval echo $`echo IFE$i`)
_IPEX=$(eval echo $`echo IPE$i`)
_NWEX=$(eval echo $`echo NWE$i`)
_NMEX=$(eval echo $`echo NME$i`)
_BRDEX=$(eval echo $`echo BRDE$i`)
_GWEX=$(eval echo $`echo GWE$i`)
_RTEX=$(eval echo $`echo RTE$i`)
###########################################################################
#                                                                                                                 #
#       REGRAS DE ROTEAMENTO AVANCADO PARA BALANCEAR LINK'S DE SAIDA                                              #
#                                                                                                                 #
#  Estas regras devem ser aplicadas para servidores que tenham aplicado o patche do julian anastasov,             #
#  e recompilado o kernel, este patch realiza o balanceamento de dois ou mais links por requisicao, ou seja       #
#  a cada nova requisicao e utilizado um link de saida, mas a cada nova requisicao e realizada um a consulta      #
#  no cache de rotas caso o ip origem e destino tenham uma conexao estabelecida recentemente a requisicao sai     #
#  pelo mesmo link utilizando na conexao anterior, caso contrario ele sai pelo link da vez do balanceamento,      #
#  isto serve para conexoes do tipo http's.                                                                       #
#                                                                                                                 #
#  Para baixar o patch de roteamento avancado http://www.ssi.bg/~ja/#routes                                       #
#  how to nano http://www.ssi.bg/~ja/nano.txt                                                                     #
#                                                                                                                 #
#  Obs.: O unico site que nao aceitou o patch corretamente foi Bradesco Pessoa Juridica                           #
#        Para que o mesmo funcione corretamente é necessário solicitar junto ao banco                             #
#        cadastramento dos ip's de todos link's utilizados pelo servidor                                          #
#                                                                                                                 #
###########################################################################
#########################################################################
#                                                                                                               #
#                 VARIAVEIS PARA TABELAS DE ROTEAMENTO                                                          #
#                                                                                                               #
#       Defina uma variavel para cada link de saida com valores entre 201 a 220 e uma                           #
#       tabela 222 que será a tabela de roteamento padrao.                                                      #
#       A tabela main dafault e removida e criada nova tabela main com menor prioridade.                        #
#       As regras verificam se já foram criados nomes e valores para as tabelas de                              #
#       roteamento, caso negativo será criado.                                                                  #
#                                                                                                               #
#       Obs.: DEFINIR ESTAS VARIAVEIS JUNTO COM A DEFINICAO DE VARIAVEIS DE INTERFACES                          #
#                                                                                                               #
#                                                                                                               #
#       RTE1=201                                                                                                #
#       RTE2=202                                                                                                #
#       RTEN=203..                                                                                              #
#                                                                                                               #
#       RT_M=222 NAO ALTERAR ESTE VALOR                                                                         #
#########################################################################
RT_M=222
     if ! cat /etc/iproute2/rt_tables | grep ^$_RTEX &> /dev/null
                then

                        echo $_RTEX       $_RTEX >> /etc/iproute2/rt_tables
                fi

     if ! cat /etc/iproute2/rt_tables | grep ^$RT_M &> /dev/null
                then
                        echo $RT_M       $RT_M >> /etc/iproute2/rt_tables
                fi

#################################################################################################
#                                                                                               #
# LIMPANDO REGRAS E REGRAS EM CACHE                                                             #
#                                                                                               #
# ip rule del - Limpa regras que estao na tabela                                                #
# ip route flush - Limpa cache de regras                                                        #
# ip route flush cache - Limpa o cache de conexoes, da tabela de roteamento                     #
#                                                                                               #
#################################################################################################

ip rule del table $_RTEX
ip route flush table $_RTEX 2>/dev/null
#########################################################################
#                                                                                                               #
# CRIACAO DE REGRAS DE ROTEAMENTO                                                                               #
#                                                                                                               #
#       Levanta as interfaces, adiciona ip/mascara/broadcast a interface cria prioridades nas tabelas           #
#       onde a tabela main padrao do sistema é excluida, é adicionada uma nova tabela main com prio             #
#       ridade baixa, é adicionada uma tabela '222' onde todos pacotes cairão por default nela e ela            #
#       ira encaminhar para as tabelas de cada link e cada tabela de link tem sua rota padrao, entao            #
#       ao cair em uma tabela de link o pacote segue pela rota padrao.                                          #
#                                                                                                               #
# ip link set up - Levanta interface de rede                                                                    #
# ip addr add - adiciona ip/mascara/broadcast e associa a interface de rede                                     #
# ip rule add - adiciona regra de prioridade as tabelas                                                         #
# ip addr flush dev - Limpa cache de regras no device                                                           #
# ip route add default - cria rota default dentro de cada tabela de link externo                                #
#                                                                                                               #
#########################################################################

        ip link set $_IFEX up
        ip addr flush dev $_IFEX
        ip addr add $_IPEX/$_NMEX brd $_BRDEX dev $_IFEX

        ip rule add prio $_RTEX from $_NWEX/$_NMEX table $_RTEX
        ip route add default via $_GWEX dev $_IFEX src $_IPEX proto static table $_RTEX
        ip route append prohibit default table $_RTEX metric 1 proto static

done  #### FIM LACO FOR ####
        ip rule del table $RT_M
        ip rule add prio $RT_M table $RT_M
        touch /tmp/route.tmp; chmod 777 /tmp/route.tmp
        echo "#!/bin/bash" > /tmp/route.tmp
        echo "ip route add default table $RT_M proto static \\" >> /tmp/route.tmp
               i=$_numlink;
                while [ $i -gt 0 ]
                do
                        if [ $i -gt 1 ]
                        then
                        echo  "nexthop via $(eval echo $`echo GWE$i`) dev $(eval echo $`echo IFE$i`) \\" >> /tmp/route.tmp
                        else
                        echo  "nexthop via $(eval echo $`echo GWE$i`) dev $(eval echo $`echo IFE$i`)" >> /tmp/route.tmp
                        fi
                i=$(($i-1))
                done
         sh /tmp/route.tmp

        ip route flush cache

fi  #### FIM IF ####
##########################################################################
#                                                                                                                #
# ATE AQUI O SCRIPT APLICOU REGRAS DE ROTEAMENTO, VERIFICA A EXISTENCIA DE MAIS DE 1 LINK EXTERNO CONFIGURADO,   #
# SE EXITIR ELE EXECUTA O BLOCO DE COMANDOS PARA CADA UM DOS LINKS, ESTAS REGRAS SAO REFERENTES                  #
# AO ROTEAMENTO AVANCADO E SE NAO EXISTIR MAIS DE UM LINK ESTAS REGRAS NAO SERAO APLICADAS                       #
#                                                                                                                #
##########################################################################

#################################################################################
#                                                                                                                       #
# POLITICA DAS CADEIAS DO FIREWALL                                                                                      #
#                                                                                                                       #
# Entendendo o Firewall iptables como um agente que fica entre o fluxo dos dados, dados entram para o servidor,         #
# dados saem do servidor, dados transpassam pelo servidor, sobre este fluxo de dados foram criadas cadeias de           #
# onde cada cadeia representa qual e o tipo de fluxo, entrada, saida ou roteamento.                                     #
# E sobre estas cadeias ha momentos em que o pacote pode ser manipulado pelo firewall os momentos podem ser             #
# definidos como                                                                                                        #
#                                                                                                                       #
# PREROUTING - assim que chega na interface de rede, o kernel sabe que ira mandar o pacote para outra inter             #
#       face pois ele pode ver a origem e qual o destino que o pacote quer chegari                                      #
# INPUT - A                                                                                                             #
#                                                                                                                       #
#                                                                                                                       #
#                                                                                                                       #
# A politica das cadeias do firewall definem qual sera a acao padrao do firewall quando receber um pacote               #
# em uma de suas tabelas as acoes mais utilizadas sao DROP e ACCEPT mas tambem podemos utilizar LOG, REJECT, .....      #
#                                                                                                                       #
#       DROP -                                                                                                          #
#       ACCEPT -                                                                                                        #
#       REJECT -                                                                                                        #
#       IGNORE -                                                                                                        #
#       LOG -                                                                                                           #
#                                                                                                                       #
#                                                                                                                       #
# Devemos utilizar politica padrao DROP nas cadeias INPUT e FORWARD, e ACCEPT nas cadeias PREROUTING                    #
# POSTROUTING.                                                                                                          #
#                                                                                                                       #
#################################################################################
        # TABELA FILTER

$IPTABLES -P INPUT ACCEPT               ## DROP
$IPTABLES -P FORWARD ACCEPT     ## DROP
$IPTABLES -P OUTPUT ACCEPT

        # TABELA NAT

$IPTABLES -t nat -P PREROUTING ACCEPT
$IPTABLES -t nat -P POSTROUTING ACCEPT
$IPTABLES -t nat -P OUTPUT ACCEPT
#################################################################################
#                                                                                                                       #
#               ESTADOS DE PACOTES                                                                                      #
#                                                                                                                       #
# Pacotes com conexao estabeleciada ou em processo de estabelecimento de conexao sao aceitos                            #
# Pacotes invalidos sao recusados                                                                                       #
#                                                                                                                       #
#################################################################################

$IPTABLES -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A INPUT -p udp -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A FORWARD -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A FORWARD -p udp -m state --state ESTABLISHED,RELATED -j ACCEPT

$IPTABLES -A INPUT -m state --state INVALID -j DROP
$IPTABLES -A FORWARD -m state --state INVALID -j DROP

# ACEITA PACOTES ICMP
$IPTABLES -t nat -A PREROUTING -m limit --limit 10/s -p icmp --icmp-type any -j ACCEPT
$IPTABLES -A INPUT -m limit --limit 10/s -p icmp --icmp-type any -j ACCEPT

# REGRA BRUTE FORCE SSH
$IPTABLES -A INPUT -p tcp --syn --dport 22 -m recent --name sshattack --set
$IPTABLES -A INPUT -p tcp --dport 22 --syn -m recent --name sshattack --rcheck --seconds 60 --hitcount 3 -j LOG --log-prefix 'SSH REJECT: ' --log-level 7
$IPTABLES -A INPUT -p tcp --dport 22 --syn -m recent --name sshattack --rcheck --seconds 60 --hitcount 3 -j REJECT --reject-with tcp-reset

        # SITES QUE NAO ACEITAM PROXY
$IPTABLES -t nat -A PREROUTING -s $NWI1/$NMI1 -p tcp -d 189.56.29.204 -j ACCEPT                 #NOSSA CAIXA
$IPTABLES -t nat -A PREROUTING -s $NWI1/$NMI1 -p tcp -d 200.201.174.207 -j ACCEPT               #CONECTIVIDADE SOCIAL
$IPTABLES -t nat -A PREROUTING -s $NWI1/$NMI1 -p tcp -d 200.201.174.200 -j ACCEPT               #CONECTIVIDADE SOCIAL
$IPTABLES -t nat -A PREROUTING -s $NWI1/$NMI1 -p tcp -d 200.201.174.204 -j ACCEPT               #CONECTIVIDADE SOCIAL
$IPTABLES -t nat -A PREROUTING -s $NWI1/$NMI1 -p tcp -d 75.125.108.18 -j ACCEPT                 #AIDF
$IPTABLES -t nat -A PREROUTING -s $NWI1/$NMI1 -p tcp -d 201.55.62.91  -j ACCEPT
$IPTABLES -t nat -A PREROUTING -s $NWI1/$NMI1 -p tcp -d 201.55.62.55  -j ACCEPT
$IPTABLES -t nat -A PREROUTING -s $NWI1/$NMI1 -p tcp -d 201.55.62.20  -j ACCEPT                 #RECEITA FEDERAL
$IPTABLES -t nat -A PREROUTING -s $NWI1/$NMI1 -p tcp -d 201.55.62.92  -j ACCEPT                 #RECEITA FEDERAL
$IPTABLES -t nat -A PREROUTING -s $NWI1/$NMI1 -p tcp -d 64.15.155.143 -j ACCEPT                 #GNFE
$IPTABLES -t nat -A PREROUTING -s $NWI1/$NMI1 -p tcp -d 200.198.224.14 -j ACCEPT                #NFE
$IPTABLES -t nat -A PREROUTING -s $NWI1/$NMI1 -p tcp -d 201.55.62.86 -j ACCEPT
$IPTABLES -t nat -A PREROUTING -s $NWI1/$NMI1 -p tcp -d 189.109.30.67 -j ACCEPT
$IPTABLES -t nat -A PREROUTING -s $NWI1/$NMI1 -p tcp -d 200.201.173.70 -j ACCEPT                #WEBP.CAIXA.GOV.BR
#$IPTABLES -t nat -A PREROUTING -s $NWI1/$NMI1 -p tcp -d 64.13.161.61 -j DROP                   #IMO.IM SITE MSN
$IPTABLES -t nat -A PREROUTING -s $NWI1/$NMI1 -p tcp -d 200.212.51.71 -j ACCEPT                 #COBCAIXA
#$IPTABLES -t nat -A PREROUTING -s $NWI1/$NMI1 -p tcp -d 72.232.279.58 -j ACCEPT                 #LECTORLIVE
#$IPTABLES -t nat -A PREROUTING -s $NWI1/$NMI1 -p tcp -d 189.114.223.109 -j ACCEPT               #LECTORLIVE
#$IPTABLES -t nat -A PREROUTING -s $NWI1/$NMI1 -p tcp -d 200.175.53.221 -j ACCEPT                #LECTORLIVE
#$IPTABLES -t nat -A PREROUTING -s $NWI1/$NMI1 -p tcp -d 72.232.237.34 -j ACCEPT                 #LECTORLIVE
#$IPTABLES -t nat -A PREROUTING -s $NWI1/$NMI1 -p tcp -d 189.126.2.49 -j ACCEPT                  #LECTORLIVE
#$IPTABLES -t nat -A PREROUTING -s $NWI1/$NMI1 -p tcp -d 72.232.237.35 -j ACCEPT                 #LECTORLIVE
#########################################################################
#                                                                                                               #
#  I    REGRAS APLICADAS EM CADA INTERFACE EXTERNA                                                              #
#       REDIRECIONAMENTOS (VITUAL SERVER)                                                                       #
#       PREROUTING E POSTROUTING                                                                                #
#                                                                                                               #
#########################################################################

        for i in $(seq $_numlink);
        do

        _IFEX=$(eval echo $`echo IFE$i`)
        _IPEX=$(eval echo $`echo IPE$i`)
        _NWEX=$(eval echo $`echo NWE$i`)
        _NMEX=$(eval echo $`echo NME$i`)
        _BRDEX=$(eval echo $`echo BRDE$i`)
        _GWEX=$(eval echo $`echo GWE$i`)
        _RTEX=$(eval echo $`echo RTE$i`)

########################################################################
#                                                                                                              #
# TCPMSS - Este parametro manipula a metrica de rede utilizada, esta metrica corresponde ao tamanho            #
#       em bytes que cada pacote tera sem ser incluido o cabeicalho, por padrao interfaces de rede             #
#       utilizam o valor de 1500 para metrica de rede, ADSL tambem, mas redes do tipo wireless utilizam        #
#       uma metrica menor, esta regra realiza ajuste automatico pois o tamanho dos pacotes recebidos sera      #
#       o tamanho que o servidor enviara                                                                       #
#       este valor pode ser testado/ajustado  utilizando o comando ping setando a opcao de tamanho  dos        #
#       pacotes                                                                                                #
#                                                                                                              #
########################################################################

$IPTABLES -t mangle -A POSTROUTING -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu -o $_IFEX

#################################################################################
#                                                                                                                       #
#       SNAT - E a traducao de enderecos para que no momento que o pacote saia da interface de rede altere o ip         #
#               requisitante (ip interno) para o ip quente da rede (ip externo) e quando o pacote retorna o             #
#               roteador identifica e altera o cabecalho do pacote com o ip da rede interna                             #
#                                                                                                                       #
#       Esta regra deve ser aplicada a cada link externo                                                                #
#       $IPTABLES -t nat -A POSTROUTING -o $IFE1 -s $NWI1/$NMI1 -j SNAT --to $_IPEX                                     #
#       Quando o ip externo e dinamico ao inves de utilizar SNAT devemos utilizar MASQUERADE                            #
#                                                                                                                       #
#              $IPTABLES -t nat -A POSTROUTING -s $NWI1/$NMI1 -o $IFE1 -j MASQUERADE                                   #
#################################################################################

$IPTABLES -t nat -A POSTROUTING -o $_IFEX -s $NWI1/$NMI1 -j SNAT --to $_IPEX

#################################################################################
#                                                                                                                       #
#       REDIRECIONAMENTOS PARA SERVIDORES INTERNOS                                                                      #
#                                                                                                                       #
#       CRIE REDIRECIONAMENTOS QUANDO ESTACOES DA REDE INTERNA OFERECEM ALGUM SERVICO PARA INTERNET                     #
#       EX.: SERVIDOR CAMERAS                                                                                           #
#                                                                                                                       #
#################################################################################

$IPTABLES -t nat -A PREROUTING -p tcp -i $_IFEX --dport 3389 -j DNAT --to 192.168.1.3
$IPTABLES -t nat -A PREROUTING -p tcp -i $_IFEX --dport 3390 -j DNAT --to 192.168.1.4:3389 # NOVO SERVIDOR
#$IPTABLES -t nat -A PREROUTING -p tcp -i $_IFEX --dport 3389 -j DNAT --to 192.168.1.27 # Maiara
$IPTABLES -t nat -A PREROUTING -p tcp -i $_IFEX --dport 5900 -j DNAT --to 192.168.1.21
$IPTABLES -t nat -A PREROUTING -p tcp -i $_IFEX --dport 5800 -j DNAT --to 192.168.1.21
$IPTABLES -t nat -A PREROUTING -p tcp -i $_IFEX --dport 2021 -j DNAT --to 192.168.1.1:21

$IPTABLES -t nat -A PREROUTING -p tcp -i $_IFEX --dport 35051 -j DNAT --to 192.168.1.29 # Mariani

$IPTABLES -t nat -I PREROUTING -i $IFI1 -p tcp --dport 1863 -j REDIRECT --to-port 1863 # MSN-Proxy

done #### FIM FOR
#################################################################
#                                                                                                       #
#       PROXY TRANSPARENTE COM CONECTIVIDADE SOCIAL E SITES QUE NAO FUNCIONAM QUANDO PASSAM PELO PROXY  #
#                                                                                                       #
# Estas regras adicionam redirecionamento de porta para que sites que nao aceitam proxy nao passem      #
# pelo proxy                                                                                            #
# caixa, permite adicionar regras para outros sites que nao aceitam passar por proxy de                 #
#                                                                                                       #
# Para firewall em um host e proxy em outro host utilizar a seguinte regra:                             #
#       $IPTABLES -t nat -A PREROUTING -s $NWI1/$NMI1 -p tcp --dport 80 -j DNAT \                       #
#                                               --to-destination "ip proxy":3128                        #
#                                                                                                       #
#################################################################

#$IPTABLES -t nat -A PREROUTING -s $NWI1/$NMI1 -p tcp --dport 80 -j REDIRECT --to-port 8080    #PROXY TRANSP. LINK1
#########################################################################
#
#       FORWARD PACOTES QUE IRAO TRANSITAR PELAS PLACAS DE REDE
#       AQUI IREMOS LIBERAR ACESSOS DOS USUARIOS A PORTAS ESPECIFICAS
#
#       - PARA PORTAS ONDE APENAS A REDE INTERNA TERÁ ACESSO: -i $IFI1
#
#       - PARA PORTAS ONDE A INTERNET E A REDE INTERNA TERAO ACESSO: RETIRE A REGRA "-i $IFI1"
#
#########################################################################

###### DE DENTRO PARA FORA #######
$IPTABLES -A FORWARD -i $IFI1 -p tcp --dport 80  -j ACCEPT                                 #HTTP
$IPTABLES -A FORWARD -i $IFI1 -p tcp --dport 22 -j ACCEPT                                  #SSH
$IPTABLES -A FORWARD -i $IFI1 -p tcp --dport 21 -j ACCEPT                                  #FTP
$IPTABLES -A FORWARD -i $IFI1 -p tcp --dport 20 -j ACCEPT                                  #FTP ATICO
$IPTABLES -A FORWARD -i $IFI1 -p udp --dport 20 -j ACCEPT                                  #FTP ATIVO
$IPTABLES -A FORWARD -i $IFI1 -p tcp --dport 443 -j ACCEPT                                 #HTTPS
$IPTABLES -A FORWARD -i $IFI1 -p udp --dport 53 -j ACCEPT                                  #DNS
$IPTABLES -A FORWARD -i $IFI1 -p tcp --dport 25 -j ACCEPT                                  #SMTP ENTRE REDES
$IPTABLES -A FORWARD -i $IFI1 -p tcp --dport 143 -j ACCEPT                                 #IMAP ENTRE REDES
$IPTABLES -A FORWARD -i $IFI1 -p tcp --dport 110 -j ACCEPT                                 #POP ENTRE REDES
$IPTABLES -A FORWARD -i $IFI1 -p tcp --dport 86 -j ACCEPT                                  #SPEEDY ZONE
$IPTABLES -A FORWARD -i $IFI1 -p tcp --dport 8017 -j ACCEPT                                #RECEITA
$IPTABLES -A FORWARD -i $IFI1 -p tcp --dport 3456 -j ACCEPT                                #RECEITA FEDERA
$IPTABLES -A FORWARD -i $IFI1 -p tcp --dport 587 -j ACCEPT

###### INPUT

##Vpn Pptp##############################################
$IPTABLES -A INPUT -p tcp --dport 1723 -j ACCEPT
$IPTABLES -A INPUT -p 47 -j ACCEPT
$IPTABLES -A FORWARD -s 192.168.0.0/16 -d 192.168.0.0/16 ACCEPT
########################################################
$IPTABLES -A INPUT -i lo -j ACCEPT                                                      #LOOPBACK LIBERADO
$IPTABLES -A INPUT -i $IFI1 -m pkttype --pkt-type broadcast -j ACCEPT                   #LIBERA BROADCAST P/ SAMBA
$IPTABLES -A INPUT -p tcp --dport 80  -j ACCEPT                                         #HTTP
$IPTABLES -A INPUT -p tcp --dport 443 -j ACCEPT                                         #HTTPS
$IPTABLES -A INPUT -p tcp --dport 22  -j ACCEPT                                         #SSH
$IPTABLES -A INPUT -i $IFI1 -p tcp --dport 5666  -j ACCEPT                              #NRPE/NAGIOS
$IPTABLES -A INPUT -i $IFI1 -p tcp --dport 25  -j ACCEPT                                #SMTP
$IPTABLES -A INPUT -i $IFI1 -p tcp --dport 143 -j ACCEPT                                #IMAP
$IPTABLES -A INPUT -i $IFI1 -p tcp --dport 110 -j ACCEPT                                #POP
$IPTABLES -A INPUT -i $IFI1 -p tcp --dport 21  -j ACCEPT                                #FTP
$IPTABLES -A INPUT -i $IFI1 -p tcp --dport 20  -j ACCEPT                                #FTP
$IPTABLES -A INPUT -i $IFI1 -p tcp --dport 139 -j ACCEPT                                #SAMBA ACESSO INTERNO
$IPTABLES -A INPUT -i $IFI1 -p udp --dport 139 -j ACCEPT                                #SAMBA ACESSO INTERNO
$IPTABLES -A INPUT -i $IFI1 -p tcp --dport 138 -j ACCEPT                                #SAMBA ACESSO INTERNO
$IPTABLES -A INPUT -i $IFI1 -p udp --dport 138 -j ACCEPT                                #SAMBA ACESSO INTERNO
$IPTABLES -A INPUT -i $IFI1 -p tcp --dport 137 -j ACCEPT                                #SAMBA ACESSO INTERNO
$IPTABLES -A INPUT -i $IFI1 -p udp --dport 137 -j ACCEPT                                #SAMBA ACESSO INTERNO
$IPTABLES -A INPUT -i $IFI1 -p tcp --dport 445 -j ACCEPT                                #SAMBA ACESSO INTERNO
$IPTABLES -A INPUT -i $IFI1 -p udp --dport 445 -j ACCEPT                                #SAMBA ACESSO INTERNO
$IPTABLES -A INPUT -i $IFI1 -p tcp --dport 8080 -j ACCEPT                               #DANSGUARDIAN
$IPTABLES -A INPUT -i $IFI1 -p udp --dport 53 -j ACCEPT                                 #CONSULTA DNS INTERNO
$IPTABLES -A INPUT -i $IFI1 -p tcp --dport 3306 -j ACCEPT                               #MYSQL
$IPTABLES -A INPUT -i $IFI1 -p tcp --dport 1863 -j ACCEPT                               #MSN-PROXY
$IPTABLES -A INPUT -i $IFI1 -p tcp -m multiport --dports 25000:30000 -j ACCEPT          #MSN_PROXY
$IPTABLES -A INPUT -p tcp --dport 10000 -j ACCEPT                                       #WEBMIN
$IPTABLES -A INPUT -m limit --limit 5/s -p icmp --icmp-type 3 -j ACCEPT                 #LIBERANDO ICMP
$IPTABLES -A INPUT -j LOG --log-prefix 'DROP INPUT ' --log-level 7                      #LOG DROP INPUT
$IPTABLES -A INPUT -i $IFI1 -p udp --dport 8070 -j ACCEPT                               #ASSISTIR PALESTRA ON-LINE
$IPTABLES -A INPUT -i $IFI1 -p udp --dport 1935 -j ACCEPT                               #ASSISTIR PALESTRA ON-LINE

Outras dicas deste autor
Nenhuma dica encontrada.
Leitura recomendada

Adicionando rotas de forma massiva a partir de um arquivo

Uso do XFreeRDP

Verificar se determinada porta está aberta com o comando echo (funciona remoto)

Projeto Root - Virtualização de Servidores

Instalação do Cisco Packet Tracer 7.3 no Ubuntu 18.04, Ubuntu 20.04 ou Mint 19.x

  

Comentários
[1] Comentário enviado por locoloco em 24/10/2016 - 16:02h

Boa tarde Marcelo.

Boa iniciativa em compartilhar esse script conosco.

Sou iniciante em linux e peguei o modelo do script como modelo para eu utilizar em uma VM. Configurei conforme a configuração da minha rede coloquei permissão total do arquivo como chmod +x /etc/init.d/firewall.sh, coloquei o caminho do arquivo no rc.local. Só que quando eu executo o comando /etc/init.d/firewall.sh restart ele dá os seguintes erros.

Arquivo e diretório nao encontrado!/bin/bash
Arquivo e diretório nao encontrado/proc/sys/net/ipv4/ip_foward
Arquivo e diretório nao encontrado/proc/sys/net/ipv4/conf/all/rp_filter
Arquivo e diretório nao encontrado/proc/sys/net/ipv4/tcp_ecn
Arquivo e diretório nao encontrado/sbin/iptables
Arquivo e diretório nao encontrado/sbin/iptables
Arquivo e diretório nao encontrado /sbin/iptables
Arquivo e diretório nao encontrado /sbin/iptables
Arquivo e diretório nao encontrado /sbin/iptables
Arquivo e diretório nao encontrado /sbin/iptables
Arquivo e diretório nao encontrado /sbin/iptables
Arquivo e diretório nao encontrado /sbin/iptables
Arquivo e diretório nao encontrado /sbin/iptables
Arquivo e diretório nao encontrado /sbin/iptables
Arquivo e diretório nao encontrado /sbin/iptables
Arquivo e diretório nao encontrado /sbin/iptables
not found .ATAL: Module ipt_CONNMARK
not found .ATAL: Module ipt_conntrack_ftp
/etc/init.d/firewallnew.sh: line 170: erro de sintaxe proximo do `token' nao esperado`$'\r''
'etc/init.d/firewallnew.sh: line 170: ` for i in $(seq $_numlink);

Me parece que ele tenta procurar outros arquivos só que dá erro. Gostaria de uma ajuda, onde eu estou errando ou se eu tenho que dá permissão para outros arquivos.

[2] Comentário enviado por mdezan em 24/10/2016 - 16:33h

boa tarde amigo, faz muito tempo que não utilizo este script, porém vou tentar lhe ajudar, quem sabe você não realize os ajustes e poste aqui depois.

Sou iniciante em linux e peguei o modelo do script como modelo para eu utilizar em uma VM. ( ok mas você terá que utilizar 3 interfaces distintas, para aprendizado seria mais fácil você utilizar uma máquina velha com 3 interfaces (uma interna e duas para receber os links)
Configurei conforme a configuração da minha rede coloquei permissão total do arquivo como chmod +x /etc/init.d/firewall.sh,
coloquei o caminho do arquivo no rc.local. Só que quando eu executo o comando /etc/init.d/firewall.sh restart ele dá os seguintes erros. (ok está certo, o arquivo está executavel e está iniciando junto com a máquina, não sei que versão trabalha mas pode utilizar update-rc.d meuscript defaults, "lembre-se que suas interfaces devem estar ativas, internet up antes de rodar o firewall, senão irá dar erro"

Arquivo e diretório nao encontrado!/bin/bash (bash é o interpretador do arquivo está na primeira linha do script "#!/bin/bash"

dê um ls em seu /bin e veja se há um arquivo bash lá, senão houver localize seu bash e modifique no script para o caminho correto, ou crie um link simbolico ln -s

Arquivo e diretório nao encontrado/proc/sys/net/ipv4/ip_foward você
Arquivo e diretório nao encontrado/proc/sys/net/ipv4/conf/all/rp_filter
Arquivo e diretório nao encontrado/proc/sys/net/ipv4/tcp_ecn

São módulos do kernel, você deve subi-los ou recompilar seu kernel para que possuam estes módulos sem subir como módulos, leia os comentários do script que irá lhe dar um norte:

CARREGAR MODULOS IPTABLES #
# #
# Modulos nao foram compilados diretamente no kernel mas podem ser carregados, linkados #
# ao iptables em tempo de uso para verificar modulos carregados digite 'lsmod' na linha #
# de comando

Arquivo e diretório nao encontrado/sbin/iptables
Arquivo e diretório nao encontrado/sbin/iptables
Arquivo e diretório nao encontrado /sbin/iptables
Arquivo e diretório nao encontrado /sbin/iptables
Arquivo e diretório nao encontrado /sbin/iptables
Arquivo e diretório nao encontrado /sbin/iptables
Arquivo e diretório nao encontrado /sbin/iptables
Arquivo e diretório nao encontrado /sbin/iptables
Arquivo e diretório nao encontrado /sbin/iptables
Arquivo e diretório nao encontrado /sbin/iptables
Arquivo e diretório nao encontrado /sbin/iptables
Arquivo e diretório nao encontrado /sbin/iptables

está com iptables ativo em sua distro? localize onde está o iptables

not found .ATAL: Module ipt_CONNMARK
not found .ATAL: Module ipt_conntrack_ftp

modulos que você deve carregar com modprobe ou recompilar seu kernel para que contenham esta funcionalidade.

/etc/init.d/firewallnew.sh: line 170: erro de sintaxe proximo do `token' nao esperado`$'\r''
'etc/init.d/firewallnew.sh: line 170: ` for i in $(seq $_numlink);

Acredito que o erro se dêp pois não está localizando o interpretador /bin/bash

Me parece que ele tenta procurar outros arquivos só que dá erro. Gostaria de uma ajuda, onde eu estou errando ou se eu tenho que dá permissão para outros arquivos.

Você deve ir ajustando o script a sua necessidade, na verdade ele é bem simples e bem comentado, você deve ir se familiarizando com o mesmo e ajustando sua vm/distro para ele.
Demorei muito tempo desenvolvendo este script(acredito que uns 4 ou 5 meses) após já ter o firewall pronto.
Você também deve ter conhecimento de iptables, kernel e shell script para conseguir colocar ele para funcionar.

Ps.: eu rodava ele em distro derivadas de debian, ficará mais fácil para você utilizar a mesma distro.

Espero ter lhe ajudado, bons estudos.





Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts