File "rc.firewall-arg.sh"

Full path: /www/wwwroot/fabriciovc.eti.br/downloads/scripts/temp/rc.firewall-arg.sh
File size: 13.83 KiB (14161 bytes)
MIME-type: text/x-shellscript
Charset: utf-8

Download   Open   Back

#!/bin/sh
#
# rc.firewall agent start/stop script.
#
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# Script de firewall com iptables                                             #
# http://downloads.fabriciovc.eti.br/iptables/                                #
#                                                                             #
# Copyright (C) 2014 - Fabricio Vaccari Constanski                            #
# Fabricio Vaccari Constanski | fabriciovc@fabriciovc.eti.br                  #
#                                                                             #
# Creative Commons                                                            #
# Atribuicao-Compartilhamento pela mesma Licenca 3.0 Brasil.                  #
# http://creativecommons.org/licenses/by-sa/3.0/br/                           #
#                                                                             #
# Você tem a liberdade de:                                                    #
# * Compartilhar: copiar, distribuir e transmitir a obra.                     #
# * Remixar: criar obras derivadas.                                           #
# * Fazer uso comercial da obra                                               #
#                                                                             #
# Sob as seguintes condições:                                                 #
# * Atribuição - Você deve creditar a obra da forma especificada pelo autor   #
# * Compartilhamento pela mesma licença - Se você alterar, transformar ou     #
#       criar em cima desta obra, você poderá distribuir a obra resultante    #
#       apenas sob a mesma licença, ou sob uma licença similar à presente.    #
# * Aviso: Para qualquer reutilização ou distribuição, você deve deixar claro #
#       a terceiros os termos da licença a que se encontra submetida esta     #
#       obra. A melhor maneira de fazer isso é com um link para a página      #
#       http://creativecommons.org/licenses/by/3.0/br/.                       #
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #

