All pastes #159922 Raw Edit

Miscellany

public text v1 · immutable
·published 2006-09-03 17:43 UTC
rendered paste body
#/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 ""