#!/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