# firewall-easy-lib 0.30
#
#	Configuracin de firewall-easy
#
#	Copyright (C) 2000:	Manel Marin <manel3@apdo.com>
#	Licence:		GNU GPL version >= 2
#
#
#	La idea es que este archivo es una guia de puertos usados
#	por los servicios, y un archivo de configuracin a la vez ;-)
#	se genera un script shell gracias a awk...
#
#	Importante: LAS REGLAS SE EVALUAN EN EL ORDEN EN QUE ESTAN
#
#
#	PARA HACER EFECTIVOS LOS CAMBIOS: Lanzar como root el comando firewall
#


# ADAPTA ESTA CONFIGURACION A TU SISTEMA:
#
# 1)	Rellena la CONFIGURACION (interfaces) con los valores adecuados en
#	el archivo firewall-easy.conf (en forma de varibles bash)
#
# 2)	Modifica (comenta/descomenta) los puertos remotos prohibidos
#
# 3)	Modifica los PUERTOS LOCALES PROHIBIDOS (ms abajo) para prohibir
#	aquellos que realmente estn escuchando en el interface de Internet
#	(y no puedes restringir al interface local) y comenta el resto de
#	lineas


#-------------------------------------------------------------------------------
# CONFIGURACION AUTOMATICA
#	En /etc/firewall-easy.conf se realiza una deteccin automtica
#	de IP, red/mascara, y servidores DNS
#
#	En caso necesario puedes editarlo y poner valores manualmente
#-------------------------------------------------------------------------------

 import /etc/firewall-easy.conf	# Archivo con interfaces y autodeteccin...
				#  que no es modificado al instalar una nueva
				#  versin del paquete.
				#  son variables que sern tratadas por bash


#-------------------------------------------------------------------------------
# CONFIGURACION OPCIONAL
# 	Estas variables se usan como si fueran las de bash pero se puede
#	dejar espacios entre variable y el igual, y entre igual y valor ;-)
#	y no hay que poner $ en las $VARIABLES
#-------------------------------------------------------------------------------

# --- CONFIGURACION IFACES E IPs --- (por defecto vacio, es lo ms seguro)
# IFACE_REDLOCAL = 		# Interfaces sin cortafuegos (mejor ninguno)
# IFACE_ADSL =			# Para obtener configuracin ADSL por DHCP
# IFACE_MASQ = ppp0 $IFACE_ADSL	# Interfaces por los que enmascarar
# DNS =				# servidores DNS
# FTP =				# servidores FTP utilizados en modo activo
# NTP =				# servidores NTP (de hora) utilizados
# NO_IP =			# IPs prohibidas
#
# RED_LO1=127.0.0.1/8		# Red/mascara del interface loopback
# RED_LOCAL=		# Red/mascara local (intranet)
# IP_REDLOCAL=		# La IP en iface local de este servidor
# IP_ADSL1=		# !!!!!! Poner aqui IP en iface ADSL de este servidor
# GW_ADSL1=		# !!!!!! Poner aqui IP de GW del router ADSL !!!!!!


# --- OPCIONES DE CONFIG --- (no importa el valor, solo que existan o no)
 TESTFW = si		# Descomentar para hacer test cortafuegos en arranque
 #NOLOG = si		# Descomentar para NO hacer NINGUN LOG
 #LOGALLDENY = si	# Descomentar para hacer log de toda regla DENY (debug)
 #DEBUG = si		# Descomentar para hacer debug


# --- NO TOCAR ---
 SPOOF = "$RED_LO1 $RED_LOCAL $IP_ADSL1"	# IPs mi red local e iface lo
 PRIV = "10.0.0.0/8 172.16.0.0/12 192.168.0.0/16"	# Rangos de IP privadas