#=============================================================================#
# Comandos
IP=`which ip`
IPTABLES=`which iptables`
MODPROBE=`which modprobe`
#------------------------------------------------------------------------------
# /proc/sys/net/ipv4
PSNI=/proc/sys/net/ipv4
#------------------------------------------------------------------------------
# Variaveis de Interface
IF_LAN="eth1"
IF_LINK="eth0"
IF_TUN="tun+"
#------------------------------------------------------------------------------
# Variaveis de rede
IP_LAN="172.16.20.0/24"
#------------------------------------------------------------------------------
IP_18="200.195.191.18"
IP_19="200.195.191.19"
IP_20="200.195.191.20"
IP_21="200.195.191.21"
IP_22="200.195.191.22"
#------------------------------------------------------------------------------
# Variaveis para definir IPs de Servidores
IP_SRV_ANP="192.168.2.17"
IP_SRV_NTAGRO="192.168.2.19"
IP_SRV_SALONE01="192.168.2.200"
IP_SRV_SALONE02="192.168.2.201"
IP_SRV_VELTRAC="192.168.2.18"
#------------------------------------------------------------------------------
# Habilita repasse de pacotes
echo 1 > ${PSNI}/ip_forward
# Habilitar protecao contra synflood
echo 1 > ${PSNI}/tcp_syncookies
# Habilitar verificacao de rota de origem (Protecao p/ IP Spoofing)
# Definir como 0 quando estiver trabalhando com roteamento avancado
for RP in ${PSNI}/conf/*/rp_filter ; do echo 1 > ${RP} ; done
# Desabilita timestamps
echo 0 > /proc/sys/net/ipv4/tcp_timestamps
# Habilita protecao a mensagem de bad error
echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
# Desabilita redirecionamentos de ICMP
echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects
# Controle de ICMP
echo 0 > ${PSNI}/icmp_echo_ignore_all
echo 1 > ${PSNI}/icmp_echo_ignore_broadcasts
#------------------------------------------------------------------------------
# Carregando modulos
${MODPROBE} ip_tables
${MODPROBE} iptable_filter
${MODPROBE} iptable_nat
${MODPROBE} ip_conntrack
${MODPROBE} ip_conntrack_ftp
${MODPROBE} ip_nat_ftp
${MODPROBE} ipt_LOG
${MODPROBE} ipt_REJECT
${MODPROBE} ipt_state
${MODPROBE} ipt_MASQUERADE
#------------------------------------------------------------------------------
# Limpando regras e cadeias anteriores
${IPTABLES} -t filter -F
${IPTABLES} -t nat -F
${IPTABLES} -t mangle -F
${IPTABLES} -t filter -X
${IPTABLES} -t nat -X
${IPTABLES} -t mangle -X
#------------------------------------------------------------------------------
# Definindo politica default ACCEPT
${IPTABLES} -P INPUT ACCEPT
${IPTABLES} -P FORWARD ACCEPT
${IPTABLES} -P OUTPUT ACCEPT
#------------------------------------------------------------------------------
# Bloquear IPs
#
#IPS_BLOQ="
#"
#for IPSBLOQ in ${IPS_BLOQ}
#do
#    ${IPTABLES} -A INPUT -s ${IPSBLOQ} -j DROP
#    ${IPTABLES} -A FORWARD -s ${IPSBLOQ} -j DROP
#    #${IPTABLES} -A PREROUTING -t nat -s ${IPSBLOQ} -j DROP
#done
#------------------------------------------------------------------------------
# Liberar SSH
SSH_PORT="65522"
$IPTABLES -A INPUT -p tcp -m tcp --dport ${SSH_PORT} -j ACCEPT
#------------------------------------------------------------------------------
case $1 in
  start)
    #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
    # DEFININDO POLITICA DEFAULT
    #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
    # Definindo politica padrao DROP
    ${IPTABLES} -P INPUT DROP
    ${IPTABLES} -P FORWARD DROP
    ${IPTABLES} -P OUTPUT ACCEPT
    #--------------------------------------------------------------------------

    #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
    # CADEIA INPUT
    #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
    # Liberar loopback
    ${IPTABLES} -A INPUT -i lo -j ACCEPT
    #--------------------------------------------------------------------------
    # Liberar rede interna
    ${IPTABLES} -A INPUT -i ${IF_LAN} -j ACCEPT
    ${IPTABLES} -A INPUT -i ${IF_TUN} -j ACCEPT
    ${IPTABLES} -A INPUT -i eth2 -j ACCEPT
    ${IPTABLES} -A INPUT -i eth3 -j ACCEPT
    #--------------------------------------------------------------------------
    # Liberar retorno de conexoes
    ${IPTABLES} -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
    #--------------------------------------------------------------------------
    # Liberar ping (ICMP)
    ${IPTABLES} -A INPUT -p icmp --icmp-type 0  -m limit --limit 1/s -j ACCEPT
    ${IPTABLES} -A INPUT -p icmp --icmp-type 3  -m limit --limit 1/s -j ACCEPT
    ${IPTABLES} -A INPUT -p icmp --icmp-type 5  -m limit --limit 1/s -j ACCEPT
    ${IPTABLES} -A INPUT -p icmp --icmp-type 8  -m limit --limit 1/s -j ACCEPT
    ${IPTABLES} -A INPUT -p icmp --icmp-type 11 -m limit --limit 1/s -j ACCEPT
    ${IPTABLES} -A INPUT -p icmp --icmp-type 12 -m limit --limit 1/s -j ACCEPT
    #--------------------------------------------------------------------------
    # Protecao contra syn-flood
    ${IPTABLES} -A INPUT -p tcp -m tcp --tcp-flags ALL FIN,URG,PSH -j DROP
    ${IPTABLES} -A INPUT -p tcp -m tcp --tcp-flags SYN,RST SYN,RST -j DROP
    ${IPTABLES} -A INPUT -p tcp -m tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
    ${IPTABLES} -A INPUT -p tcp -m tcp --tcp-flags ALL NONE        -j DROP
    ${IPTABLES} -A INPUT -p tcp -m tcp --sport 0 --tcp-flags FIN,SYN,RST,ACK SYN -j DROP
    #--------------------------------------------------------------------------
    # Reset em conexoes para portas desconhecidas
    ${IPTABLES} -A INPUT -p tcp -j REJECT --reject-with tcp-reset
    #--------------------------------------------------------------------------
    # Protecao contra syn-flood
    ${IPTABLES} -A INPUT -p tcp --syn -m limit --limit 1/s -j ACCEPT
    #--------------------------------------------------------------------------
    # Protecao contra port scanners
    ${IPTABLES} -A INPUT -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT
    #--------------------------------------------------------------------------
    # Habilitando LOG
    #${IPTABLES} -A INPUT -j LOG --log-level 7 --log-prefix "INPUT LOG: "
    #--------------------------------------------------------------------------

    #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
    # CADEIA FORWARD
    #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
    # Liberar retorno de conexoes
    ${IPTABLES} -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
    #--------------------------------------------------------------------------
    # Liberar rede interna
    ${IPTABLES} -A FORWARD -i ${IF_LAN} -j ACCEPT
    ${IPTABLES} -A FORWARD -i ${IF_TUN} -j ACCEPT
    ${IPTABLES} -A FORWARD -o ${IF_TUN} -j ACCEPT
    ${IPTABLES} -A FORWARD -i eth2 -j ACCEPT
    ${IPTABLES} -A FORWARD -i eth3 -j ACCEPT
    #--------------------------------------------------------------------------
    # Liberar Portas
    ${IPTABLES} -A FORWARD -p tcp -m tcp --dport 1025  -j ACCEPT
    ${IPTABLES} -A FORWARD -p tcp -m tcp --dport 3389  -j ACCEPT
    ${IPTABLES} -A FORWARD -p tcp -m tcp --dport 4820  -j ACCEPT
    ${IPTABLES} -A FORWARD -p tcp -m tcp --dport 8200  -j ACCEPT
    ${IPTABLES} -A FORWARD -p tcp -m tcp --dport 8201  -j ACCEPT
    ${IPTABLES} -A FORWARD -p tcp -m tcp --dport 33389 -j ACCEPT
    ${IPTABLES} -A FORWARD -p tcp -m tcp --dport 34200 -j ACCEPT
    ${IPTABLES} -A FORWARD -p tcp -m tcp --dport 34201 -j ACCEPT
    ${IPTABLES} -A FORWARD -p tcp -m tcp --dport 35200 -j ACCEPT
    ${IPTABLES} -A FORWARD -p tcp -m tcp --dport 35201 -j ACCEPT
    #--------------------------------------------------------------------------
    # Liberar ping (ICMP)
    ${IPTABLES} -A FORWARD -p icmp --icmp-type 0  -m limit --limit 2/s -j ACCEPT
    ${IPTABLES} -A FORWARD -p icmp --icmp-type 3  -m limit --limit 2/s -j ACCEPT
    ${IPTABLES} -A FORWARD -p icmp --icmp-type 5  -m limit --limit 2/s -j ACCEPT
    ${IPTABLES} -A FORWARD -p icmp --icmp-type 8  -m limit --limit 2/s -j ACCEPT
    ${IPTABLES} -A FORWARD -p icmp --icmp-type 11 -m limit --limit 2/s -j ACCEPT
    ${IPTABLES} -A FORWARD -p icmp --icmp-type 12 -m limit --limit 2/s -j ACCEPT
    #--------------------------------------------------------------------------
    # Reset em conexoes para portas desconhecidas
    ${IPTABLES} -A FORWARD -p tcp -j REJECT --reject-with tcp-reset
    #--------------------------------------------------------------------------
    # Protecao contra syn-flood
    ${IPTABLES} -A FORWARD -p tcp --syn -m limit --limit 2/s -j ACCEPT
    #--------------------------------------------------------------------------
    # Protecao contra port scanners
    ${IPTABLES} -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT
    #--------------------------------------------------------------------------
    # Habilitando LOG
    #${IPTABLES} -A FORWARD -j LOG --log-level 7 --log-prefix "FORWARD LOG: "
    #--------------------------------------------------------------------------

    #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
    # CADEIA NAT PREROUTING
    #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
    # NATs de entrada
    # NTAGRO RDP
    ${IPTABLES} -A PREROUTING -t nat -i ${IF_LINK} -d ${IP_20} -p tcp --dport 3389  -j DNAT --to ${IP_SRV_NTAGRO}
    # Equipamentos ANP
    ${IPTABLES} -A PREROUTING -t nat -i ${IF_LINK} -d ${IP_20} -p tcp --dport 1025  -j DNAT --to ${IP_SRV_ANP}
    ${IPTABLES} -A PREROUTING -t nat -i ${IF_LINK} -d ${IP_20} -p tcp --dport 4820  -j DNAT --to ${IP_SRV_VELTRAC}
    ${IPTABLES} -A PREROUTING -t nat -i ${IF_LINK} -d ${IP_20} -p tcp --dport 33389 -j DNAT --to ${IP_SRV_VELTRAC}:3389
    # Standalone 001
    ${IPTABLES} -A PREROUTING -t nat -i ${IF_LINK} -d ${IP_21} -p tcp --dport 8200  -j DNAT --to ${IP_SRV_SALONE01}
    ${IPTABLES} -A PREROUTING -t nat -i ${IF_LINK} -d ${IP_21} -p tcp --dport 34200 -j DNAT --to ${IP_SRV_SALONE01}
    ${IPTABLES} -A PREROUTING -t nat -i ${IF_LINK} -d ${IP_21} -p tcp --dport 35200 -j DNAT --to ${IP_SRV_SALONE01}
    # Standalone 002
    ${IPTABLES} -A PREROUTING -t nat -i ${IF_LINK} -d ${IP_21} -p tcp --dport 8201  -j DNAT --to ${IP_SRV_SALONE02}
    ${IPTABLES} -A PREROUTING -t nat -i ${IF_LINK} -d ${IP_21} -p tcp --dport 34201 -j DNAT --to ${IP_SRV_SALONE02}
    ${IPTABLES} -A PREROUTING -t nat -i ${IF_LINK} -d ${IP_21} -p tcp --dport 35201 -j DNAT --to ${IP_SRV_SALONE02}
    #--------------------------------------------------------------------------

    #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
    # CADEIA NAT POSTROUTING
    #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
    # Regras SNAT
    ${IPTABLES} -A POSTROUTING -t nat -s ${IP_SRV_ANP}      -o ${IF_LINK} -j SNAT --to ${IP_20}
    ${IPTABLES} -A POSTROUTING -t nat -s ${IP_SRV_NTAGRO}   -o ${IF_LINK} -j SNAT --to ${IP_20}
    ${IPTABLES} -A POSTROUTING -t nat -s ${IP_SRV_VELTRAC}  -o ${IF_LINK} -j SNAT --to ${IP_20}
    ${IPTABLES} -A POSTROUTING -t nat -s ${IP_SRV_SALONE01} -o ${IF_LINK} -j SNAT --to ${IP_21}
    ${IPTABLES} -A POSTROUTING -t nat -s ${IP_SRV_SALONE02} -o ${IF_LINK} -j SNAT --to ${IP_21}
    #--------------------------------------------------------------------------
    # Liberar NAT
    ${IPTABLES} -A POSTROUTING -t nat -o ${IF_LINK} -j MASQUERADE
    #--------------------------------------------------------------------------

    #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
    # CADEIA MANGLE
    #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
    #--------------------------------------------------------------------------
    exit 0
  ;;
  nat)
    # Liberar NAT
    ${IPTABLES} -A POSTROUTING -t nat -o ${IF_LINK} -j MASQUERADE
    exit 0
  ;;

  stop)
    ipRouteStop
    exit 0
  ;;
  *)
    echo "Use: $0 {start|stop|nat}"
  ;;
esac

PHP File Manager