File "rc.firewall-full.sh"
Full path: /www/wwwroot/fabriciovc.eti.br/downloads/scripts/html_php/iproute/rc.firewall-full.sh
File size: 10.63 KiB (10890 bytes)
MIME-type: text/x-shellscript
Charset: utf-8
#!/bin/bash
##############################################################################
##### Autor: Fabricio Vaccari Constanski #
##### Ultima Atualizacao: 04/05/2007 #
##############################################################################
##### DEFININDO VARIAVEIS DE COMANDOS ########################################
IPTABLES=/sbin/iptables
MODPROBE=/sbin/modprobe
PSNI=/proc/sys/net/ipv4
##### DEFININDO VARIAVEIS DE REDE ############################################
# Rede interna da empresa. IP/Mascara
REDEINTERNA=192.168.0.0/24
# Endereco de Loopback
LOOPBACK=127.0.0.0/8
# Placa de rede ligada na rede interna
IFINTERNA=eth1
# Placa de rede ligada na rede externa
IFEXTERNA=eth0
# Placa de rede ligada na DMZ
#IFDMZ=eth2
# Interface de VPN
IFTUN=tun+
##### (DES)HABILITANDO BITS NO KERNEL ########################################
#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)
for RP in $PSNI/conf/*/rp_filter ; do echo 1 > $RP ; done
#Controle de ICMP
echo 0 > $PSNI/icmp_echo_ignore_all
echo 1 > $PSNI/icmp_echo_ignore_broadcasts
##### CARREGAR MODULOS CONNTRACK #############################################
$MODPROBE ip_conntrack
$MODPROBE ip_conntrack_ftp
$MODPROBE ip_nat_ftp
$MODPROBE ip_conntrack_irc
$MODPROBE ip_nat_irc
##### LIMPANDO TODAS AS 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 PADRAO ACCEPT #######################################
$IPTABLES -P INPUT ACCEPT
$IPTABLES -P FORWARD ACCEPT
$IPTABLES -P OUTPUT ACCEPT
##### LIBERAR SSH ############################################################
PSSH=22000
$IPTABLES -A INPUT -p tcp --dport $PSSH -j ACCEPT
case $1 in
start)
##### DEFININDO ENDERECOS IPS DOS SERVIDORES #########################
# Endereco(s) IP do servidor FTP
IPEXTFTP=200.183.205.7
IPINTFTP=192.168.0.207
# Endereco(s) IP do servidor de E-Mail
IPEXTMAIL=200.183.205.7
IPINTMAIL=192.168.0.207
# Endereco(s) IP do servidor DNS Primario
IPEXTDNS1=200.183.205.7
IPINTDNS1=192.168.0.207
# Endereco(s) IP do servidor DNS Secundario
IPEXTDNS2=200.183.205.6
IPINTDNS2=192.168.0.206
# Endereco(s) IP do servidor WWW
IPEXTWWW=200.183.205.6
IPINTWWW=192.168.0.206
# Endereco(s) IP do servidor Dados
IPINTDATA=192.168.0.201
# Endereco IP interno do Firewall
IPINTFW=192.168.0.210
IPEXTFW=200.183.205.2
##### DEFININDO AS PORTAS DOS SERVICOS ###############################
PORTAFTP="21"
PORTASMTP="25"
PORTADNS="53"
PORTAHTTP="80"
PORTAPOP="110"
PORTANTP="123"
PORTAIMAP="143"
PORTAHTTPS="443"
PORTAOVPN="1194"
PORTAPROXY="3128"
PORTASSH=$PSSH
##### DEFININDO POLITICA PADRAO DROP #################################
$IPTABLES -P INPUT DROP
$IPTABLES -P FORWARD DROP
$IPTABLES -P OUTPUT ACCEPT
##### LIBERAR LOOPBACK ###############################################
$IPTABLES -A INPUT -s $LOOPBACK -i lo -j ACCEPT
##### LIBERAR SERVIDORES #############################################
$IPTABLES -A FORWARD -s $IPINTWWW -j ACCEPT
$IPTABLES -A FORWARD -s $IPINTFTP -j ACCEPT
$IPTABLES -A FORWARD -s $IPINTDNS1 -j ACCEPT
$IPTABLES -A FORWARD -s $IPINTDNS2 -j ACCEPT
$IPTABLES -A FORWARD -s $IPINTMAIL -j ACCEPT
$IPTABLES -A FORWARD -s $IPINTDATA -j ACCEPT
##### LIBERAR REDE INTERNA COM EXCESSAO DA PORTA 80 ##################
$IPTABLES -A INPUT -s $REDEINTERNA -j ACCEPT
$IPTABLES -A FORWARD -p tcp -s $REDEINTERNA --dport ! 80 -j RETURN
$IPTABLES -A FORWARD -s $REDEINTERNA -j ACCEPT
##### LIBERAR RETORNOS DE CONEXAO ####################################
$IPTABLES -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A FORWARD -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
##### BLOQUEAR PACOTES TCP MAL FORMADOS ##############################
$IPTABLES -A FORWARD -p tcp ! --syn -m state --state NEW -j DROP
##### LIBERAR FTP ####################################################
# Liberar INPUT e/ou FORWARD
$IPTABLES -A FORWARD -p tcp --dport $PORTAFTP -j ACCEPT
$IPTABLES -A FORWARD -p tcp --sport $PORTAFTP -j ACCEPT
# Regras para SNAT/DNAT
$IPTABLES -t nat -A PREROUTING -p tcp -d $IPEXTFTP --dport $PORTAFTP -j DNAT --to $IPINTFTP
$IPTABLES -t nat -A POSTROUTING -p tcp -s $IPINTFTP --sport $PORTAFTP -j SNAT --to $IPEXTFTP
##### LIBERAR SMTP ###################################################
# Liberar INPUT e/ou FORWARD
$IPTABLES -A FORWARD -p tcp --dport $PORTASMTP -j ACCEPT
$IPTABLES -A FORWARD -p tcp --sport $PORTASMTP -j ACCEPT
# Regras para SNAT/DNAT
$IPTABLES -t nat -A PREROUTING -p tcp -d $IPEXTMAIL --dport $PORTASMTP -j DNAT --to $IPINTMAIL
$IPTABLES -t nat -A POSTROUTING -p tcp -s $IPINTMAIL --sport $PORTASMTP -j SNAT --to $IPEXTMAIL
##### LIBERAR DNS PRIMARIO ###########################################
# Liberar INPUT e/ou FORWARD
$IPTABLES -A FORWARD -p tcp --dport $PORTADNS -j ACCEPT
$IPTABLES -A FORWARD -p udp --dport $PORTADNS -j ACCEPT
$IPTABLES -A FORWARD -p tcp --sport $PORTADNS -j ACCEPT
$IPTABLES -A FORWARD -p udp --sport $PORTADNS -j ACCEPT
# Regras para SNAT/DNAT
$IPTABLES -t nat -A PREROUTING -p tcp -d $IPEXTDNS1 --dport $PORTADNS -j DNAT --to $IPINTDNS1
$IPTABLES -t nat -A PREROUTING -p udp -d $IPEXTDNS1 --dport $PORTADNS -j DNAT --to $IPINTDNS1
$IPTABLES -t nat -A POSTROUTING -p tcp -s $IPINTDNS1 --sport $PORTADNS -j SNAT --to $IPEXTDNS1
$IPTABLES -t nat -A POSTROUTING -p udp -s $IPINTDNS1 --sport $PORTADNS -j SNAT --to $IPEXTDNS1
##### LIBERAR DNS SECUNDARIO #########################################
# Regras para SNAT/DNAT
$IPTABLES -t nat -A PREROUTING -p tcp -d $IPEXTDNS2 --dport $PORTADNS -j DNAT --to $IPINTDNS2
$IPTABLES -t nat -A PREROUTING -p udp -d $IPEXTDNS2 --dport $PORTADNS -j DNAT --to $IPINTDNS2
$IPTABLES -t nat -A POSTROUTING -p tcp -s $IPINTDNS2 --sport $PORTADNS -j SNAT --to $IPEXTDNS2
$IPTABLES -t nat -A POSTROUTING -p udp -s $IPINTDNS2 --sport $PORTADNS -j SNAT --to $IPEXTDNS2
##### LIBERAR HTTP ###################################################
# Liberar INPUT e/ou FORWARD
$IPTABLES -A INPUT -p tcp -s $REDEINTERNA --dport $PORTAHTTP -j ACCEPT
$IPTABLES -A FORWARD -p tcp --dport $PORTAHTTP -j ACCEPT
$IPTABLES -A FORWARD -p tcp --sport $PORTAHTTP -j ACCEPT
# Regras para SNAT/DNAT
$IPTABLES -t nat -A PREROUTING -p tcp -d $IPEXTWWW --dport $PORTAHTTP -j DNAT --to $IPINTWWW
$IPTABLES -t nat -A POSTROUTING -p tcp -s $IPINTWWW --sport $PORTAHTTP -j SNAT --to $IPEXTWWW
##### LIBERAR POP ####################################################
# Liberar INPUT e/ou FORWARD
$IPTABLES -A FORWARD -p tcp --dport $PORTAPOP -j ACCEPT
$IPTABLES -A FORWARD -p tcp --sport $PORTAPOP -j ACCEPT
# Regras para SNAT/DNAT
$IPTABLES -t nat -A PREROUTING -p tcp -d $IPEXTMAIL --dport $PORTAPOP -j DNAT --to $IPINTMAIL
$IPTABLES -t nat -A POSTROUTING -p tcp -s $IPINTMAIL --sport $PORTAPOP -j SNAT --to $IPEXTMAIL
##### LIBERAR IMAP ###################################################
# Liberar INPUT e/ou FORWARD
$IPTABLES -A FORWARD -p tcp --dport $PORTAIMAP -j ACCEPT
$IPTABLES -A FORWARD -p tcp --sport $PORTAIMAP -j ACCEPT
# Regras para SNAT/DNAT
$IPTABLES -t nat -A PREROUTING -p tcp -d $IPEXTMAIL --dport $PORTAIMAP -j DNAT --to $IPINTMAIL
$IPTABLES -t nat -A POSTROUTING -p tcp -s $IPINTMAIL --sport $PORTAIMAP -j SNAT --to $IPEXTMAIL
##### LIBERAR HTTPS ##################################################
# Liberar INPUT e/ou FORWARD
$IPTABLES -A INPUT -p tcp -s $REDEINTERNA --dport $PORTAHTTPS -j ACCEPT
$IPTABLES -A FORWARD -p tcp --dport $PORTAHTTPS -j ACCEPT
$IPTABLES -A FORWARD -p tcp --sport $PORTAHTTPS -j ACCEPT
# Regras para SNAT/DNAT
$IPTABLES -t nat -A PREROUTING -p tcp -d $IPEXTWWW --dport $PORTAHTTPS -j DNAT --to $IPINTWWW
$IPTABLES -t nat -A POSTROUTING -p tcp -s $IPINTWWW --sport $PORTAHTTPS -j SNAT --to $IPEXTWWW
##### LIBERAR PROXY ##################################################
$IPTABLES -A INPUT -p tcp -s $LOOPBACK --dport $PORTAPROXY -j ACCEPT
$IPTABLES -A INPUT -p tcp -s $REDEINTERNA --dport $PORTAPROXY -j ACCEPT
##### LIBERAR VPN (OPENVPN) ##########################################
# Liberar INPUT e/ou FORWARD
$IPTABLES -A INPUT -p udp --dport $PORTAOVPN -j ACCEPT
$IPTABLES -A INPUT -i $IFTUN -j ACCEPT
$IPTABLES -A FORWARD -i $IFTUN -j ACCEPT
##### LIBERAR NTPDATE ################################################
$IPTABLES -A INPUT -p udp --dport $PORTANTP -j ACCEPT
$IPTABLES -A FORWARD -p udp --dport $PORTANTP -j ACCEPT
$IPTABLES -A FORWARD -p udp --sport $PORTANTP -j ACCEPT
##### LIBERAR VNC ####################################################
#$IPTABLES -A INPUT -p tcp --dport 5900 -j ACCEPT
#$IPTABLES -t nat -A PREROUTING -p tcp -d $IPEXTFW --dport 5900 -j DNAT --to 192.168.0.1
##### LIBERAR WEBMIN #################################################
#$IPTABLES -A INPUT -p tcp -s $REDEINTERNA --dport 10000 -j ACCEPT
##### LIBERAR ICMP ###################################################
$IPTABLES -A INPUT -p icmp --icmp-type 0 -m limit --limit 2/s -j ACCEPT
$IPTABLES -A INPUT -p icmp --icmp-type 3 -m limit --limit 2/s -j ACCEPT
$IPTABLES -A INPUT -p icmp --icmp-type 5 -m limit --limit 2/s -j ACCEPT
$IPTABLES -A INPUT -p icmp --icmp-type 8 -m limit --limit 2/s -j ACCEPT
$IPTABLES -A INPUT -p icmp --icmp-type 11 -m limit --limit 2/s -j ACCEPT
$IPTABLES -A INPUT -p icmp --icmp-type 12 -m limit --limit 2/s -j ACCEPT
$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
##### NEGAR IDENT ####################################################
$IPTABLES -A INPUT -p tcp --dport 113 -j REJECT --reject-with tcp-reset
$IPTABLES -A FORWARD -p tcp --dport 113 -j REJECT --reject-with tcp-reset
##### RESET EM CONEXOES PARA PORTA DESCONHECIDAS #####################
$IPTABLES -A INPUT -p tcp -j REJECT --reject-with tcp-reset
##### HABILITANDO MASQUERADE DA REDE INTERNA #########################
$IPTABLES -t nat -A POSTROUTING -s $REDEINTERNA -j MASQUERADE
;;
nat )
##### HABILITANDO MASQUERADE DA REDE INTERNA #########################
$IPTABLES -t nat -A POSTROUTING -s $REDEINTERNA -j MASQUERADE
;;
stop )
exit 0
;;
* )
echo "Use: ./iptables.sh {start|stop|nat}"
;;
esac