#!/bin/bash

function start_firewall {
		#Limpieza de reglas.
		echo -n "@ Limpiando reglas iptables: "
		iptables -F
		iptables -X
		iptables -Z
		echo "hecho."
		
		#Cargando modulos.
		echo -n "@ Cargando modulos: "
		/sbin/depmod -a
		modprobe ip_tables
		modprobe ip_conntrack
		modprobe iptable_filter
		modprobe ipt_state
		modprobe ipt_LOG
		echo "hecho."
		
		#Política por defecto.
		echo -n "@ Aplicando política: "
		iptables -P INPUT DROP
		iptables -P OUTPUT ACCEPT
		echo "hecho."
		
		#Interfaz lo.
		echo -n "@ Interfaz lo: "
		iptables -A INPUT -i lo -j ACCEPT
		iptables -A OUTPUT -o lo -j ACCEPT
		echo "hecho."
		
		#Acceso		
		
		#Permitir salida.
		echo -n "@ Permitiendo salida: "
		iptables -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
		iptables -A OUTPUT -o eth0 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
		
		iptables -A INPUT -i ra0 -m state --state ESTABLISHED,RELATED -j ACCEPT
		iptables -A OUTPUT -o ra0 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
		echo "hecho."
		
		#Cerrar 
		echo -n "@ Cerrando conexiones no necesarias: "
		iptables -A INPUT -i eth0 -m state --state NEW,INVALID -j DROP
		iptables -A OUTPUT -o eth0 -m state --state NEW,INVALID -j DROP
		
		iptables -A INPUT -i ra0 -m state --state NEW,INVALID -j DROP
		iptables -A OUTPUT -o ra0 -m state --state NEW,INVALID -j DROP
		echo "hecho."
}

function stop_firewall {
		iptables -F INPUT
		iptables -F OUTPUT
		if [ $? = "0" ]; then
			dialog --title "Firewall" --infobox "Firewall parado correctamente" 0 0;
			sleep 1
			clear
		else
			dialog --title "Firewall" --msgbox "Fallo parando el firewall" 0 0;
		fi
}

function restart_firewall {
		$0 stop
		dialog --title "Firewall" --infobox "Reiniciando el firewall..." 0 0
		sleep 2
		$0 start
		dialog --title "Firewall" --msgbox "Firewall reiniciado." 0 0
		clear
}

	
case "$1" in
	start)
		dialog --title "Firewall" --yesno "¿Activo el firewall?" 0 0
			if [ $? = "0" ]; then
				clear
				start_firewall |grep @ >temp.txt
				dialog --title "Firewall" --textbox temp.txt 0 0 
				rm temp.txt
				clear
				exit
			else
				dialog --title "Firewall" --infobox "Pues nada, que lo disfrutes." 5 35
				sleep 2
				clear
				exit
			fi
		;;
	
	stop)
		stop_firewall
		;;
	
	restart)
		restart_firewall
		;;
		
	status)
		iptables -L -n
		;;
	limpiar)
		dialog --title "Firewall" --infobox "Limpiando las reglas y poniendo politica ACCEPT" 0 0
		sleep 1
		iptables -X
		iptables -F
		iptables -Z
		iptables -P INPUT ACCEPT
		iptables -P OUTPUT ACCEPT	
		dialog --title "Firewal" --infobox "hecho." 0 0
		sleep 1
		clear
		exit
		;;
	*)
		echo "usar: $0 {start|stop|restart|status|limpiar}"
		exit 1
		
esac
exit 0