#*** MINIGUIA DE USO ***********************************************************
#
#	Solo modificar si realmente se sabe lo que se est haciendo...
#
#
#   CAMPOS:
#
#	NO/>/*
#	    NO 	NO aceptar conexin
#	    NO! NO aceptar conexin y envio de paquete al LOG
#	    >	Solo aceptar paquetes de conexiones iniciadas por nosotros
#	    >>	Como el anterior ms conexiones relacionadas (solo kernel 2.4)
#	    * 	Aceptar inicios de conexin desde internet
#	    RST		Reset de la conexin (= REJECT)
#	    REDIR	*POR TESTEAR* Redireccin de IP hacia "->puerto"
#	    MASQUERADE	Enmascaramiento de IP (Remote = Interface de salida)
#
#	modificadores de prioridad:
#	    +	Modifica el TOS para aumentar la prioridad de los paquetes
#	    ++	Idem con mas prioridad (= "+" con kernel 2.0)
#	    -	Modifica el TOS para disminuir la prioridad de los paquetes
#	    --	Idem con menos prioridad (= "-" con kernel 2.0)
#		*** La prioridad no funciona con iptables-kernel 2.4 ***
#
#	Proto	Protocolo: tcp udp tcp,udp icmp *
#	Local	IP:puerto local [1]
#	<>	Solo enviar ">" / solo recibir "<" / enviar y recibir "<>"
#	Remote	IP:puerto remoto [1]
#	Nombre	Nombre a reportar en informes
#
#
#   [1] Formatos admitidos para Local y Remoto:
#	    puerto		Puerto en nmero o nombre en /etc/services
#	    puerto:puerto2	Rango de puertos
#	    $DNS		VARIABLE_IP definida antes (variable bash)
#	    1.2.3.4		IP en nmero/mscara
#	    1.2.3.4:puerto
#	    1.2.3.4:puerto:puerto2
#
#
#   VARIABLES:
#
#	HI no necesita tener $ delante al usarla
#	Admiten variables con varios valores: INTERFACE, IPLOCAL, IPREMOTE y
#	 las direcciones Local y Remote de las reglas, generando bucles bash
#	 for en el script generado
#	$IPLOCAL1 las variables acabadas en nmero se asumen como de un solo
#	 valor y no generan bucles bash for en el script generado
#
#
#   VARIABLES ESPECIALES:
#
#	INTERFACE	Interface a especificar en las reglas siguientes	
#	IPLOCAL		IP local a usar en las reglas siguientes (si no hay IP)
#	IPREMOTE	IP remota a usar en las reglas siguientes (si no hay IP)
#	HI		Puertos por los que hacemos peticiones a Internet como
#			 clientes = 1024:65535
#  	*		= todos los valores posibles (interfaces, protocolos)
#			Excepcin cuando se usa como IP: 
#			 Reglas *, >, >> IP = todas las IP en IPLOCAL/IPREMOTE
#			 Reglas NO y RST IP = 0/0 (todas las IP)
#
#
#   COMENTARIOS:
#
#  	Las lineas que empiezan con '#' son comentarios y son ignoradas
#
#
#*******************************************************************************



#### ENMASCARAMIENTO DE IP #####################################################
# Enmascarar clientes hacia internet (FORWARD se activa solo si es preciso)
#MASQ	Proto	Local <> Remote_iface		Nombre
#--------------------------------------------------------------------

INTERFACE = $IFACE_MASQ
MASQUERADE *	$RED_LOCAL > *			Aplicar enmascaramiento de IP



#### REGLAS PARA EL LOOPBACK ###################################################
#NO/>/*	Proto	Local <> Remote			Nombre
#--------------------------------------------------------------------

INTERFACE = lo
*	*	$RED_LO1 <> $RED_LO1		Acceso para mi loopback
*	*	$IP_REDLOCAL <> $IP_REDLOCAL 	Conexiones locales
						# (no salen por eth)
*	*	1.1.1.1 > 1.1.1.1		Salidas de IP alias p. autotest


#### REGLAS PARA RED LOCAL INTERNA #############################################
# Destino de los paquetes de mis clientes
#NO/>/*	Proto	Local <> Remote			Nombre
#--------------------------------------------------------------------

INTERFACE = $IFACE_REDLOCAL
*	*	* <> $RED_LOCAL				Acceso de mi red local
*	udp	0.0.0.0:bootps < 255.255.255.255:bootpc	Peticiones DHCP win
						# si somos el servidor DHCP



