1. ¡OFERTA! con cupón "DIRVPS": hosting por $0,01 y también VPS Linux y Windows por $0,01 el primer mes por Interserver ← publi
    Descartar aviso
Descartar aviso
Al usar este sitio web, aceptas que nosotros y nuestros socios podamos establecer cookies para fines tales como personalizar el contenido y la publicidad. Más información.

Mini Firewall contra Denial Of Service (Basic )

Tema en 'Asuntos Técnicos' iniciado por IPSecureNetwork, 25 Ago 2011.

  1. IPSecureNetwork

    IPSecureNetwork Usuario activo

    Buenas amigos!

    Hace unos dias algunos chicos de este y otros foros me dijeron que han tenido algunos incidentes con ataques .. de pequeña escala pero que les han traido complicaciones... y me pidieron les pase algunas lineas de iptables que pudieran utilizar para mitigar los efectos de estos pequeños ataques.

    Aqui les paso un pequeño firewall armado para estos amigos .. que cada uno obviamente con un poco de logica podra adaptar a su gusto si es que no tiene uno armado ya con IPTABLES.
    dado que no se permiten mas de 10.000 caracteres por post .. cortare el codigo y lo hare en dos partes....

    CODE, HTML o PHP Insertado:
    #!/bin/sh
    #------------------------------------------------------------------------------
    #
    # archivo: firewallStart.sh
    #
    #
    # URL: http://www.ipsecurenetwork.com
    #
    # 
    #
    # configuraciòn
    #------------------------------------------------------------------------------
    
    # para debug usar  iptables -v.
    IPTABLES="/sbin/iptables"
    IP6TABLES="/sbin/ip6tables"
    MODPROBE="/sbin/modprobe"
    RMMOD="/sbin/rmmod"
    ARP="/usr/sbin/arp"
    
    
    # opciones de logueo
    #------------------------------------------------------------------------------
    LOG="LOG --log-level debug --log-tcp-sequence --log-tcp-options"
    LOG="$LOG --log-ip-options"
    
    
    # rate limit por default
    #------------------------------------------------------------------------------
    RLIMIT="-m limit --limit 3/s --limit-burst 8"
    
    # puertos sin privilegios
    #------------------------------------------------------------------------------
    PHIGH="1024:65535"
    PSSH="1000:1023"
    
    # modulos de kernel requeridos
    #------------------------------------------------------------------------------
    $MODPROBE ip_conntrack_ftp
    $MODPROBE ip_conntrack_irc
    
    # configuraciòn de kernel
    #------------------------------------------------------------------------------
    
    # desactiva el forwardeo de IP
    # On => Off = (reset)
    echo 1 > /proc/sys/net/ipv4/ip_forward
    echo 0 > /proc/sys/net/ipv4/ip_forward
    
    # proteccion contra IP spoofing
    for i in /proc/sys/net/ipv4/conf/*/rp_filter; do echo 1 > $i; done
    
    # proteccion contra syn flood 
    echo 1 > /proc/sys/net/ipv4/tcp_syncookies
    
    # ignora todo ICMP recho request entrante
    echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all
    
    # ignora ICMP echo request  al broadcast
    echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
    
    # loguea paquetes con direcciones imposibles ( los hay y muchos )
    for i in /proc/sys/net/ipv4/conf/*/log_martians; do echo 1 > $i; done
    
    # no loguea respuestas invalidas broadcast
    echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
    
    # no acepta o envia redirecciones icmp
    for i in /proc/sys/net/ipv4/conf/*/accept_redirects; do echo 0 > $i; done
    for i in /proc/sys/net/ipv4/conf/*/send_redirects; do echo 0 > $i; done
    
    # no acepta paquetes de origen routeado
    for i in /proc/sys/net/ipv4/conf/*/accept_source_route; do echo 0 > $i; done
    
    #  desactiva routeo  multicast 
    for i in /proc/sys/net/ipv4/conf/*/mc_forwarding; do echo 0 > $i; done
    
    # desactiva  proxy_arp.
    for i in /proc/sys/net/ipv4/conf/*/proxy_arp; do echo 0 > $i; done
    
    # activa  redireccion segura. 
    # ayuda contra el  ataque tipo MITM 
    for i in /proc/sys/net/ipv4/conf/*/secure_redirects; do echo 1 > $i; done
    
    # desactiva  bootp_relay
    for i in /proc/sys/net/ipv4/conf/*/bootp_relay; do echo 0 > $i; done
    
    # politica default
    #------------------------------------------------------------------------------
    
    # dropear todo por default
    $IPTABLES -P INPUT DROP
    $IPTABLES -P FORWARD DROP
    $IPTABLES -P OUTPUT DROP
    
    # setear reglas de tablas principales  con  ACCEPT
    
    $IPTABLES -t mangle -P PREROUTING ACCEPT
    $IPTABLES -t mangle -P INPUT ACCEPT
    $IPTABLES -t mangle -P FORWARD ACCEPT
    $IPTABLES -t mangle -P OUTPUT ACCEPT
    $IPTABLES -t mangle -P POSTROUTING ACCEPT
    
    # limpieza de reglas
    #------------------------------------------------------------------------------
    
    # borra todo
    $IPTABLES -F
    $IPTABLES -t nat -F
    $IPTABLES -t mangle -F
    
    # borra tablas
    $IPTABLES -X
    $IPTABLES -t nat -X
    $IPTABLES -t mangle -X
    
    # contadores a cero
    $IPTABLES -Z
    $IPTABLES -t nat -Z
    $IPTABLES -t mangle -Z
    
    # lineas que se pueden definir para IPTABLES. loguear dropear aceptar etc.
    #------------------------------------------------------------------------------
    
    # loguea paquetes y luego acepta.
    $IPTABLES -N ACCEPTLOG
    $IPTABLES -A ACCEPTLOG -j $LOG $RLIMIT --log-prefix "ACCEPT "
    $IPTABLES -A ACCEPTLOG -j ACCEPT
    
    # loguea paquetes y luego dropea.
    $IPTABLES -N DROPLOG
    $IPTABLES -A DROPLOG -j $LOG $RLIMIT --log-prefix "DROP "
    $IPTABLES -A DROPLOG -j DROP
    
    # primero loguea y luego hace un reject
    # los paquetes TCP son rechazados con tcp-reset.
    $IPTABLES -N REJECTLOG
    $IPTABLES -A REJECTLOG -j $LOG $RLIMIT --log-prefix "REJECT "
    $IPTABLES -A REJECTLOG -p tcp -j REJECT --reject-with tcp-reset
    $IPTABLES -A REJECTLOG -j REJECT
    
    # permitir solo algunos timpos de ICMP
    
    $IPTABLES -N RELATED_ICMP
    $IPTABLES -A RELATED_ICMP -p icmp --icmp-type destination-unreachable -j ACCEPT
    $IPTABLES -A RELATED_ICMP -p icmp --icmp-type time-exceeded -j ACCEPT
    $IPTABLES -A RELATED_ICMP -p icmp --icmp-type parameter-problem -j ACCEPT
    $IPTABLES -A RELATED_ICMP -j DROPLOG
    
    # filtrar metodologia  Multi-PING
    $IPTABLES  -A INPUT -p icmp -m limit --limit 1/s --limit-burst 2 -j ACCEPT
    $IPTABLES  -A INPUT -p icmp -m limit --limit 1/s --limit-burst 2 -j LOG --log-prefix PING-DROP:
    $IPTABLES  -A INPUT -p icmp -j DROP
    $IPTABLES  -A OUTPUT -p icmp -j ACCEPT
    # FIN DE PARTE 1 
    
    
     
  2.  
  3. IPSecureNetwork

    IPSecureNetwork Usuario activo

    Parte 2

    CODE, HTML o PHP Insertado:
    # ICMP Reglas basicas
    #------------------------------------------------------------------------------
    # dropea todo paquete icmp fragmentado. 
    $IPTABLES -A INPUT -p icmp --fragment -j DROPLOG
    $IPTABLES -A OUTPUT -p icmp --fragment -j DROPLOG
    $IPTABLES -A FORWARD -p icmp --fragment -j DROPLOG
    
    # permitir todo trafico ICMP relacionado con conexiones establecidas.
    $IPTABLES -A INPUT -p icmp -m state --state ESTABLISHED -j ACCEPT $RLIMIT
    $IPTABLES -A OUTPUT -p icmp -m state --state ESTABLISHED -j ACCEPT $RLIMIT
    
    # permitir el trafico ICMP marcado como RELATED y bloquear el resto
    $IPTABLES -A INPUT -p icmp -m state --state RELATED -j RELATED_ICMP $RLIMIT
    $IPTABLES -A OUTPUT -p icmp -m state --state RELATED -j RELATED_ICMP $RLIMIT
    
    # permitir echos ICMP entrantes pero solo bajo rate limit.
    $IPTABLES -A INPUT -p icmp --icmp-type echo-request -j ACCEPT $RLIMIT
    
    # permitir echos ICMP salientes pero bajo rate limit.
    $IPTABLES -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT $RLIMIT
    
    # bloquear todo trafico ICMP
    $IPTABLES -A INPUT -p icmp -j DROPLOG
    $IPTABLES -A OUTPUT -p icmp -j DROPLOG
    $IPTABLES -A FORWARD -p icmp -j DROPLOG
    
    # aqui coloca reglas particulares 
    #------------------------------------------------------------------------------
    
    # pertmitir al loopback todo trafico
    $IPTABLES -A INPUT -i lo -j ACCEPT
    $IPTABLES -A OUTPUT -o lo -j ACCEPT
    
    # aceptar conexiones referentes a toda conexion permitida.
    $IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
    
    # aceptar conexiones entrantes excepto invalidas
    $IPTABLES -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
    
    # EXTRAS
    #------------------------------------------------------------------------------
    
    # DROPEAR SERVICIOS DE WINDOWS ( PARA QUE LOS QUEREMOS.. SOMOS DE LA COMUNIDAD GNU )
    $IPTABLES -A INPUT -p tcp -m multiport --dports 135,137,138,139,445,1433,1434 -j DROP
    $IPTABLES -A INPUT -p udp -m multiport --dports 135,137,138,139,445,1433,1434 -j DROP
    
    # DROPEAR TRAFICO ENTRANTE INVALIDO
    $IPTABLES -A INPUT -m state --state INVALID -j DROP
    
    # DROPEAR TRAFICO SALIENTE INVALIDO
    $IPTABLES -A OUTPUT -m state --state INVALID -j DROP
    
    
    # PORT SCANNERS ( FILTRO )
    $IPTABLES -A INPUT -m state --state NEW -p tcp --tcp-flags ALL ALL -j DROP
    $IPTABLES -A INPUT -m state --state NEW -p tcp --tcp-flags ALL NONE -j DROP
    
    # ALGUNAS REGLAS ANTISPOOF Y SYN-FLOOD
    # $IPTABLES -A INPUT -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP
    # $IPTABLES -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
    # $IPTABLES -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
    $IPTABLES -N SYN_FLOOD
    $IPTABLES -A INPUT -p tcp --syn -j SYN_FLOOD
    $IPTABLES -A SYN_FLOOD -m limit --limit 2/s --limit-burst 6 -j RETURN
    $IPTABLES -A SYN_FLOOD -j DROP
    
    # AQUI TIENES UNA LISTA DE IPS A BLOQUEAR (http://www.dshield.org/top10.php).
    # $IPTABLES -A INPUT -s IP-A-BLOQUEAR -j DROPLOG
    
    # Dropea todo trafico reservado por IANA.
    #------------------------------------------------------------------------------
    
    $IPTABLES -A INPUT -s 0.0.0.0/7 -j DROP
    $IPTABLES -A INPUT -s 2.0.0.0/8 -j DROP
    $IPTABLES -A INPUT -s 5.0.0.0/8 -j DROP
    $IPTABLES -A INPUT -s 7.0.0.0/8 -j DROP
    $IPTABLES -A INPUT -s 10.0.0.0/8 -j DROP
    $IPTABLES -A INPUT -s 23.0.0.0/8 -j DROP
    $IPTABLES -A INPUT -s 27.0.0.0/8 -j DROP
    $IPTABLES -A INPUT -s 31.0.0.0/8 -j DROP
    $IPTABLES -A INPUT -s 36.0.0.0/7 -j DROP
    $IPTABLES -A INPUT -s 39.0.0.0/8 -j DROP
    $IPTABLES -A INPUT -s 42.0.0.0/8 -j DROP
    $IPTABLES -A INPUT -s 49.0.0.0/8 -j DROP
    $IPTABLES -A INPUT -s 50.0.0.0/8 -j DROP
    $IPTABLES -A INPUT -s 77.0.0.0/8 -j DROP
    $IPTABLES -A INPUT -s 78.0.0.0/7 -j DROP
    $IPTABLES -A INPUT -s 92.0.0.0/6 -j DROP
    $IPTABLES -A INPUT -s 96.0.0.0/4 -j DROP
    $IPTABLES -A INPUT -s 112.0.0.0/5 -j DROP
    $IPTABLES -A INPUT -s 120.0.0.0/8 -j DROP
    $IPTABLES -A INPUT -s 169.254.0.0/16 -j DROP
    $IPTABLES -A INPUT -s 172.16.0.0/12 -j DROP
    $IPTABLES -A INPUT -s 173.0.0.0/8 -j DROP
    $IPTABLES -A INPUT -s 174.0.0.0/7 -j DROP
    $IPTABLES -A INPUT -s 176.0.0.0/5 -j DROP
    $IPTABLES -A INPUT -s 184.0.0.0/6 -j DROP
    $IPTABLES -A INPUT -s 192.0.2.0/24 -j DROP
    $IPTABLES -A INPUT -s 197.0.0.0/8 -j DROP
    $IPTABLES -A INPUT -s 198.18.0.0/15 -j DROP
    $IPTABLES -A INPUT -s 223.0.0.0/8 -j DROP
    $IPTABLES -A INPUT -s 224.0.0.0/3 -j DROP
    
    # aqui coloca los ports salientes ... el resto que no figure aqui se filtrara.
    #------------------------------------------------------------------------------
    # DNS  saliente
    $IPTABLES -A OUTPUT -m state --state NEW -p udp --dport 53 -j ACCEPT
    $IPTABLES -A OUTPUT -m state --state NEW -p tcp --dport 53 -j ACCEPT
    
    # http saliente
    $IPTABLES -A OUTPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT
    
    # https saliente
    $IPTABLES -A OUTPUT -m state --state NEW -p tcp --dport 443 -j ACCEPT
    
    # SMTP saliente
    # $IPTABLES -A OUTPUT -m state --state NEW -p tcp --dport 465 -j ACCEPT
    
    # "submission" (RFC 2476) 
    $IPTABLES -A OUTPUT -m state --state NEW -p tcp --dport 587 -j ACCEPT
    
    # pop3 saliente
    $IPTABLES -A OUTPUT -m state --state NEW -p tcp --dport 995 -j ACCEPT
    
    # ssh saliente
    $IPTABLES -A OUTPUT -m state --state NEW -p tcp --dport 22 -j ACCEPT
    
    # ftp saliente
    $IPTABLES -A OUTPUT -m state --state NEW -p tcp --dport 21 -j ACCEPT
    
    
    # Permitir conexiones a IRC servers ( si vendes IRC Servers )
    # Note: This usually needs the ip_conntrack_irc kernel module.
    # $IPTABLES -A OUTPUT -m state --state NEW -p tcp --dport 6667 -j ACCEPT
    
    # si usas proxy revereso .. conexiones salientes 
    # $IPTABLES -A OUTPUT -m state --state NEW -p tcp --dport 8080 -j ACCEPT
    # $IPTABLES -A OUTPUT -m state --state NEW -p tcp --dport 8090 -j ACCEPT
    
    
    
    # port saliente csv
    # $IPTABLES -A OUTPUT -m state --state NEW -p tcp --dport 2401 -j ACCEPT
    
    # port saliente mysql
    # $IPTABLES -A OUTPUT -m state --state NEW -p tcp --dport 3306 -j ACCEPT
    
    # port saliente SVN
    # $IPTABLES -A OUTPUT -m state --state NEW -p tcp --dport 3690 -j ACCEPT
    
    # port saliente  PLESK 
    # $IPTABLES -A OUTPUT -m state --state NEW -p tcp --dport 8443 -j ACCEPT
    
    # si usas OPENVPN.
    $IPTABLES -A OUTPUT -m state --state NEW -p udp --dport 1194 -j ACCEPT
    
    # aqui colocas los puertos que deseas abrir para servicios 
    #------------------------------------------------------------------------------
    
    # DNS
    $IPTABLES -A INPUT -m state --state NEW -p udp --dport 53 -j ACCEPT
    $IPTABLES -A INPUT -m state --state NEW -p tcp --dport 53 -j ACCEPT
    
    # HTTP
    $IPTABLES -A INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT
    
    # HTTPS
    $IPTABLES -A INPUT -m state --state NEW -p tcp --dport 443 -j ACCEPT
    
    # permitir POP3
    $IPTABLES -A INPUT -m state --state NEW -p tcp --dport 110 -j ACCEPT
    
    # permitir IMAP4 entrante
    $IPTABLES -A INPUT -m state --state NEW -p tcp --dport 143 -j ACCEPT
    
    # permitir POP3 SSL
    $IPTABLES -A INPUT -m state --state NEW -p tcp --dport 995 -j ACCEPT
    
    # Permitir SMTP
    $IPTABLES -A INPUT -m state --state NEW -p tcp --dport 25 -j ACCEPT
    
    # permitir SSH
    $IPTABLES -A INPUT -m state --state NEW -p tcp --dport 22 -j ACCEPT
    
    # permitir FTP entrante
    $IPTABLES -A INPUT -m state --state NEW -p tcp --dport 21 -j ACCEPT
    
    # permitir NNTP 
    # $IPTABLES -A INPUT -m state --state NEW -p tcp --dport 119 -j ACCEPT
    
    # permitir  MySQL 
    # $IPTABLES -A INPUT -m state --state NEW -p tcp --dport 3306 -j ACCEPT
    
    # permitir PLESK 
    # $IPTABLES -A INPUT -m state --state NEW -p tcp --dport 8843 -j ACCEPT
    
    
    # permitir Cpanel 
    # $IPTABLES -A INPUT -m state --state NEW -p tcp --dport 2086 -j ACCEPT
    # $IPTABLES -A INPUT -m state --state NEW -p tcp --dport 2082 -j ACCEPT
    
    # Login y reset de todo el resto
    #------------------------------------------------------------------------------
    # Usa REJECT en vez de  REJECTLOG si no necesitas o no quieres loguear nada.
    $IPTABLES -A INPUT -j REJECTLOG
    $IPTABLES -A OUTPUT -j REJECTLOG
    $IPTABLES -A FORWARD -j REJECTLOG
    
    
    #------------------------------------------------------------------------------
    
    
     exit 0
     
  4. Sphyr0

    Sphyr0 Usuario activo

    Se ve bien, tu lo hiciste? Lo pregunto porque todos los comentarios estan en español a excepcion de uno (o el que vi :D)

     
  5. IPSecureNetwork

    IPSecureNetwork Usuario activo

    lo he traducido yo para este foro .. el texto original esta todo en ingles ( te lo puedo pasar si lo deseas )
    el 40% de nuestro equipo es de origen americano .. y generalmente ellos hacen gran parte del soft que usamos... de hecho son grandes contribuyentes de otros foros americanos homonimos de este. donde ofrecen a la comunidad codigo que usamos en IPSN.

    cuando estoy en foros en español ... generalmente me toca traducir todo para que quienes no tienen un dominio del ingles fluido .. puedan comprender de que se trata.
     
  6. Sphyr0

    Sphyr0 Usuario activo

    Ahh entiendo, con razon "te he visto" en wht ;) bueno, gracias por el dato, en cuanto pueda checare el script.
     


Alojamiento web, Hosting Reseller, Servidores Dedicados - All in Hosting


    
    
    
    
Blog · Sitios amigos: GuiaHosting · Unidominios · Interalta ·