¡Te damos la bienvenida al nuevo sysarmy --help! Para recuperar tu usuario pedí un password reset.

Mitigar DDoS temporales

Hola! Desde hace un tiempo que algunos sitios que administro (particularmente wordpress) reciben en ciertos momentos de la semana un DDoS con el objetivo de acceder al panel admin. Esto es algo conocido que hace tiempo ocurre en la plataforma de wordpress, entre otras.


Principalmente el spam viene de china, rusia, entre otros paises especificos.

Al ser sitios apuntados a américa latina y no recibir visitas reales de esos paises (unicamente spam), tiene logica bloquear el trafico por IP de paises directamente como regla en el firewall o CDN? Qué opinan?

Los sitios cuentan con medidas de protección, pero de todas maneras es trafico que el servidor recibe y procesa de a momentos (muy agresivo) y gasta recursos al bloquear esa cantidad de IPs en los eventos semanales.


Al no ser algo constante es controlable, pero semanalmente vuelve a ocurrir de manera muy rápida y eso eleva ciertos recursos de los servidores generando alertas constantemente.


La seguridad del CDN está al maximo, y los directorios sensibles están protegidos, es decir que ningún ataque tendría éxito. Pero el problema está en que igualmente el servidor gasta recursos en protegerse.



Saludos!