#### REGLAS PARA EL ROUTER ADSL (IP por DHCP) ##################################
#  GW_ADSL1 esta definida al principio
#NO/>/*	Proto	Local <> Remote			Nombre
#--------------------------------------------------------------------

INTERFACE = $IFACE_ADSL
*	udp	0.0.0.0:bootpc > 255.255.255.255:bootps     Paso DHCP INIT uno
*	udp	255.255.255.255:bootpc < $GW_ADSL1:bootps   Paso DHCP INIT dos	
>	udp	$IP_ADSL1:bootpc > $GW_ADSL1:bootps  	Paso DHCP RENEW uno
>	udp	$IP_ADSL1:bootpc < $GW_ADSL1:bootps 	Paso DHCP RENEW dos

NO	udp	$IP_ADSL1:bootps < $GW_ADSL1:bootpc	Peticiones del router


#### REGLAS PARA DEMAS INTERFACES (INTERNET) ###################################

INTERFACE = *
IPLOCAL = *
IPREMOTE = *

#### ANTI-SPOOF E IPs PROHIBIDAS ###############################################
#NO/>/*	Proto	Local <> Remote			Nombre
#--------------------------------------------------------------------

NO!	*	* < $SPOOF		IPs haciendose pasar por mi
NO!	*	* < $NO_IP		IPs prohibidas expresamente
NO	*	* < $PRIV		Trafico de IPs privadas


#### PUERTOS LOCALES PROHIBIDOS ################################################
#NO/>/*	Proto	Local <> Remote			Nombre
#--------------------------------------------------------------------

    #OPCIONAL (REGLAS DE CONTEO)
NO!	tcp,udp	0 < *			Puerto cero cerrado
NO!	tcp	systat <  *		Lista de procesos y usuarios
NO!	tcp	ftp < * 		Servidor FTP
NO!	tcp,udp	ssh < *			Secure Shell (tcp y udp?)
NO!	tcp	telnet < *		Telnet	
NO!	tcp	smtp < *		Servidor smtp
NO!	tcp	time < *		Servidor de hora
NO!	tcp,udp	domain < *		Servidor dns
NO!	tcp,udp	bootps:bootpc < *	Servidor y cliente bootp (tcp y udp?)
NO!	udp	tftp < *		Servidor tftp
NO!	tcp	finger <  *		Informacion de usuarios
NO!	tcp	http < *		Servidor web
NO!	tcp	pop-3 < *		Servidor pop-3
NO!	tcp	sunrpc < *		Portmap de servicios UDP
NO!	tcp	auth < *		Puerto de autorizacin
NO!	tcp,udp	135 < *			MS DCE RCP mapper para DCOM
NO!	   udp	137 < *			Servicios netbios
NO!	   udp	139 < *			Servicios netbios
NO!	tcp	143 < *			Servidor imap4
NO!	   udp	161 < *			SMTP conf & performance db
NO!	tcp,udp	512:514 < *		Unix "r" commands (tcp y udp?)
NO!	tcp	snpp < *		Servidor snpp de hylafax
NO!	tcp	printer < * 		spooler
NO!	   udp	535 < *			RPC CORBA IIOP
NO!	tcp,udp	635 < *			Linux mountd daemon

    #NECESARIO ( >1024)
#NO!	tcp	1024 < *		Gestor de displays X wdm (varia)
NO!	   udp	2049 < *		NFS unix Network File System
NO!	tcp	3128:3130 < *		Proxy web/cache squid
NO!	   udp	3130 < *			Proxy web/cache squid
NO!	tcp	mysql < *		Servidor mySQL
NO!	tcp	4557 < *		Servidor de FAX hylafax
NO!	tcp	4559 < *		Servidor de FAX hylafax
NO!	   udp	xdmcp < *		Servidor xdm (login grafico)
    # Entradas a X (6000:6000+nmero de servidores X)
