DDoS (Denegación de servicio) es un ataque muy común, que hace que muchos ordenadores infectados lancen peticiones contra una página web hasta colapsarla y tumbarla. Cuando te infectan un ordenador para poder hacer luego estos ataques, hay gente que es cuidadosa y sustituye los comandos “netstat”, “ss”, “lsof”… Por si se te ocurre mirar a ver que pasa, que solo te muestre lo que el atacante quiere que veas, es decir, esconde todos los procesos de ataque para que no te des cuenta de que estas atacando. Esto se podría detectar si se tuviese un Firewall externo por el que pasase todo el trafico.
En este post voy a explicar como se podría detectar estas cosas con Iptables y en el caso que se detecte que se esta atacando a una página web poder detener este ataque. Esto se puede aplicar a mas situaciones pero como ejemplo para explicar y entender el proceso he optado esta situación.
Para empezar, lo que se va ha hacer es logar el tráfico de la máquina que nos interese. En este caso se va a logar por usuario ya que no se sabe que fichero/servicio puede ser el infectado, ni que puertos se están utilizando, ni a que puertos puede estar atacando.
Para ver los usuarios del sistema:
cat /etc/passwd
Aquí saldrán todos los usuarios creados tanto los de usuarios normales como los del sistema.
Una vez localizados los usuarios que se quieren monitorizar usar el siguiente comando
Syntaxis: iptables –append OUTPUT -m owner –uid-owner <usuario> –jump LOG –log-prefix “<prefijo para poder diferenciar los logs>
iptables --append OUTPUT -m owner --uid-owner root --jump LOG --log-prefix "trafico-root" iptables --append OUTPUT -m owner --uid-owner operativoslinux --jump LOG --log-prefix "trafico-operativoslinux" iptables --append OUTPUT -m owner --uid-owner www-data --jump LOG --log-prefix "trafico-apache"
Una vez ejecutados estos comandos empezaran a logar todo el tráfico que se genere por esos usuarios y guardarlo en /var/log/syslog
Para verlo en tiempo real
tail -f /var/log/syslog
Después de detectar las conexiones que se están estableciendo, lo siguiente es bloquearlas con iptables. Normalmente cuando se hace un ataque de DDoS suele ser a puertos: 80, 443, 8080 y 8443 es decir, a puertos web. Para eso hay que bloquear el trafico que vaya a dichos puertos.
iptables -A OUTPUT -o eth0 -p TCP --destination-port 80 -j DROP iptables -A OUTPUT -o eth0 -p TCP --destination-port 443 -j DROP iptables -A OUTPUT -o eth0 -p TCP --destination-port 8080 -j DROP iptables -A OUTPUT -o eth0 -p TCP --destination-port 8443 -j DROP
Y una vez hecho esto todo el tráfico que vaya con destino a esos puertos será bloqueado. Para verlo usar el siguiente comando:
iptables -L -v -n
Chain OUTPUT (policy ACCEPT 666 packets, 215K bytes) pkts bytes target prot opt in out source destination 14 840 DROP tcp -- * eth0 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 0 0 DROP tcp -- * eth0 0.0.0.0/0 0.0.0.0/0 tcp dpt:443 0 0 DROP tcp -- * eth0 0.0.0.0/0 0.0.0.0/0 tcp dpt:8080 0 0 DROP tcp -- * eth0 0.0.0.0/0 0.0.0.0/0 tcp dpt:8443
En este caso se ve que en el puerto 80 se está generando tráfico
Una vez subsanado el problema se pueden quitar todas las reglas aplicadas de la siguiente manera
iptables -F OUTPUT
También se pueden detectar si una máquina esta siendo atacada contando las conexiones que se están realizando al apache.
netstat -anp |grep 'tcp|udp' | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
Muy guay el artículo, ignoraba esas reglas de iptables. No obstante, pienso que las de la tabla OUTPUT son demesiadas agresivas ya que te quedarías sin tráfico WEB.
Yo primero discriminaria el tráfico UDP que es el más utilizado para D.o.S 🙂
Un saludo!