Tengo un servidor Ubuntu 14.04, hosteo un juego y una web, estoy recibiendo ataques DDOS, creo que son pequeños, necesitaría alguien como consultor freelance que esporadicamente resolviera dudas y realizara una configuración inicial del firewall, así como realizar algunas pruebas que garanticen que el server puede rechazar los ddos.
Gracias,
* Creo que es el foro adecuado, si no es así que un mod lo mueva, sorry.
uff el-brujo (administrador del foro) es experto en eso, el foro ha sufrido golpes grandes (varias decenas de miles de maquinas (creo que han llegado a cientos de miles), el más popular fue una botnet de 75mil)
lo primero que recomiendo indicar es: que maquina es el servidor, que banda (bajada y subida) tienes contratada
En línea
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
No entiendo mucho de esto pero ,por si te sire de momento, con iptables puedes hacer alguna regla para bloquear ips si hacen demasiadas conexiones seguidas a un puerto. Eso si, hay que cuadrarlo bien sino bloquearias a usuarios legítimos.
Código:
iptables -I INPUT -i eth0 -p tcp -m tcp --dport 21 -m state --state NEW -m recent --set --name DEFAULT --rsource iptables -I INPUT -i eth0 -p tcp -m tcp --dport 21 -m state --state NEW -m recent --update --seconds 180 --hitcount 4 --name DEFAULT --rsource -j DROP
En este caso si hace 4 peticiones en 3 minutos al puerto 21 bloquea la ip.
#Todo el tráfico syn $IPT -P INPUT DROP $IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT $IPT -A INPUT -p tcp ! --syn -j REJECT --reject-with tcp-reset $IPT -A INPUT -m state --state INVALID -j DROP $IPT -P OUTPUT DROP $IPT -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT $IPT -A OUTPUT -p tcp ! --syn -j REJECT --reject-with tcp-reset $IPT -A OUTPUT -m state --state INVALID -j DROP $IPT -P FORWARD DROP $IPT -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT $IPT -A FORWARD -p tcp ! --syn -j REJECT --reject-with tcp-reset $IPT -A FORWARD -m state --state INVALID -j DROP $IPT -A INPUT -i lo -j ACCEPT $IPT -A OUTPUT -o lo -j ACCEPT $IPT -A FORWARD -i lo -o lo -j ACCEPT
#Cuando sube la carga $IPT -A INPUT -p tcp --syn -j REJECT --reject-with icmp-port-unreachable
#La que mejor va $IPT -N syn-flood $IPT -A syn-flood -m limit --limit 100/second --limit-burst 150 -j RETURN $IPT -A syn-flood -j LOG --log-prefix "SYN flood: " $IPT -A syn-flood -j DROP
#Igual que el de arriba pero muy raw $IPT -N syn-flood $IPT -A INPUT -i eth0:2 -p tcp --syn -j syn-flood $IPT -A syn-flood -m limit --limit 1/s --limit-burst 4 -j RETURN $IPT -A syn-flood -j DROP $IPT -A INPUT -p tcp -m tcp --tcp-flags SYN,RST,ACK SYN -m limit --limit 1/sec -j ACCEPT $IPT -A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK RST -m limit --limit 1/sec -j ACCEPT
#Descartar paquetes mal formados $IPT -N PKT_FAKE $IPT -A PKT_FAKE -m state --state INVALID -j DROP $IPT -A PKT_FAKE -p tcp --dport 80 --tcp-flags ALL ACK,RST,SYN,FIN -j DROP $IPT -A PKT_FAKE -p tcp --dport 80 --tcp-flags SYN,FIN SYN,FIN -j DROP $IPT -A PKT_FAKE -p tcp --dport 80 --tcp-flags SYN,RST SYN,RST -j DROP $IPT -A PKT_FAKE -p tcp --dport 80 ! --syn -m state --state NEW -j DROP $IPT -A PKT_FAKE -f -j DROP $IPT -A PKT_FAKE -j RETURN
#Syn-flood $IPT -N syn-flood $IPT -A INPUT -i eth+ -p tcp --tcp-flags SYN,ACK,FIN,RST RST -j syn-flood $IPT -A FORWARD -i eth+ -p tcp --tcp-flags SYN,ACK,FIN,RST RST -j syn-flood $IPT -A syn-flood -m limit --limit 4/s --limit-burst 16 -j RETURN $IPT -A syn-flood -m limit --limit 75/s --limit-burst 100 -j RETURN -A syn-flood -j LOG --log-prefix "SYN FLOOD " --log-tcp-sequence --log-tcp-options --log-ip-options -m limit --limit 1/second $IPT -A syn-flood -j DROP
#Requiere módulo "recent" modprobe ipt_recent $IPT -A INPUT -p tcp --dport 80 -m state --state NEW -m recent --set $IPT -A INPUT -p tcp --dport 80 -m state --state NEW -m recent --update --seconds 10 --hitcount 10 -j DROP
# explicación: # Se añade cada ip que se conecte a la tabla de recent # Por por cada ip en la tabla de recent si hace mas de x hits en x segundos, se dropea. $IPT -I INPUT -p tcp --syn -m recent --set $IPT -I INPUT -p tcp --syn -m recent --update --seconds 10 --hitcount 30 -j DROP
#UDP Flood $IPT -A OUTPUT -p udp -m state --state NEW -j ACCEPT $IPT -A OUTPUT -p udp -m limit --limit 100/s -j ACCEPT $IPT -A OUTPUT -p udp -j DROP
#Evitando Layer7 DoS limitando a 80 la máxima cantidad de conexiones $IPT -A INPUT -p tcp --dport 80 -m hashlimit --hashlimit-upto 50/min --hashlimit-burst 80 --hashlimit-mode srcip --hashlimit-name http -j ACCEPT $IPT -A INPUT -p tcp --dport 80 -j DROP
#Permitir el ping, pero a 1 paquete por segundo, para evitar un ataque ICMP Flood $IPT -A INPUT -p icmp -m state --state NEW --icmp-type echo-request -m limit --limit 1/s --limit-burst 1 -j ACCEPT $IPT -A INPUT -p icmp -j DROP
#Evitando que escaneen la máquina $IPT -A INPUT -i $ETH -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE –j DROP $IPT -A INPUT -i $ETH -p tcp -m tcp --tcp-flags SYN,FIN SYN,FIN –j DROP $IPT -A INPUT -i $ETH -p tcp -m tcp --tcp-flags SYN,RST SYN,RST –j DROP $IPT -A INPUT -i $ETH -p tcp -m tcp --tcp-flags FIN,RST FIN,RST –j DROP $IPT -A INPUT -i $ETH -p tcp -m tcp --tcp-flags ACK,FIN FIN –j DROP $IPT -A INPUT -i $ETH -p tcp -m tcp --tcp-flags ACK,URG URG –j DROP
Recomiendo no llenar el post de soluciones sin saber por lo menos que tipo de ddos específico enfrenta o si aunque sea es realmente es un ddos... Dejen el tema para que algun asesor con experiencia contacte
En línea
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
No entiendo mucho de esto pero ,por si te sire de momento, con iptables puedes hacer alguna regla para bloquear ips si hacen demasiadas conexiones seguidas a un puerto. Eso si, hay que cuadrarlo bien sino bloquearias a usuarios legítimos.
Código:
iptables -I INPUT -i eth0 -p tcp -m tcp --dport 21 -m state --state NEW -m recent --set --name DEFAULT --rsource iptables -I INPUT -i eth0 -p tcp -m tcp --dport 21 -m state --state NEW -m recent --update --seconds 180 --hitcount 4 --name DEFAULT --rsource -j DROP
En este caso si hace 4 peticiones en 3 minutos al puerto 21 bloquea la ip.
Recomiendo no llenar el post de soluciones sin saber por lo menos que tipo de ddos específico enfrenta o si aunque sea es realmente es un ddos... Dejen el tema para que algun asesor con experiencia contacte
De cierta forma estoy de acuerdo con engel lex, en el sentido de que siempre que se habla de ataques se recomienda el bloqueo por IPTables no evitarás que llegue al servidor y por ende el consumo del ancho de banda seguirá siendo afectado.
Cuando nos hablan de un ataque DDOS siempre se nos viene a la mente el una negación de servicios por consumo de ancho de banda o de recursos del equipo, pero hay muchos tipos de ataques DDOS.
En la parte que no estoy de acuerdo es dejar el tema hasta que algún asesor con experiencia contacte, porque puede presentarse un "asesor" que le de espejitos y Littl3 nos pudiera compartir lo que él a encontrado y/o lo que le dices los asesores tanto para nuestro conocimiento como poderlo ayudar con nuestras experiencias.