#/bin/bash #Script de configuracion para el firewall en ns #------------------------------------------------------------- #------------------------------------------------------------- #Configuracion de algunas variables echo -n " --Configurando variables-- " KERNEL=`uname -a | cut -f3 -d " " ` LAN_IP_RANGE="192.168.1.0/24" #ips permitidas en la lan LAN_IP="192.168.1.3" #ip interna de la maquina ANY_IP="0/0" #cualquier ip LAN_BCAST_ADDRESS="192.168.1.255" #broadcast de la lan LO_IF="lo" #interfaz de loopback LO_IP="127.0.0.1" #ip loopbacj EXT_IF="eth1" #interfaz externa INT_IF="eth0" #interfaz interna IPTABLES="/sbin/iptables" #el comando iptables IPPRIVADACLASE_A="10.0.0.0/8" IPPRIVADACLASE_B="172.16.0.0/12" IPPRIVADACLASE_C="192.168.0.0/16" CLASE_D_MULTICAST="224.0.0.0/4" CLASE_E_RESERVADAS="240.0.0.0/5" EXT_IP="MIIP" echo " Version del kernel : $KERNEL" echo " Localizacion iptables: $IPTABLES" echo " Interfaz externa: $EXT_IF" echo " Direccion IP externa: $EXT_IP" echo " Interfaz LAN: $INT_IF" echo " Direccion IP LAN: $LAN_IP" echo "" echo -n " --Estableciendo parametros del kernel de /proc/sys/net/ipv4" #Activando forwarding , necesaria para encaminar echo "1" > /proc/sys/net/ipv4/ip_forward #Habilitando verificacion de direccion for f in /proc/sys/net/ipv4/conf/*/rp_filter; do echo "1" > $f done #Activando la opcion de sync cookies para evitar el ataque DOS de bomba sync echo "1" > /proc/sys/net/ipv4/tcp_syncookies #Protegiendonos del ataque DOS de bomba ICMP echo "1" > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses #Deshabilitando la aceptacion de paquetes cuya ruta haya sido prefijada en el origen for f in /proc/sys/net/ipv4/conf/*/accept_source_route; do echo "0" > $f done #Deshabilitando la aceptacion de paquetes icmp del tipo Redirect Acceptance for f in /proc/sys/net/ipv4/conf/*/accept_redirects; do echo "0" > $f done #Deshabilitando el envio de paquetes icmp del tipo Redirect Acceptance for f in /proc/sys/net/ipv4/conf/*/send_redirects; do echo "0" > $f done echo "" echo -n " --Parametros del kernel establecidos" #Eliminando las reglas de todas las cadenas $IPTABLES -t filter --flush $IPTABLES -t nat --flush $IPTABLES -t mangle --flush #Dejando solo las cadenas por defecto $IPTABLES -t filter --delete-chain $IPTABLES -t nat --delete-chain $IPTABLES -t mangle --delete-chain #Fijamos las politicas por defecto para el filtrado $IPTABLES -t filter --policy INPUT DROP $IPTABLES -t filter --policy FORWARD DROP $IPTABLES -t filter --policy OUTPUT DROP echo "" echo -n " --Tablas y cadenas vacias, establecidas politicas por defecto-- " #Comienza la filtrada echo "" echo -n " --Comienza el ingreso de reglas del firewall-- " #Se crean cadenas para paquetes no validos $IPTABLES -N bad_tcp_packets $IPTABLES -N bad_tcp_input_packets #Creando cadenas para los protocolos icmp, tcp, udp $IPTABLES -t filter -N allowed $IPTABLES -t filter -N icmp_packets $IPTABLES -t filter -N tcp_packets $IPTABLES -t filter -N udpincoming_packets #Cadena bad_tcp_packets y bad_tcp_input_packets #Los paquetes tcp entrantes no deben de presentar situaciones extranias en sus bits $IPTABLES -t filter -A bad_tcp_input_packets -p tcp --tcp-flags ALL NONE -j DROP $IPTABLES -t filter -A bad_tcp_input_packets -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP $IPTABLES -t filter -A bad_tcp_input_packets -p tcp --tcp-flags SYN,RST SYN,RST -j DROP $IPTABLES -t filter -A bad_tcp_input_packets -p tcp --tcp-flags FIN,RST FIN,RST -j DROP $IPTABLES -t filter -A bad_tcp_input_packets -p tcp --tcp-flags ACK,FIN FIN -j DROP $IPTABLES -t filter -A bad_tcp_input_packets -p tcp --tcp-flags ACK,PSH PSH -j DROP $IPTABLES -t filter -A bad_tcp_input_packets -p tcp --tcp-flags ACK,URG URG -j DROP $IPTABLES -t filter -A bad_tcp_packets -p tcp ! --syn -m state --state NEW -j LOG --log-prefix "filter posible SYN:" $IPTABLES -t filter -A bad_tcp_packets -p tcp ! --syn -m state --state NEW -j DROP #Cadena allowed $IPTABLES -t filter -A allowed -p tcp --syn -j ACCEPT $IPTABLES -t filter -A allowed -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT $IPTABLES -t filter -A allowed -p tcp -j DROP #Cadena icmp_packets, permitiendo entrada y salidas $IPTABLES -t filter -A icmp_packets -p icmp -s $ANY_IP --icmp-type 8 -j ACCEPT $IPTABLES -t filter -A icmp_packets -p icmp -s $ANY_IP --icmp-type 11 -j ACCEPT #Cadena tcp_packets #Servicio http $IPTABLES -t filter -A tcp_packets -p tcp -s $ANY_IP --dport 80 -j allowed #Servicio ssh, permitiendo solo ciertas ips para evitar ataque de fuerza bruta $IPTABLES -t filter -A tcp_packets -p tcp -s 168.243.89.5 --dport 22 -j allowed $IPTABLES -t filter -A tcp_packets -p tcp -s 168.243.89.72 --dport 22 -j allowed $IPTABLES -t filter -A tcp_packets -p tcp -s 168.243.155.123 --dport 22 -j allowed $IPTABLES -t filter -A tcp_packets -p tcp -s $LAN_IP_RANGE --dport 22 -j allowed #Cadena udpincoming_packets #Servicio DNS, permitiendo a todo el mundo PREGUNTAR LUIS SI QUIERE QUE CUALQUIER HDP OCUPE EL DNS $IPTABLES -t filter -A udpincoming_packets -p udp -s $ANY_IP --dport 53 -j ACCEPT $IPTABLES -t filter -A udpincoming_packets -p udp -s $ANY_IP -j DROP #Cadena input #Todo paquete entrante, debera de ser bueno $IPTABLES -t filter -A INPUT -p tcp -j bad_tcp_packets $IPTABLES -t filter -A INPUT -p tcp -j bad_tcp_input_packets #Rechazar cualquier paquete con ip de origen extrania $IPTABLES -t filter -A INPUT -i $EXT_IF -s $EXT_IP -j DROP $IPTABLES -t filter -A INPUT -i $EXT_IF -s $IPPRIVADACLASE_A -j DROP $IPTABLES -t filter -A INPUT -i $EXT_IF -s $IPPRIVADACLASE_B -j DROP $IPTABLES -t filter -A INPUT -i $EXT_IF -s $IPPRIVADACLASE_C -j DROP $IPTABLES -t filter -A INPUT -i $EXT_IF -s $CLASE_D_MULTICAST -j DROP $IPTABLES -t filter -A INPUT -i $EXT_IF -s $CLASE_E_RESERVADAS -j DROP #los paquetes que vienen de internet deben de ser algunos de los definidos $IPTABLES -t filter -A INPUT -p icmp -i $EXT_IF -j icmp_packets $IPTABLES -t filter -A INPUT -p tcp -i $EXT_IF -j tcp_packets $IPTABLES -t filter -A INPUT -p udp -i $EXT_IF -j udpincoming_packets #Reglas especiales #mensajes de broadcast desde la lan hacia la lan $IPTABLES -t filter -A INPUT -p ALL -i $INT_IF -d $LAN_BCAST_ADDRESS -j ACCEPT #permitimos la conexion a loopback $IPTABLES -t filter -A INPUT -p ALL -i $LO_IF -s $LO_IP -j ACCEPT $IPTABLES -t filter -A INPUT -p ALL -i $LO_IF -s $LAN_IP -j ACCEPT $IPTABLES -t filter -A INPUT -p ALL -i $LO_IF -s $EXT_IP -j ACCEPT #peticiones de la red local $IPTABLES -t filter -A INPUT -p ALL -i $INT_IF -s $LAN_IP_RANGE -j ACCEPT $IPTABLES -t filter -A INPUT -p ALL -d $EXT_IP -m state --state ESTABLISHED,RELATED -j ACCEPT #registramos 3 paquetes por minuto que no cumplan con las reglas anteriores $IPTABLES -A INPUT -m limit --limit 3/minute --limit-burst 3 -j LOG --log-level DEBUG --log-prefix "input paquete perdido:" #cadena FORWARD #solo se encaminan paquetes validos $IPTABLES -t filter -A FORWARD -p tcp -j bad_tcp_input_packets #Aceptados encaminar paquetes de la lan $IPTABLES -t filter -A FORWARD -i $INT_IF -j ACCEPT $IPTABLES -t filter -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT #registramos 3 paquetes por minuto que no cumplan con las reglas anteriores $IPTABLES -A FORWARD -m limit --limit 3/minute --limit-burst 3 -j LOG --log-level DEBUG --log-prefix "forward paquete perdido:" #Cadena output #permitiendo paquetes validos $IPTABLES -t filter -A OUTPUT -p tcp -j bad_tcp_input_packets #dejando salir cualquier cosa del host $IPTABLES -t filter -A OUTPUT -p ALL -s $LO_IP -j ACCEPT $IPTABLES -t filter -A OUTPUT -p ALL -s $LAN_IP -j ACCEPT $IPTABLES -t filter -A OUTPUT -p ALL -s $EXT_IP -j ACCEPT #registramos 3 paquetes por minuto que no cumplan con las reglas anteriores $IPTABLES -A OUTPUT -m limit --limit 3/minute --limit-burst 3 -j LOG --log-level DEBUG --log-prefix "output paquete perdido:" echo "" echo -n " --Politicas de filtrado establecidas-- " #NAT #enmascarando trafico interno cuando quiera salir a internet echo "" echo -n " --Configuracion de NAT" $IPTABLES -t nat -P POSTROUTING ACCEPT $IPTABLES -t nat -A POSTROUTING -s $LAN_IP_RANGE -o $EXT_IF -j MASQUERADE $IPTABLES -t nat -A PREROUTING -s $LAN_IP_RANGE -p tcp --dport 80 -j REDIRECT --to 8080 echo "" echo -n "Politicas de enmascaramiento establecida" echo ""