RETRO.COM.ES

Web sobre informática retro y vintage

Herramientas de usuario

Herramientas del sitio


crux24:firewall

Firewall

Para configurar el firewall IPTABLES que se incluye en linux se utiliza un «script» que se instala en /etc/rc.d (para poder invocarlo desde los SERVICES en /etc/rc.conf).

A continuación se incluye un «script» de ejemplo para que sirva como modelo:

firewall
#!/bin/bash
#===============================================================================
# /etc/rc.d/firewall: (des)habilitar las reglas del firewall
#-------------------------------------------------------------------------------
 
echo "Firewall not configured. Edit $0 before use." ; exit 1 # DELETE THIS LINE 
 
. /etc/rc.conf
IPTABLES="/usr/sbin/iptables"
 
#-------------------------------------------------------------------------------
 
IP0=192.168.56.xx		# ETH0 - LAN
NET0=192.168.56.0/24
 
function local_config { # Quitar el comentario a los servicios deseados
#	ssh_server
#	DNS_server
#	NTP_server
#	DHCP_server eth0
#	TFTP_server
#	fb_server
#	postgres_server
#	web_server
#	mail_server
}
 
#-------------------------------------------------------------------------------
 
function ssh_server { # Servicio SSH/SFTP: solo red local
	# Debe coincidir con "sshd" en /etc/hosts.allow
	${IPTABLES} -A INPUT  -s ${NET0} -d ${IP0} -p tcp --dport ssh -j ACCEPT
	${IPTABLES} -A OUTPUT -s ${IP0} -d ${NET0} -p tcp --sport ssh -j ACCEPT
}
 
function DNS_server { # Servicio DNS: solo red local
	${IPTABLES} -A INPUT  -s ${NET0} -d ${IP0} \
		-p udp --dport domain -j ACCEPT
	${IPTABLES} -A OUTPUT -s ${IP0} -d ${NET0} \
		-p udp --sport domain -j ACCEPT
}
 
function NTP_server { # Servicio Hora: solo red local
	${IPTABLES} -A INPUT  -s ${NET0} -d ${IP0} -p udp --dport ntp -j ACCEPT
	${IPTABLES} -A OUTPUT -s ${IP0} -d ${NET0} -p udp --sport ntp -j ACCEPT
}
 
function DHCP_server { # Servicio DHCP: se pasa el interface 
	${IPTABLES} -A INPUT  -i ${1} -p udp --sport 68 --dport 67 -j ACCEPT
	${IPTABLES} -A OUTPUT -o ${1} -p udp --sport 67 --dport 68 -j ACCEPT
}
 
function TFTP_server { # Servicio TFTP: solo red local
	# Revisar "in.tftp" en /etc/hosts.allow
	/sbin/modprobe nf_conntrack_tftp
	${IPTABLES} -A INPUT  -s ${NET0} -d ${IP0} \
		-p udp -m state --state NEW,ESTABLISHED --dport tftp -j ACCEPT
	${IPTABLES} -A OUTPUT -s ${IP0} -d ${NET0} \
		-p udp -m state --state ESTABLISHED --sport tftp -j ACCEPT
	${IPTABLES} -A INPUT  -s ${NET0} -d ${IP0} \
		-p udp -m state --state ESTABLISHED,RELATED \
		--sport 1024: --dport 1024: -j ACCEPT
	${IPTABLES} -A OUTPUT -s ${IP0} -d ${NET0} \
		-p udp -m state --state ESTABLISHED,RELATED \
		--sport 1024: --dport 1024: -j ACCEPT
}
 
function fb_server { # Servidor Firebird SQL: solo red local
	${IPTABLES} -A INPUT  -s ${NET0} -d ${IP0} -p tcp --dport 3050 -j ACCEPT
	${IPTABLES} -A OUTPUT -s ${IP0} -d ${NET0} -p tcp --sport 3050 -j ACCEPT
}
 
