#!/bin/bash

# Configuracoes
IPTABLES=/sbin/iptables
MODPROBE=/sbin/modprobe
ECHO=/bin/echo
INTERFACE_LOCAL="eth0"
INTERFACE_INTERNET="ppp0"
SUB_REDE="192.168.0.0/24"
SQUID_PORTA="3128"

stop() {
    # Limpa regras anteriores
    $IPTABLES -Z
    $IPTABLES -X -t nat
    $IPTABLES -X
    $IPTABLES -F
    $IPTABLES -t nat -F
    
    $ECHO 0 > /proc/sys/net/ipv4/ip_forward
}

start() {
    # Carrega modulos
    $MODPROBE ip_conntrack_ftp
    $MODPROBE ip_nat_ftp
    $MODPROBE iptable_nat

    # Habilita compartilhamento com a internet
    $ECHO 1 > /proc/sys/net/ipv4/ip_forward
    $IPTABLES -t nat -A POSTROUTING -o lo -d 127.0.0.0/8 -j ACCEPT
    $IPTABLES -t nat -A POSTROUTING -s $SUB_REDE -o $INTERFACE_INTERNET -j MASQUERADE
    
    # Libera a saida de dados
    $IPTABLES -A OUTPUT -j ACCEPT
    
    # Libera a entrada de dados para a rede interna
    $IPTABLES -A INPUT -j ACCEPT
    
    # Proxy transparente: toda requisicao web vai para o squid
    $IPTABLES -t nat -A PREROUTING -i $INTERFACE_LOCAL -p tcp --dport 80 -j REDIRECT --to-port $SQUID_PORTA
    
    # Liberacao de portas para acesso externo (da internet)
    $IPTABLES -A INPUT -p tcp --dport 22 -j ACCEPT		# SSH
    $IPTABLES -A INPUT -p tcp --dport 80 -j ACCEPT		# Apache (http/web)
    $IPTABLES -A INPUT -p tcp --dport 5000:5100 -j ACCEPT	# FreeNX & VNC
    $IPTABLES -A INPUT -p tcp --dport 50000 -j ACCEPT		# OpenVPN
    $IPTABLES -A INPUT -p tcp --dport 65000 -j ACCEPT		# Webmin
    
    # Bloqueio de portas para acesso externo (da internet)
    $IPTABLES -A INPUT -p tcp -i $INTERFACE_INTERNET --dport 1:10000 --syn -j DROP
}

case "$1" in
    "start")
        start
    ;;
    "stop")
        stop
    ;;
    "restart")
        stop; start
    ;;
    *)
        echo "Usage firewal {start|stop|restart}"
esac