Respuestas

  • Pero tenes CDN adelante? onda un cloudflare? sino, yo meteria un fail2ban agresivo por url, 1 attempt choto y a iptables con DROP.

  • Nosotros tenemos Datadog, y tenemos dashboards donde podemos "mas o menos" ver cuando hacen algo asi. Cuando detectamos un IP que esta jodiendo, lo bloqueamos a traves del load balancer y listo. Es bastante choto, porque es reactivo y no proactivo, pero es una forma rapida y "segura" de frenarlo.

  • editado August 2020

    Algunas reglas de iptables que puedes aplicar:

    ### Bloqueando ataques de DDoS con IPtables ###
     ## Bloquear paquetes inválidos ##
    iptables -t mangle -A PREROUTING -m conntrack --ctstate INVALID -j DROP
     ## Bloquear paquetes nuevos que no son SYN ##
    iptables -t mangle -A PREROUTING -p tcp ! --syn -m conntrack --ctstate NEW -j DROP
     ## Bloquear valores anoramales de MSS ##
    iptables -t mangle -A PREROUTING -p tcp -m conntrack --ctstate NEW -m tcpmss ! --mss 536:65535 -j DROP
     ## Bloquear paquetes con flags erróneos ##
    iptables -t mangle -A PREROUTING -p tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP 
    iptables -t mangle -A PREROUTING -p tcp --tcp-flags FIN,SYN FIN,SYN -j DROP 
    iptables -t mangle -A PREROUTING -p tcp --tcp-flags SYN,RST SYN,RST -j DROP 
    iptables -t mangle -A PREROUTING -p tcp --tcp-flags FIN,RST FIN,RST -j DROP 
    iptables -t mangle -A PREROUTING -p tcp --tcp-flags FIN,ACK FIN -j DROP 
    iptables -t mangle -A PREROUTING -p tcp --tcp-flags ACK,URG URG -j DROP 
    iptables -t mangle -A PREROUTING -p tcp --tcp-flags ACK,FIN FIN -j DROP 
    iptables -t mangle -A PREROUTING -p tcp --tcp-flags ACK,PSH PSH -j DROP 
    iptables -t mangle -A PREROUTING -p tcp --tcp-flags ALL ALL -j DROP 
    iptables -t mangle -A PREROUTING -p tcp --tcp-flags ALL NONE -j DROP 
    iptables -t mangle -A PREROUTING -p tcp --tcp-flags ALL FIN,PSH,URG -j DROP 
    iptables -t mangle -A PREROUTING -p tcp --tcp-flags ALL SYN,FIN,PSH,URG -j DROP 
    iptables -t mangle -A PREROUTING -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP
     ## Bloquear paquetes de subredes privadas ##
    iptables -t mangle -A PREROUTING -s 224.0.0.0/3 -j DROP 
    iptables -t mangle -A PREROUTING -s 169.254.0.0/16 -j DROP 
    iptables -t mangle -A PREROUTING -s 172.16.0.0/12 -j DROP 
    iptables -t mangle -A PREROUTING -s 192.0.2.0/24 -j DROP 
    iptables -t mangle -A PREROUTING -s 192.168.0.0/16 -j DROP 
    iptables -t mangle -A PREROUTING -s 10.0.0.0/8 -j DROP 
    iptables -t mangle -A PREROUTING -s 0.0.0.0/8 -j DROP 
    iptables -t mangle -A PREROUTING -s 240.0.0.0/5 -j DROP 
    iptables -t mangle -A PREROUTING -s 127.0.0.0/8 ! -i lo -j DROP
     ## Bloquear tráfico ICMP ##
    iptables -t mangle -A PREROUTING -p icmp -j DROP
     ## Bloquear tráfico por cantidad de conexiones ##
    iptables -A INPUT -p tcp -m connlimit --connlimit-above 85 -j REJECT --reject-with tcp-reset
     ## Bloquear tráfico por cantidad de conexiones por unidad de tiempo ##
    iptables -A INPUT -p tcp -m conntrack --ctstate NEW -m limit --limit 50/s --limit-burst 18 -j ACCEPT 
    iptables -A INPUT -p tcp -m conntrack --ctstate NEW -j DROP
     ## Bloquear paquetes fragmentados ##
    iptables -t mangle -A PREROUTING -f -j DROP
     ## Bloquear tráfico TCP RST ##
    iptables -A INPUT -p tcp --tcp-flags RST RST -m limit --limit 4/s --limit-burst 4 -j ACCEPT 
    iptables -A INPUT -p tcp --tcp-flags RST RST -j DROP
     ## Usando SYNPROXY para mitigar los SYN Floods ##
    iptables -t raw -A PREROUTING -p tcp -m tcp --syn -j CT --notrack 
    iptables -A INPUT -p tcp -m tcp -m conntrack --ctstate INVALID,UNTRACKED -j SYNPROXY --sack-perm --timestamp --wscale 7 --mss 1460 
    iptables -A INPUT -m conntrack --ctstate INVALID -j DROP
     ## Bloquear escaneos de puertos ##
    iptables -N port-scan 
    iptables -A port-scan -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s --limit-burst 3 -j RETURN 
    iptables -A port-scan -j DROP
    


    Aplica criterio, en cuales te serían útiles.

    Tambien hay algunas configuraciones a nivel de kernel, que permiten mejorar la performance y mitigar mejor los ataques de DDoS.

    Te dejo esta referencia, ya que no lo pude agregar al comentario:


    Saludos. 😄

  • Hola,

    Algunas configuraciones del kernel Linux permiten mejorar la performance y mitigar mejor los ataques de DDoS.

    kernel.printk = 4 4 1 7 
    kernel.panic = 10 
    kernel.sysrq = 0 
    kernel.shmmax = 4294967296 
    kernel.shmall = 4194304 
    kernel.core_uses_pid = 1 
    kernel.msgmnb = 65536 
    kernel.msgmax = 65536 
    vm.swappiness = 20 
    vm.dirty_ratio = 80 
    vm.dirty_background_ratio = 5 
    fs.file-max = 2097152 
    net.core.netdev_max_backlog = 262144 
    net.core.rmem_default = 31457280 
    net.core.rmem_max = 67108864 
    net.core.wmem_default = 31457280 
    net.core.wmem_max = 67108864 
    net.core.somaxconn = 65535 
    net.core.optmem_max = 25165824 
    net.ipv4.neigh.default.gc_thresh1 = 4096 
    net.ipv4.neigh.default.gc_thresh2 = 8192 
    net.ipv4.neigh.default.gc_thresh3 = 16384 
    net.ipv4.neigh.default.gc_interval = 5 
    net.ipv4.neigh.default.gc_stale_time = 120 
    net.netfilter.nf_conntrack_max = 10000000 
    net.netfilter.nf_conntrack_tcp_loose = 0 
    net.netfilter.nf_conntrack_tcp_timeout_established = 1800 
    net.netfilter.nf_conntrack_tcp_timeout_close = 10 
    net.netfilter.nf_conntrack_tcp_timeout_close_wait = 10 
    net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 20 
    net.netfilter.nf_conntrack_tcp_timeout_last_ack = 20 
    net.netfilter.nf_conntrack_tcp_timeout_syn_recv = 20 
    net.netfilter.nf_conntrack_tcp_timeout_syn_sent = 20 
    net.netfilter.nf_conntrack_tcp_timeout_time_wait = 10 
    net.ipv4.tcp_slow_start_after_idle = 0 
    net.ipv4.ip_local_port_range = 1024 65000 
    net.ipv4.ip_no_pmtu_disc = 1 
    net.ipv4.route.flush = 1 
    net.ipv4.route.max_size = 8048576 
    net.ipv4.icmp_echo_ignore_broadcasts = 1 
    net.ipv4.icmp_ignore_bogus_error_responses = 1 
    net.ipv4.tcp_congestion_control = htcp 
    net.ipv4.tcp_mem = 65536 131072 262144 
    net.ipv4.udp_mem = 65536 131072 262144 
    net.ipv4.tcp_rmem = 4096 87380 33554432 
    net.ipv4.udp_rmem_min = 16384 
    net.ipv4.tcp_wmem = 4096 87380 33554432 
    net.ipv4.udp_wmem_min = 16384 
    net.ipv4.tcp_max_tw_buckets = 1440000 
    net.ipv4.tcp_tw_recycle = 0 
    net.ipv4.tcp_tw_reuse = 1 
    net.ipv4.tcp_max_orphans = 400000 
    net.ipv4.tcp_window_scaling = 1 
    net.ipv4.tcp_rfc1337 = 1 
    net.ipv4.tcp_syncookies = 1 
    net.ipv4.tcp_synack_retries = 1 
    net.ipv4.tcp_syn_retries = 2 
    net.ipv4.tcp_max_syn_backlog = 16384 
    net.ipv4.tcp_timestamps = 1 
    net.ipv4.tcp_sack = 1 
    net.ipv4.tcp_fack = 1 
    net.ipv4.tcp_ecn = 2 
    net.ipv4.tcp_fin_timeout = 10 
    net.ipv4.tcp_keepalive_time = 600 
    net.ipv4.tcp_keepalive_intvl = 60 
    net.ipv4.tcp_keepalive_probes = 10 
    net.ipv4.tcp_no_metrics_save = 1 
    net.ipv4.ip_forward = 0 
    net.ipv4.conf.all.accept_redirects = 0 
    net.ipv4.conf.all.send_redirects = 0 
    net.ipv4.conf.all.accept_source_route = 0 
    net.ipv4.conf.all.rp_filter = 1
    

    Tambien aplicando reglas de iptables.

  • Hola,

    Existe un plugin en wordpress "Wordfence", quizás esto te ayude a solucionar el problema. (https://www.wordfence.com/)

    Puedes aplicar las siguientes configuraciones a nivel de kernel, que permiten mejorar la performance y mitigar mejor los ataques DDoS, tambien puedes aplicar las siguientes reglas de iptables.

    Referencia:

    Espero que sea de ayuda.

    Saludos. 😄

  • editado August 2020

    Podrías probar con el script de DDoS Deflate, trabaja monitoreando las conexiones persistentes utilizando netstat, simple pero efectivo.

    wget http://www.inetbase.com/scripts/ddos/install.sh
    chmod 0700 install.sh
    ./install.sh
    

    y acá tenes otro script similar:


    Saludos!

Accede o Regístrate para comentar.