NO!	tcp	6000 < *		Mis servidores X
NO!	tcp	7100 < *		Servidor fuentes xfs
NO!	tcp	8080:8081 < *		Proxy web/cache wwwoffle


#### PUERTOS REMOTOS PROHIBIDOS (INCLUSO A SERVICIOS LOCALES) ##################
#NO/>/*	Proto	Local <> Remote			Nombre
#--------------------------------------------------------------------

NO!	tcp,udp	* <> 137:139		Servicios netbios externos
#NO!	tcp,udp	HI <> ircd		Servidores chat


#### SERVICIOS LOCALES ACCESIBLES DESDE INTERNET ###############################
# cerrados si no se abren expresamente con "*"
# ATENCION: Comentar tambien la regla de conteo para abrir el servicio 
#NO/>/*	Proto	Local <> Remote			Nombre
#--------------------------------------------------------------------

 #*	tcp,udp	ssh <> *		Secure Shell


#### CONEXIONES DE NUESTROS USUARIOS A SERVICIOS DE INTERNET ###################
# cerradas si no se abren expresamente con ">", o ">>"
#NO/>/*	Proto	Local <> Remote			Nombre
#------------------------------------------------------------------------

>	   udp	HI <> $DNS:domain	Servidores dns
>+	tcp	HI <> www		Servidores web
>	tcp	HI <> smtp		Servidores smtp
>	tcp	HI <> pop-3		Servidores pop-3
>	tcp	HI <> nntp		Servidores news
>	tcp	HI <> time		Servidores de hora

 #>	   udp	ntp <> $NTP:ntp		Servidores NTP (hora)
 #>	   udp	HI <> $NTP:ntp		Servidores NTP (hora)

>	tcp	HI <> 554		Real Audio
>	   udp	6970:7170 < *		Real Audio

>-	tcp	HI <> rsync		Servidores rsync


    # traceroute necesita 3 puertos UDP por nodo, 166=55 nodos
> 	   udp	* > 33434:33600 	Comando traceroute

    # ftp en modo pasivo
>	tcp	HI <> ftp		Servidores ftp
>-	tcp	HI <> *			Desviado por ftp modo pasivo 
*-	tcp	HI <> $FTP:ftp-data	Desviado por ftp modo activo


#### ACCIONES SOBRE PAQUETES ICMP ##############################################
# Los paquetes icmp son de control de la comunicacin de los otros protocolos
#NO/>/*	Proto	Local <> Remote			Nombre
#-------------------------------------------------------------------------------

    # ENTRADAS ICMP
*	icmp	* < 0		Pong IN		--- para recibir PING/BING ---
*	icmp	* < 3		Dest-un	IN 	--- para la comunicacin ---
NO!	icmp	* < 4		Quench IN
NO!	icmp	* < 5		Redir IN
NO!	icmp	* < 8		Ping IN
*	icmp	* < 11		Time-ex IN 	--- para traceroute ---
 #NO	icmp	* < 12		Param IN
NO	icmp	* < *		Resto de ICMP

    # SALIDAS ICMP
NO!	icmp	0 > *		Pong OUT 
NO	icmp	3 > *		Dest-un OUT
 #NO	icmp	4 > *		Quench OUT
 #NO	icmp	5 > *		Redir OUT
*	icmp	8 > *		Ping OUT 	--- para hacer PING/BING ---
 #NO	icmp	11 > *		Time-ex OUT
NO!	icmp	12 > *		Param OUT
NO	icmp	* > *		Resto de ICMP


#### OPCIONES RELACIONADAS CON EL LOGGING ######################################
#NO/>/*	Proto	Local <> Remote			Nombre
#------------------------------------------------------------------------

    # NO LOG DE PAQUETES REINCIDENTES CONOCIDOS
NO	udp	68 > 255.255.255.255:67	Infovia plus al conectar

    # LOG POR DEFECTO DE PAQUETES NO ADMITIDOS
NO!	tcp,udp	0:1023 <> *		Puertos bajos
NO!	tcp,udp	* <> *			Log por defecto TCP y UDP
NO!	*	* <> *			Log por defecto ICMP y resto

