Enviado em 05/01/2013 - 08:52h
Ola amigos,
--------------------------------------------------------------
#!/bin/bash
# A linha acima é conhecida como shebang e server para chamar o interpretador do script
# poderia-se trocar o bash pelo sh ou outro shell de sua preferência
########################################################
# EXEMPLO DE SCRIPT DE FIREWALL PARA ARTIGO NO SITE www.vivaolinux.com.br
# CRIADO POR phrich
# Data da última alteração: 11/01/2012
# ######################################################
######################
# DECLARANDO AS VARIÁVEIS #
######################
# Interface de rede ligada a internet
IFACE_WEB="eth0"
# Interface de rede ligada a rede interna
IFACE_REDE="eth1"
# Rede interna
REDE_INTERNA="192.168.25.0/24"
# Portas liberadas TCP
PORTAS_TCP="20,21,53,80,443"
# Portas liberadas UDP
PORTAS_UDP="53"
# Portas liberadas para a rede interna
PORTAS_REDE_INTERNA="25,110"
############################################################
# FUNÇÃO START #
# Esta função limpa as regras criadas anteriormente, e insere as regras listadas na função
###########################################################
function start () {
#++++++++++++++++++++++
# LIMPA AS REGRAS EXISTENTES #
#+++++++++++++++++++++#
# Limpa as regras da tabela filter
iptables -F
# Limpa as regras da tabela nat
iptables -t nat -F
# DEFINE AS POLICAS PADRÕES DO IPTABLES COMO DROP #
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
# HABILITA O ROTEAMENTO NO KERNEL #
echo 1 > /proc/sys/net/ipv4/ip_forward
# CRIA A IDA E VOLTA DO ACESSO NAS CHAINS INPUT, OUTPUT E FORWARD, ASSIM NÃO PRECISAMOS CRIAR A IDA E VOLTA NAS REGRAS
# Não vamos nos aprofundar neste assunto, mas vale a pena dar uma estudada no módulo state ;-)
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
##############
# REGRAS DE NAT #
#############
# COMPARTILHA A INTERNET #
iptables -t nat -A POSTROUTING -s $REDE_INTERNA -o $IFACE_WEB -j MASQUERADE
#iptables -t nat -A PREROUTING -o $REDE_INTERNA -o $IFACE_WEB -j MASQUERADE
# REDIRECIONA O ACESSO RDP PARA OUTRO SERVIDOR DENTRO DA REDE INTERNA#
#iptables -t nat -A PREROUTING -p tcp --dport 3389 -j REDIRECT --to 192.168.25.100:3389
iptables -t nat -A PREROUTING -i $IFACE_WEB -p tcp --dport 3389 -j DNAT --to 192.168.25.254:3389
###############
# REGRAS DE INPUT #
###############
#Liberar porta internet
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 8080 -j ACCEPT
# Libera o acesso SSH de qualquer origem
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# Libera o squid a partir da rede interna
iptables -A INPUT -s $REDE_INTERNA -p tcp --dport 3128 -j ACCEPT
#DNS
#iptables -A INPUT -s $REDE_INTERNA -p udp --dport 53
iptables -A INPUT -p tcp --dport 53 -j ACCEPT
iptables -A INPUT -p udp --dport 53 -j ACCEPT
# Aceita ping apenas da rede interna
iptables -A INPUT -s $REDE_INTERNA -p icmp --icmp-type 8 -j ACCEPT
################
# REGRAS DE OUTPUT #
################
# Libera as portas constantes na variável $PORTAS_TCP (para liberar mais portas, basta inserir as mesmas na variável citada)
#iptables -A OUTPUT -p tcp -m multiport --dports $PORTAS_TCP -j ACCEPT
iptables -A OUTPUT -p tcp --dport 20 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 21 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 53 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 443 -j ACCEPT
# Libera ping para qualquer lugar
iptables -A OUTPUT -p icmp --icmp-type 8 -j ACCEPT
##################
# REGRAS DE FORWARD #
#################
#Squid
#iptables -A FORWARD -p tcp --dport 53 -j ACCEPT
#iptables -A FORWARD -p tcp --dport 80 -j ACCEPT
#iptables -A FORWARD -p tcp --dport 443 -j ACCEPT
#iptables -A FORWARD -p tcp --dport 20 -j ACCEPT
#iptables -A FORWARD -p tcp --dport 21 -j ACCEPT
# Libera as portas constantes em na variável $PORTAS_REDE_INTERNA (para liberar mais portas, basta inserir as mesmas na variável citada)
#iptables -A FORWARD -p tcp -m multiport --dports $PORTAS_REDE_INTERNA -j ACCEPT
iptables -A FORWARD -p tcp --dport 25 -j ACCEPT
iptables -A FORWARD -p tcp --dport 110 -j ACCEPT
#DNS
iptables -A FORWARD -p udp --dport 53 -j ACCEPT
iptables -A FORWARD -p udp --dport 5353 -j ACCEPT
# Libera RDP citado na regra de NAT
iptables -A FORWARD -p tcp --dport 3389 -d 192.168.25.254 -j ACCEPT
# FINAL DA FUNÇÃO START #
}
############################################################################
# CRIA FUNÇÃO STOP #
# Esta função limpa todas as regras, deixa as políticas padrões com ACCEPT e deixa todo e qualquer acesso liberado
############################################################################
function stop () {
# LIMPA AS REGRAS EXISTENTES #
iptables -F
iptables -t nat -F
# DEFINE AS POLÍTICAS PADRÕES DO IPTABLES COMO DROP #
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
# HABILITA O ROTEAMENTO NO KERNEL #
echo 1 > /proc/sys/net/ipv4/ip_forward
# COMPARTILHA A INTERNET #
iptables -t nat -A POSTROUTING -s $REDE_INTERNA -o $IFACE_WEB -j MASQUERADE
# Caso queira manter as regras de NAT favor copiar as regras de nat
# e as correspondentes as mesmas de forward aqui
# FINAL DA FUNÇÃO STOP #
}
# Criando os parâmetros para o script, esses parâmetros serão start, stop e restart vejamos:
# start - chama a função start (Regras inseridas e política padrão como DROP)
# stop - chama a função stop (Sem regras e com a política padrão como ACCEPT, util para realizar testes)
# restart - chama a função stop e depois a função start (Carrega as novas regras que venha a ser inseridas na função start)
# Qualquer parâmetro que não seja start, stop ou restart não será válido e nada será alterado.
case $1 in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
*)
echo "Insira um parâmetro para /etc/init.d/firewall... start | stop | restart"
exit 0
;;
esac
# FIM DO SCRIPT DE FIREWALL #