function postgres_server { # Servidor SQL Postgres: solo red local
	${IPTABLES} -A INPUT  -s ${NET0} -d ${IP0} \
		-p tcp --dport postgresql -j ACCEPT
	${IPTABLES} -A OUTPUT -s ${IP0} -d ${NET0} \
		-p tcp --sport postgresql -j ACCEPT
}
 
function web_server { # Servicios HTTP(s): solo red local
	${IPTABLES} -A INPUT  -s ${NET0} -d ${IP0} \
		-p tcp -m multiport --dports http,https -j ACCEPT
	${IPTABLES} -A OUTPUT -s ${IP0} -d ${NET0} \
 		-p tcp -m multiport --sports http,https -j ACCEPT
}
 
function mail_server { # Servicios SMTP(s) y POP3(s): solo red local
	${IPTABLES} -A INPUT  -s ${NET0} -d ${IP0} -p tcp \
		-m multiport --dports smtp,pop3,smtps,pop3s -j ACCEPT
	${IPTABLES} -A OUTPUT -s ${IP0} -d ${NET0} -p tcp \
 		-m multiport --sports smtp,pop3,smtps,pop3s -j ACCEPT
}
 
 
#-------------------------------------------------------------------------------
 
case $1 in
 
  start|restart)
	echo -n "Aplicando Reglas de Firewall..."
 
	# Eliminar todas las reglas y prohibir acceso por defecto
	${IPTABLES} -F
	${IPTABLES} -X
	${IPTABLES} -Z
	${IPTABLES} -P INPUT   DROP
	${IPTABLES} -P OUTPUT  DROP
	${IPTABLES} -P FORWARD DROP
 
	# Permitir "localhost" y direcciones IP propias
	${IPTABLES} -A INPUT  -i lo     -j ACCEPT
	${IPTABLES} -A OUTPUT -o lo     -j ACCEPT
	${IPTABLES} -A INPUT  -s ${IP0} -j ACCEPT
	${IPTABLES} -A OUTPUT -d ${IP0} -j ACCEPT
 
	# Acceso a los servidores DNS incluidos en rc.conf 
	for IP in ${DNS[@]} 
	do
		if [ "${IP}" != "127.0.0.1" ]
		then
 			${IPTABLES} -A INPUT  -s ${IP} -d ${IP0} \
				-p udp --sport domain -j ACCEPT
			${IPTABLES} -A OUTPUT -s ${IP0} -d ${IP} \
				-p udp --dport domain -j ACCEPT
		fi
	done
 
        local_config
 
	# Acceso a los servidores NTP incluidos en rc.conf
	for IP in ${TIMESERVERS}
	do 
		if [ "${IP}" != "127.0.0.1" ]
		then
			${IPTABLES} -A INPUT  -s ${IP} -d ${IP0} \
				-p udp --sport ntp -j ACCEPT
			${IPTABLES} -A OUTPUT -s ${IP0} -d ${IP} \
				-p udp --dport ntp -j ACCEPT
		fi
	done
 
#	# Registrar paquetes no interceptados en el Log
#	${IPTABLES} -A INPUT  -j LOG --log-level debug
#	${IPTABLES} -A OUTPUT -j LOG --log-level debug
 
	# Asegurar que no entra ni sale nada mas
	${IPTABLES} -A INPUT  -j DROP
	${IPTABLES} -A OUTPUT -j DROP
 
	echo " OK."
	;;
 
stop)
 
	echo -n "Eliminando Reglas de Firewall..."
 
	# Eliminar todas las reglas y permitir acceso por defecto
	${IPTABLES} -F
	${IPTABLES} -X
	${IPTABLES} -Z
	${IPTABLES} -P INPUT   ACCEPT
	${IPTABLES} -P OUTPUT  ACCEPT
	${IPTABLES} -P FORWARD ACCEPT
 
	echo " OK."
	;;
 
status)
 
	$IPTABLES -L -n | less
	;;
 
*)
 
	echo "usage: $0 [ start | stop | restart | status ]"
	;;
 
esac
 
#===============================================================================
©2017-2024, jCæsar Contacto

Herramientas de la página