All pastes #499195 Raw Edit

haldrik

public text v1 · immutable
·published 2007-05-20 22:49 UTC
rendered paste body
#!/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