#!/bin/bash
# Segundo script de haldrik para el firewall IPTABLES
# Introduzca el nombre de la nic conectada a internet "uplink"
UPLINK="eth1"
# Introduzca el nombre de la nic conectada a la LAN
TOLAN="eth0"
# Introduzca la ruta de la red local algo como "1.2.3."
LAN="192.168.0."
# Introduzca el primer numero de ip que desea permitir algo como "1" para "1.2.3.1"
IP="10"
# Introduzca la ip máxima que tiene su LAN algo como "50" para "1.2.3.50"
MIP="58"
# Para que el firewall sea un router seleccione una de las opciones
# "yes" "no"
ROUTER="yes"
# Introduzca su IP estática si la tiene para usar SNAT, o escriba "dynamic"
# si usted tiene una ip dinámica. si no necesita hacer NAT dejelo vacío "" para
# desactivarlo.
NAT="10.254.208.3"
# Para redireccionar las solicitudes http hacia un proxy selecciones "yes" o "no"
REDIRECT="yes"
# Introduzca las interfaces de red que tiene, incluyendo lo
INTERFACES="lo eth0 eth1"
# Introduzca los servicios que desea habilitar para los clientes LAN esto es para la cadena FORWARD.
# Puede usar todos los disponibles en /etc/services o escribir el numero del puerto especifico.
# OJO Si piensa redireccionar http no lo incluya
CSERVICES="https 1998"
# Introduzca los servicios que desea habilitar para su firewall (de /etc/services) todos
# estos servicios serán vistos por el publico si no quiere proveever algún servicio dejelo vacio "".
SERVICES="http ssh"
if [ "$1" = "start" ]
then
echo "Limpiando Reglas Anteriores..."
iptables -F
iptables -X
iptables -Z
iptables -t nat -F
echo "Iniciando el Firewall..."
iptables -P INPUT DROP
iptables -P FORWARD DROP
# Solo se permiten conexiones de la LAN y lo
iptables -A INPUT -i ! "$UPLINK" -j ACCEPT
# Solo se permiten conexiones entrantes en estos estados
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Todo lo que venga por FORWARD desde internet hacia UPLINK irá a la política por defecto
iptables -A FORWARD -i ! "$UPLINK" -j ACCEPT
# Tolo lo que venga por FORWARD de internet hacia UPLINK en estos estados entra
iptables -A FORWARD -i "$UPLINK" -m state --state ESTABLISHED,RELATED -j ACCEPT
# Activar acceso público a algunos servicios
for x in "$SERVICES"
do
iptables -A INPUT -p tcp --dport "$x" -m state --state NEW -j ACCEPT
done
# Estas reglas despistan a los hackers ya que el reset no evidencia la presencia de firewall
iptables -A INPUT -p tcp -i "$UPLINK" -j REJECT --reject-with tcp-reset
iptables -A INPUT -p udp -i "$UPLINK" -j REJECT --reject-with icmp-port-unreachable
iptables -A FORWARD -p tcp -i "$UPLINK" -j REJECT --reject-with tcp-reset
iptables -A FORWARD -p udp -i "$UPLINK" -j REJECT --reject-with icmp-port-unreachable
# Las siguientes reglas evitan el DoS por logeo
# Proteccion contra inundacion mediante syn (syn-flood)
iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT
# Proteccion contra furtivo buscando puertos (port scanner)
iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT
# Proteccion contra el ping de la muerte
iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
# Desactivar ECN explícitamente
if [ -e /proc/sys/net/ipv4/tcp_ecn ]
then
echo 0 > /proc/sys/net/ipv4/tcp_ecn
fi
# Desactiva spoofing en todas las interfaces
for x in "$INTERFACES"
do
echo 1 > /proc/sys/net/ipv4/conf/${x}/rp_filter
done
# Empieza a operar el router
if [ "$ROUTER" = "yes" ]
then
# Se activa el ip forward
echo 1 > /proc/sys/net/ipv4/ip_forward
if [ "$NAT" = "dynamic" ]
then
# Enmascaramiento en IP dinámica
echo "Activando enmascaramiento (IP dinámica)..."
iptables -t nat -A POSTROUTING -o "$UPLINK" -j MASQUERADE
elif [ "$NAT" != "" ]
then
# IP estática, se use SNAT
echo "Activando SNAT (ip estática)..."
iptables -t nat -A POSTROUTING -o "$UPLINK" -j SNAT --to "$NAT"
fi
# Si seleciono redireccionar, hacemos Destination NAT para alterar el destino de los paquetes
if ["$REDIRECT" = "yes"]
then
iptables -t nat -A PREROUTING -i "$TOLAN" -p tcp --dport http -j DNAT --to "$NAT:8080"
# Puede introducir aquí los puertos o servicios que desea redireccionar
fi
# A traves de este doble ciclo for - while activamos los servicios dados para el numero de clientes dado
for x in "$CSERVICES"
do
while ["$IP" <= "$MIP"]
do
iptables -A FORWARD -s "$LAN$IP" -i "$TOLAN" -o "$UPLINK" -p tcp --dport "$CSERVICES" -j ACCEPT
#IP aumenta de uno en uno, por tanto termina cubriendo la ip maxima
let = "IP=IP+1"
done
done
#Ingrese aqui las lineas necesarias para agregar servicios a un cliente determinado
# Todos los puertos abiertos para la .10
iptables -A FORWARD -s 192.168.0.10 -i "$TOLAN" -o "$UPLINK" -j ACCEPT
fi
echo "Reglas Aplicadas"
iptables -L -n
elif [ "$1" = "stop" ]
then
echo "Deteniendo el Firewall..."
iptables -F INPUT
iptables -P INPUT ACCEPT
if ["$ROUTER" ¡= "yes"]
then
# Desactiva cualquier NAT o enmascaramiento que halla
iptables -t nat -F POSTROUTING
fi
fi
#Fin del Firewall