
Este es el fichero completo del cortafuegos. Se han respetado los comentarios originales para tener una mejor compresión del significado de algunas variables y reglas:
#!/bin/sh
#
# rc.firewall - Script de inicio para el cortafuegos incluído
# en el núcleo Linux 2.4.x
#
# Todas las líneas que comiencen con # son comentarios y no
# se tendrán en cuenta.
#
# Este script está basado en los scripts incluídos en los
# tutoriales de:
#
# - Oskar Andreasson <blueflux@koffein.net>
#
# (http://people.unix-fu.org/andreasson/),
#
# - Daniel Robbins <drobbins@gentoo.org>
#
# (http://ibm.com/develworks)
#
# El presente script ha sido readaptado por:
#
# - Sergio González González <sergio.gonzalez@hispalinux.es>
# - Luis Llorente Campo <luis.llorente@hispalinux.es>
#
#
# Este script es software libre; lo puedes redistribuir y/o
# modificar bajo los términos de la Licencia Pública General GNU.
# (http://www.gnu.org)
#
# This script is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License.
# (http://www.gnu.org)
#
#
# #######################
# # Comienzo del script #
# #######################
#
##
# Definimos una función encargada de limpiar las reglas creadas
# anteriormente en Iptables.
#
# reset_and_flush() restablece Iptables con los valores por defecto.
#
reset_and_flush ()
{
echo -en "\033[47m\033[34m \033[0m\n"
echo -en "\033[47m\033[34m * Limpiando Iptables... \033[0m"
IPTABLES=/sbin/iptables
# Restablecemos la política por defecto de la tabla de filtrado.
${IPTABLES} -P INPUT ACCEPT
${IPTABLES} -P FORWARD ACCEPT
${IPTABLES} -P OUTPUT ACCEPT
# Restablecemos la política por defecto de la tabla nat.
${IPTABLES} -t nat -P PREROUTING ACCEPT
${IPTABLES} -t nat -P POSTROUTING ACCEPT
${IPTABLES} -t nat -P OUTPUT ACCEPT
# Restablecemos la política por defecto de la tabla mangle.
${IPTABLES} -t mangle -P PREROUTING ACCEPT
${IPTABLES} -t mangle -P OUTPUT ACCEPT
# Limpiamos todas las reglas existentes en las tablas de filtrado, nat y mangle.
${IPTABLES} -F
${IPTABLES} -t nat -F
${IPTABLES} -t mangle -F
# Borramos todas las cadenas que no están por defecto en las tablas de filtrado,
# nat y mangle.
${IPTABLES} -X
${IPTABLES} -t nat -X
${IPTABLES} -t mangle -X
echo -en "\033[47m\033[1;32m[done] \033[0m\n"
}
##
# Analizamos el parámetro pasado. Los posibles valores son:
#
# - start -> Activamos las reglas del cortafuegos listadas
# en este script.
#
# - stop -> Eliminamos todas las reglas del cortafuegos,
# dejando la política por defecto del mismo en
# "allow".
#
# - Si no se han pasado argumentos, se informa del uso del script.
#
case "$1" in
#################
# SIN ARGUMENTOS
#
# No se han pasado argumentos...
"") echo -en "Uso: rc_firewall {start|stop}\n"
;; # Fin de ""
########
# START
#
# Se ha pasado el argumento "start"
"start")
#######################################################
# Datos relativos a la red en la que nos encontramos: #
#######################################################
##
# - RANGO_IP_LAN -> Muestra la red local
# (/24 significa que sólo usaremos los 24 primeros bits de
# los 32 bits que forman una dirección IP. Es lo mismo que
# la máscara de subred 255.255.255.0).
#
RANGO_IP_LAN_CLIENTES="192.168.2.0/24"
RANGO_IP_LAN_DMZ="192.168.3.0/24"
RANGO_IP_LAN_PROYECTOS="192.168.4.0/24"
##
# - IP_LOCALHOST -> Dirección IP del localhost.
#
IP_LOCALHOST="127.0.0.1/32"
##
# - IP_LAN -> Indica cual es la IP del localhost en la red
# local.
IP_LAN_CLIENTES="192.168.2.1/32"
IP_LAN_DMZ="192.168.3.1/32"
IP_LAN_PROYECTOS="192.168.4.1/32"
##
# - IP_INET -> Informa de la IP externa que posee el "cortafuegos"
# (en caso de ser fija). El uso de esta variable puede
# ser un riesgo de seguridad, pero algunas veces es lo
# que quiero. Si no tienes una IP stática, te sugiero
# que no uses esta opción.
IP_INET="193.146.99.249/32"
##
# - IP_DINAMICA -> Si poseemos una IP asignada dinámicamente, puedes
# descomentar la siguiente línea, y se encargará
# de obtener la IP.
# IP_DINAMICA=`/sbin/ifconfig eth1 | grep 'inet addr' | awk '{print $2}' | awk -F: '{print $2}'`
##
# - DIRECCION_BCAST_LAN -> Contiene la dirección broadcast de
# la red local.
#
DIRECCION_BCAST_LAN_CLIENTES="192.168.2.255/32"
DIRECCION_BCAST_LAN_DMZ="192.168.3.255/32"
DIRECCION_BCAST_LAN_PROYECTOS="192.168.4.255/32"
DIRECCION_BCAST_INET="193.146.99.255/32"
##
# - IFACE_INET -> informa de la tarjeta de red conectada a internet.
IFACE_INET="eth0"
##
# - IFACE_LAN -> Informa de la tarjeta de red conectada a la red local.
IFACE_LAN_CLIENTES="eth1"
IFACE_LAN_DMZ="eth3"
IFACE_LAN_PROYECTOS="eth2"
##
# - IFACE_LO -> Informa del interface localhost
IFACE_LO="lo"
##
# - IPTABLES -> Indica la ruta en la que podemos encontrar el programa
# iptables.
IPTABLES="/sbin/iptables"
##
# - ROUTER -> Si necesitas actuar como un router (y así poder pasar
# paquetes IP entre dos tarjetas de red), necesitas
# la asignación ROUTER="yes"; Si este no es tu caso, has de
# poner ROUTER="no"
#
ROUTER="yes"
##
# Cambia la siguiente línea por la dirección, direcciones o rango de direcciones
# IPs estáticas que poseas para hacer SNAT estático. Si tienes una IP dinámica,
# establece el valor "dynamic". Si no necesitas ningún tipo de NAT
# (Network Address Translation), establece NAT como "" para desactivarla.
#
NAT="193.146.99.249"
##
# Cambia la siguiente línea de forma que liste todas las interfaces de red que tienes,
# incluyendo lo.
INTERFACES="lo eth0 eth1 eth2 eth3"
##
# Cambia la siguiente línea de forma que liste los números asignados o los nombres
# simbólicos (de /etc/services) de todos los servicios que quieras dar al público
# en general. Si no quieres dar ningún servicio, establece el valor como "".
#
# SERVICES_TCP -> Servicios que se van a dar por los puertos tcp.
#
# SERVICES_UDP -> Servicios que se van a dar por los puertos udp.
#
# SERVICES_ICMP -> Servicios que se van a dar por los puertos icmp.
#
##
# TCP:
#
# ftp-data -> 20
# ftp -> 21
# ssh -> 22
# http -> 80
# auth -> 113
# netbios-ns -> 137
# netbios-dgm -> 138
# netbios-ssn -> 139
# cvspserver -> 2401
#
# UDP:
#
# domain -> 53
# netbios-ns -> 137
# netbios-dgm -> 138
# netbios-ssn -> 139
# icpv2 -> 3130
#
# ICMP:
#
# Echo Reply -> 0
# Destination Unreachable -> 3
# Redirect -> 5
# Echo Request -> 8
# Time Exceeded -> 11
#
# (Para más información sobre ICMP mirar:
# http://www.ee.siue.edu/~rwalden/networking/icmp.html
# ftp://sunsite.unc.edu/pub/docs/rfc/rfc792.txt)
#
SERVICES_TCP="ftp ssh 110 http 443 3128 2401 9999 143"
SERVICES_ICMP="0 3 5 8 11"
####################
# Carga de módulos #
####################
echo -en "\n"
echo -en "\033[47m\033[31m \033[0m\n"
echo -en "\033[47m\033[31m Configurando el cortafuegos \033[0m\n"
echo -en "\033[47m\033[31m \033[0m\n"
echo -en "\033[47m\033[31m \033[0m\n"
##
# Cargamos todos los módulos necesarios de IPTables.
#
# La siguiente línea es necesaria para inicializar la
# carga de módulos.
echo -en "\033[47m\033[31m \033[0m\n"
echo -en "\033[47m\033[34m * Cargando los modulos... \033[0m"
/sbin/depmod -a
##
# Adds some iptables targets like LOG, REJECT and MASQUARADE.
# /sbin/modprobe ipt_LOG
# /sbin/modprobe ipt_REJECT
# /sbin/modprobe ipt_MASQUERADE
#
# Support for owner matching
/sbin/modprobe ipt_owner
##
# Support for connection tracking of FTP and IRC.
#
/sbin/modprobe ip_conntrack_ftp
/sbin/modprobe ip_nat_ftp
# /sbin/modprobe ip_conntrack_irc
echo -en "\033[47m\033[1;32m[done] \033[0m\n"
###################################################
# Restablecemos el estado por defecto de Iptables #
###################################################
reset_and_flush
###############################################
# Aplicando distintas protecciones y opciones #
###############################################
##
# Route verification is where a packet which comes from an unexpected
# interface is dropped: for example, if your internal network has
# addresses 10.1.1.0/24, and a packet with that source address comes
# in your external interface, it will be dropped
#
# Protección contra IP spoofing
echo -en "\033[47m\033[31m \033[0m\n"
echo -en "\033[47m\033[34m * Cargando las reglas: \033[0m\n"
echo -en "\033[47m\033[34m \033[0m\n"
echo -en "\033[47m\033[30m Desactivando spoofing en todas las interfaces... \033[0m"
#disable spoofing on all interfaces
for x in ${INTERFACES}
do
echo 1 > /proc/sys/net/ipv4/conf/$x/rp_filter
done
echo -en "\033[47m\033[1;32m[done] \033[0m\n"
# Deshabilitamos el ECN (explicit congestion notification) si ha sido
# compilado en el núcleo.
# El porqué de esta acción es que no todas las redes lo soportan
# de momento y puede dar problemas de conexión.
echo -en "\033[47m\033[30m Desactivando el ECN... \033[0m"
if [ -e /proc/sys/net/ipv4/tcp_ecn ]
then
echo 0 > /proc/sys/net/ipv4/tcp_ecn
fi
echo -en "\033[47m\033[1;32m[done] \033[0m\n"
# SYNCOOKIES
echo -en "\033[47m\033[30m Activando protección contra syncookie... \033[0m"
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
echo -en "\033[47m\033[1;32m[done] \033[0m\n"
######################################################
# Definiendo la política por defecto del cortafuegos #
######################################################
##
# Cadenas INPUT, OUTPUT y FORDWARD
#
echo -en "\033[47m\033[34m \033[0m\n"
echo -en "\033[47m\033[34m - Políticas por defecto para el cortafuegos: \033[0m\n"
echo -en "\033[47m\033[34m \033[0m\n"
echo -en "\033[47m\033[30m INPUT -> DROP... \033[0m"
$IPTABLES -P INPUT DROP
echo -en "\033[47m\033[1;32m[done] \033[0m\n"
echo -en "\033[47m\033[30m OUTPUT -> DROP... \033[0m"
$IPTABLES -P OUTPUT DROP
echo -en "\033[47m\033[1;32m[done] \033[0m\n"
echo -en "\033[47m\033[30m FORWARD -> DROP... \033[0m"
# $IPTABLES -P FORWARD DROP
echo -en "\033[47m\033[1;32m[done] \033[0m\n"
# $IPTABLES -t mangle -P PREROUTING DROP
# $IPTABLES -t mangle -P OUTPUT DROP
# $IPTABLES -t nat -P PREROUTING DROP
# $IPTABLES -t nat -P POSTROUTING DROP
# $IPTABLES -t nat -P OUTPUT DROP
############################################
# Creando nuevas cadenas en el cortafuegos #
############################################
##
# Creamos cadenas separadas para ICMP, TCP y UDP.
#
echo -en "\033[47m\033[34m \033[0m\n"
echo -en "\033[47m\033[34m - Creación de nuevas cadenas para el cortafuegos: \033[0m\n"
echo -en "\033[47m\033[34m \033[0m\n"
echo -en "\033[47m\033[30m ICMP -> icmp_packets... \033[0m"
$IPTABLES -N icmp_packets
echo -en "\033[47m\033[1;32m[done] \033[0m\n"
echo -en "\033[47m\033[30m TCP -> tcp_packets... \033[0m"
$IPTABLES -N tcp_packets
echo -en "\033[47m\033[1;32m[done] \033[0m\n"
echo -en "\033[47m\033[30m UDP -> udpincoming_packets... \033[0m"
$IPTABLES -N udpincoming_packets
echo -en "\033[47m\033[1;32m[done] \033[0m\n"
##
# Cadena allowed
#
echo -en "\033[47m\033[30m ALLOWED -> allowed... \033[0m"
$IPTABLES -N allowed
echo -en "\033[47m\033[1;32m[done] \033[0m\n"
#######################################################
# Definición de las reglas para las distintas cadenas #
#######################################################
##
# Reglas para ALLOWED
#
echo -en "\033[47m\033[34m \033[0m\n"
echo -en "\033[47m\033[34m - Definición de reglas para las cadenas: \033[0m\n"
echo -en "\033[47m\033[34m \033[0m\n"
echo -en "\033[47m\033[30m Definiendo reglas para ALLOWED... \033[0m"
# Esta cadena será utilizada si alguien intenta conectar con un puerto "allowed"
# desde Internet. Si está abriendo una conexión, o si ya tenía una establecida
# ACPETAREMOS el paquete, si no lo denegamos. Aquí es donde la correspondencia
# de estado entra en juego, permitimos los paquetes cuyas conexiones ya estén
# establecidas (ESTABLISHED) y relaccionadas (RELATED).
#
$IPTABLES -A allowed -p TCP --syn -j ACCEPT
$IPTABLES -A allowed -p TCP -m state --state ESTABLISHED,RELATED -j ACCEPT
# Hacemos que nuestro cortafuegos responda a las peticiones en los puertos
# TCP y UDP, indicando que no existe ningún servicio disponible en el puesto
# solicitado. Con esto evitamos que un atacante sepa que estamos
# detrás de un cortafuegos, haciéndole ver que no disponemos de ningún
# servicio en nuestro sistema, de esta forma igual se va a por otro
# equipo, y deja de molestar ;-)
# $IPTABLES -A allowed -p TCP -i $IFACE_INET -j REJECT --reject-with tcp-reset
# Si la línea anterior no está comentada, esta regla nunca se alcanza,
# pero la dejo sin comentar. Lo que hace la siguiente regla es
# descartar (sin devolver respuesta) todos los paquetes TCP que le lleguen
$IPTABLES -A allowed -p TCP -j DROP
echo -en "\033[47m\033[1;32m[done] \033[0m\n"
##
# Reglas para ICMP
#
# Se abrirán los servicios listados en SERVICES_ICMP
#
echo -en "\033[47m\033[30m Definiendo reglas para ICMP... \033[0m"
for x in ${SERVICES_ICMP}
do
${IPTABLES} -A icmp_packets -p ICMP -s 0/0 --icmp-type ${x} -j ACCEPT
done
echo -en "\033[47m\033[1;32m[done] \033[0m\n"
##
# Reglas para TCP
#
# Se abrirán los servicios listados en SERVICES_TCP
echo -en "\033[47m\033[30m Definiendo reglas para TCP... \033[0m"
# ${IPTABLES} -A INPUT -p tcp ! --syn -m state --state NEW -j LOG --log-prefix "New not syn:"
# ${IPTABLES} -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
for x in ${SERVICES_TCP}
do
${IPTABLES} -A tcp_packets -p TCP -s 0/0 --dport ${x} -j ACCEPT
done
##
# Reject auth
#
# $IPTABLES -A tcp_packets -p TCP -i $IFACE_INET --dport 113 -j REJECT
##
# Reject Xms Scans
#
#
# Generic dirty interface maping
# $IPTABLES -A tcp_packets -p TCP --tcp-flags ALL FIN,URG,PSH -j LOG --log-level DEBUG -m limit --limit 1/s
# $IPTABLES -A tcp_packets -p TCP --tcp-flags ALL FIN,URG,PSH -j DROP
##
# Reject Fin scans
#
# $IPTABLES -A tcp_packets -p TCP --tcp-flags ALL FIN -m state --state ! ESTABLISHED -j LOG --log-level DEBUG -m limit --limit 1/s
# $IPTABLES -A tcp_packets -p TCP --tcp-flags ALL FIN -m state --state ! ESTABLISHED -j DROP
##
# Reject ANY station that opens and immediately closes a connection
# Some portscanners does this
#
# $IPTABLES -A tcp_packets -p TCP --tcp-flags ALL SYN,FIN -j LOG --log-level DEBUG -m limit --limit 1/s
# $IPTABLES -A tcp_packets -p TCP --tcp-flags ALL SYN,FIN -j DROP
echo -en "\033[47m\033[1;32m[done] \033[0m\n"
##
# Reglas para UDP
#
echo -en "\033[47m\033[30m Definiendo reglas para UDP... \033[0m"
for x in ${SERVICES_UDP}
do
$IPTABLES -A udpincoming_packets -p UDP -s 0/0 --source-port ${x} -j ACCEPT
done
echo -en "\033[47m\033[1;32m[done] \033[0m\n"
##
# Reglas para FORWARD
#
echo -en "\033[47m\033[30m Definiendo reglas para FORWARD... \033[0m"
$IPTABLES -A FORWARD -p tcp ! --syn -m state --state NEW -j LOG --log-prefix "New not syn:"
$IPTABLES -A FORWARD -p tcp ! --syn -m state --state NEW -j DROP
$IPTABLES -A FORWARD -i $IFACE_LAN_CLIENTES -j ACCEPT
$IPTABLES -A FORWARD -i $IFACE_LAN_PROYECTOS -j ACCEPT
# PROYECTOS
# $IPTABLES -A FORWARD -p tcp --dport 21 -i $IFACE_LAN_PROYECTOS -j ACCEPT
# $IPTABLES -A FORWARD -p tcp --dport 22 -i $IFACE_LAN_PROYECTOS -j ACCEPT
# $IPTABLES -A FORWARD -p tcp --dport 80 -i $IFACE_LAN_PROYECTOS -j ACCEPT
# $IPTABLES -A FORWARD -p tcp --dport 999 -i $IFACE_LAN_PROYECTOS -j ACCEPT
$IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
# Syn-flood protection:
# $IPTABLES -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT
# Furtive port scanner:
# $IPTABLES -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT
# Ping of death:
# $IPTABLES -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
$IPTABLES -A FORWARD -m limit --limit 3/minute --limit-burst 3 -j LOG --log-level DEBUG --log-prefix "IPT FORWARD packet died: "
echo -en "\033[47m\033[1;32m[done] \033[0m\n"
##
# Reglas para PREROUTING
#
# Hacemos un chequeo para bloquear falsas IP's obvias.
echo -en "\033[47m\033[30m Definiendo reglas para PREROUTING... \033[0m"
# $IPTABLES -t nat -A PREROUTING -i $IFACE_INET -s 192.168.0.0/16 -j DROP
# $IPTABLES -t nat -A PREROUTING -i $IFACE_INET -s 10.0.0.0/8 -j DROP
# $IPTABLES -t nat -A PREROUTING -i $IFACE_INET -s 172.16.0.0/12 -j DROP
# $IPTABLES -t nat -A PREROUTING -i $IFACE_LAN_PROYECTOS ! -s 192.168.4.0/16 -j DROP
# $IPTABLES -t nat -A PREROUTING -i $INET_IFACE -s $IP_INET -j DROP
# $IPTABLES -t nat -A PREROUTING -p TCP -i $IFACE_INET -d $IP_INET --dport 80 \
# -j DNAT --to-destination 192.168.2.2
# $IPTABLES -t nat -A PREROUTING -p TCP -i $INET_IFACE -d $IP_INET --dport 21 \
# -j DNAT --to-destination 192.168.2.2
# $IPTABLES -t nat -A PREROUTING -p TCP -i $INET_IFACE -d $IP_INET --dport 22 \
# -j DNAT --to-destination 192.168.2.2
##
# Reject Xms Scans
#
#
# This disallows ALL portscans that will hit the PREROUTING table
# $IPTABLES -t nat -A PREROUTING -p tcp --tcp-flags ALL FIN,URG,PSH -j LOG --log-level DEBUG -m limit --limit 1/s
# $IPTABLES -t nat -A PREROUTING -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP
##
# Reject Fin scans
#
#
# This disallows ALL portscans that will hit the PREROUTING table
# $IPTABLES -t nat -A PREROUTING -p tcp --tcp-flags ALL FIN -j LOG --log-level DEBUG -m limit --limit 1/s
# $IPTABLES -t nat -A PREROUTING -p tcp --tcp-flags ALL FIN -j DROP
##
# Reject ANY station that opens and immediately closes a connection
# Some portscanners does this
#
# $IPTABLES -t nat -A PREROUTING -p tcp --tcp-flags ALL SYN,FIN -j LOG --log-level DEBUG -m limit --limit 1/s
# $IPTABLES -t nat -A PREROUTING -p tcp --tcp-flags ALL SYN,FIN -j DROP
echo -en "\033[47m\033[1;32m[done] \033[0m\n"
##
# Reglas para INPUT
#
# establish the basic INPUT chain and filter the packets onto the correct
# chains.
#
# Take care of bad TCP packets that we don't want
#
$IPTABLES -A INPUT -p tcp ! --syn -m state --state NEW -j LOG \
--log-prefix "New not syn:"
$IPTABLES -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
$IPTABLES -A INPUT -p ICMP -j icmp_packets
$IPTABLES -A INPUT -p TCP -j tcp_packets
$IPTABLES -A INPUT -p UDP -j udpincoming_packets
$IPTABLES -A INPUT -p ALL -i ${IFACE_LAN_CLIENTES} -d ${DIRECCION_BCAST_LAN_CLIENTES} -j ACCEPT
$IPTABLES -A INPUT -p ALL -i ${IFACE_LAN_PROYECTOS} -d ${DIRECCION_BCAST_LAN_PROYECTOS} -j ACCEPT
$IPTABLES -A INPUT -p ALL -i ${IFACE_LO} -d $IP_LOCALHOST -j ACCEPT
$IPTABLES -A INPUT -p ALL -d $IP_LAN_CLIENTES -j ACCEPT
$IPTABLES -A INPUT -p ALL -d $IP_LAN_PROYECTOS -j ACCEPT
$IPTABLES -A INPUT -p ALL -d $IP_INET -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A INPUT -m limit --limit 3/minute --limit-burst 3 -j LOG --log-level DEBUG --log-prefix "IPT INPUT packet died: "
# ${IPTABLES} -A INPUT -p TCP -i ${IFACE_INET} -j REJECT --reject-with tcp-reset
# ${IPTABLES} -A INPUT -p UDP -i ${IFACE_INET} -j REJECT --reject-with icmp-port-unreachable
##
# OUTPUT chain
#
# establish the basic OUTPUT chain and filter them onto the correct chain
$IPTABLES -A OUTPUT -p tcp ! --syn -m state --state NEW -j LOG --log-prefix "New not syn:"
$IPTABLES -A OUTPUT -p tcp ! --syn -m state --state NEW -j DROP
$IPTABLES -A OUTPUT -p ALL -s $IP_LOCALHOST -j ACCEPT
$IPTABLES -A OUTPUT -p ALL -s $IP_LAN_CLIENTES -j ACCEPT
$IPTABLES -A OUTPUT -p ALL -s $IP_LAN_PROYECTOS -j ACCEPT
$IPTABLES -A OUTPUT -p ALL -s $IP_INET -j ACCEPT
$IPTABLES -A OUTPUT -m limit --limit 3/minute --limit-burst 3 -j LOG --log-level DEBUG --log-prefix "IPT OUTPUT packet died: "
##
# MANGLE chain
#
#
# invalid crap
#
# $IPTABLES -t mangle -A PREROUTING -j LOG --log-level DEBUG -m state --state INVALID -m limit --limit 1/s
#################################################
# Reglas para NAT (Network Address Translation) #
#################################################
# Enable simple IP FORWARDing and Masquerading
#
# NOTE: The following is an example for an internal LAN, where the lan
# runs on eth1, and the Internet is on eth0.
#
# Please change the network devices to match your own configuration
if [ "$ROUTER" = "yes" ]
then
echo -en "\033[47m\033[34m \033[0m\n"
echo -en "\033[47m\033[34m - Reglas para el ROUTER: \033[0m\n"
echo -en "\033[47m\033[34m \033[0m\n"
echo -en "\033[47m\033[30m Activando IP forwarding... \033[0m"
#we're a router of some kind, enable IP forwarding
echo 1 > /proc/sys/net/ipv4/ip_forward
echo -en "\033[47m\033[1;32m[done] \033[0m\n"
if [ "$NAT" = "dynamic" ]
then
#dynamic IP address, use masquerading
# Dynamic IP users:
#
# If you get your IP address dynamically from SLIP, PPP, or DHCP, enable this
# option. This enables dynamic-ip address hacking in IP MASQ, making the connection
# with Diald and similar programs much easier.
echo -en "\033[47m\033[30m Activando dynamic-ip address hacking... \033[0m"
echo "1" > /proc/sys/net/ipv4/ip_dynaddr
echo -en "\033[47m\033[1;32m[done] \033[0m\n"
echo -en "\033[47m\033[30m Activando ip-masquerading... \033[0m"
$IPTABLES -t nat -A POSTROUTING -o $IFACE_INET -j MASQUERADE
echo -en "\033[47m\033[1;32m[done] \033[0m\n"
elif [ "$NAT" != "" ]
then
#static IP, use SNAT
echo -en "\033[47m\033[30m Activando SNAT (IP estática)... \033[0m"
iptables -t nat -A POSTROUTING -o $IFACE_INET -j SNAT --to-source ${NAT}
echo -en "\033[47m\033[1;32m[done] \033[0m\n"
fi
fi
##
# Redirección del tráfico web saliente a la caché de squid.
# Esto se hace de forma transparente al usuario.
echo -en "\033[47m\033[30m \033[0m\n"
echo -en "\033[47m\033[30m Activando proxy transparente... \033[0m"
$IPTABLES -t nat -A PREROUTING -i $IFACE_LAN_CLIENTES -p tcp --dport 80 -j REDIRECT --to-port 3128
# $IPTABLES -t nat -A PREROUTING -i $IFACE_LAN_DMZ -p tcp --dport 80 -j REDIRECT --to-port 3128
# $IPTABLES -t nat -A PREROUTING -i $IFACE_LAN_PROYECTOS -p tcp --dport 80 -j REDIRECT --to-port 3128
echo -en "\033[47m\033[1;32m[done] \033[0m\n"
##
# Redirección del tráfico web entrante hacia cancerbero.
echo -en "\033[47m\033[30m Activando la redirección del tráfico web a litio... \033[0m"
$IPTABLES -t nat -A PREROUTING -p TCP -i $IFACE_INET -d $IP_INET --dport 80 -j DNAT --to-destination 193.146.99.248:8080
$IPTABLES -t nat -A PREROUTING -p TCP -i $IFACE_INET -d $IP_INET --dport 443 -j DNAT --to-destination 193.146.99.248:443
echo -en "\033[47m\033[1;32m[done] \033[0m\n"
##
# Redirección del tráfico web entrante hacia litio.
echo -en "\033[47m\033[30m Activando la redirección del tráfico web a litio... \033[0m"
$IPTABLES -t nat -A PREROUTING -p TCP -i $IFACE_INET -d $IP_INET --dport 110 -j DNAT --to-destination 192.168.2.2:80
echo -en "\033[47m\033[1;32m[done] \033[0m\n"
##
# Redirección del tráfico apt-proxy entrante hacia litio.
echo -en "\033[47m\033[30m Activando la redirección del tráfico apt-proxy a litio... \033[0m"
$IPTABLES -t nat -A PREROUTING -p TCP -i $IFACE_INET -d $IP_INET --dport 9999 -j DNAT --to-destination 192.168.2.2:9999
echo -en "\033[47m\033[1;32m[done] \033[0m\n"
##
# Redirección del tráfico ftp entrante hacia litio.
echo -en "\033[47m\033[30m Activando la redirección del tráfico ftp a litio... \033[0m"
$IPTABLES -t nat -A PREROUTING -p TCP -i $IFACE_INET -d $IP_INET --dport 21 -j DNAT --to-destination 192.168.2.2:21
$IPTABLES -t nat -A PREROUTING -p TCP -i $IFACE_INET -d $IP_INET --dport 20 -j DNAT --to-destination 192.168.2.2:20
echo -en "\033[47m\033[1;32m[done] \033[0m\n"
##
# Redirección del tráfico ssh entrante hacia litio.
echo -en "\033[47m\033[30m Activando la redirección del tráfico ssh a litio... \033[0m"
$IPTABLES -t nat -A PREROUTING -p TCP -i $IFACE_INET -d $IP_INET --dport 22 -j DNAT --to-destination 192.168.2.2:22
echo -en "\033[47m\033[1;32m[done] \033[0m\n"
##
# Redirección del tráfico ssh entrante por el puerto 2222 hacia potasio.
echo -en "\033[47m\033[30m Activando la redirección del tráfico ssh a potasio... \033[0m"
$IPTABLES -t nat -A PREROUTING -p TCP -i $IFACE_INET -d $IP_INET --dport 2222 -j DNAT --to-destination 192.168.4.2:22
echo -en "\033[47m\033[1;32m[done] \033[0m\n"
echo -en "\033[47m\033[31m \033[0m\n"
echo -en "\033[47m\033[31m \033[0m\n"
echo -en "\033[47m\033[31m Cortafuegos configurado \033[m\n"
echo -en "\033[47m\033[31m \033[0m\n"
;; # Fin de "start"
#######
# STOP
#
# Se ha pasado el argumento "stop"
"stop")
##
# Restablecemos los valores por defecto de Iptables
#
echo -en "\n"
echo -en "\033[47m\033[31m \033[0m\n"
echo -en "\033[47m\033[31m Parando el cortafuegos \033[0m\n"
echo -en "\033[47m\033[31m \033[0m\n"
reset_and_flush
echo -en "\033[47m\033[31m \033[0m\n"
echo -en "\033[47m\033[31m \033[0m\n"
echo -en "\033[47m\033[31m Cortafuegos parado \033[0m\n"
echo -en "\033[47m\033[31m \033[0m\n"
;; # Fin de "Stop"
esac
|