Jump to content

¿Cómo proteger tu servidor de ataques de fuerza bruta & port knocking para proteger tu SSH? (Sysadmin - Básicos)


Recommended Posts

Posted

Todo sistema Linux/UNIX tienen a nivel de backend y estructura de configuración totalmente parecida los cuales en los próximos temas estaré publicando mas y mas contenido.

¿Qué es un ataque de fuerza bruta?, un ataque de fuerza bruta en resumidas cuentas es un vector de ataque de prueba y error para poder acceder a un servicio en especifico. normalmente los lammercitos, bots, o gente malintencionada suelen usarlo para rascar al fondo del barril y terminar tirando a suerte para ver si pueden acceder a tu VPS.

 

¿Qué es el port knocking?

El port knocking es una tecnica de toque a los puertos para evitar que puedan acceder a tu VPS, en vez de solo acceder al puerto 22, o al puerto asignado puedes asignar varias cadenas de puertos los cuales nos servirá para acceder. un atacante tendría que saber cual es la cadena de puertos especifica la cual se puede hardenizar al punto que uno desee. ejemplo (NO ES NECESARIO HACER ESTO AHORA): (conectarse a través de un tunel especifico donde solo se asigne una dirección IP con su respectiva subred y CIDR para que se pueda conectar mediante el firewall como endpoint a TCP, o UDP generando solo el fingerprint de ese VPS del lado del cliente para poderse conectar por el propio tunel al VPS donde queremos acceder y nos sirva como llave, etc, etc, etc)

 

¿Cómo evitamos ataques de fuerza bruta, o intentos de ingreso por atacantes a nuestro VPS?

Es sumamente sencillo. lo que haremos será ir al archivo de configuración de nuestro VPS sea Debian, Freebsd (UNIX), o cualquier otra distribución Linux o UNIX.

¿Dónde se encuentra este archivo?, se encuentra en la ruta /etc/ssh/

Vamos a abrir el archivo con el comando nano, o cualquier editor de texto lo cual nos tendría que aparecer de la siguiente manera el archivo de configuración del SSH:

# This is the sshd server system-wide configuration file.  See
# sshd_config(5) for more information.

# This sshd was compiled with PATH=/usr/local/bin:/usr/bin:/bin:/usr/games

# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented.  Uncommented options override the
# default value.

Include /etc/ssh/sshd_config.d/*.conf

Port 1337  <- aquí en vez de este puerto,
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::

#HostKey /etc/ssh/ssh_host_rsa_key
#HostKey /etc/ssh/ssh_host_ecdsa_key
#HostKey /etc/ssh/ssh_host_ed25519_key

# Ciphers and keying
#RekeyLimit default none

 

---------------------------------------------------------------------------------------

En el apartado que dice Port 22, se cambiará al puerto que quieran cambiar. ¿cómo puedo ver si estoy usando un puerto y me está generando problemas?

1- Usa el comando lsof, ejemplo: lsof -i :22  (el -i significa información), y nos tendrá que mostrar lo que se está corriendo en ese puerto (recordar instalar lsof en debian, o freebsd)

2- Cambia el puerto al que quieras siempre y cuando no esté ocupado, recomendado desde el 12144 en adelante)

Habilita el puerto en el firewall o te generará problemas de conexión y tendrás que acceder desde el KVM de su proveedor VPS a limpiar el firewall. ¿cómo se habilita?

1- (Debian), instala ufw. apt-get install ufw.

Habilitalo con el comando: ufw allow (número de puerto asignado), y pon el comando systemctl restart service.

Sal y entra al VPS pero ahora con un añadido extra que viene siendo "-p numero de puerto)

ssh root@ipdelvps -p numero del puerto asignado

 

2- (Freebsd)

Habilita el firewall en el archivo pf en "/etc/pf.conf o /etc/rc.conf/ y añadir esto al firewall, lo que está indicando que habilite todas las conexiones TCP a través del puerto que asignaste para acceder al VPS. pass in proto tcp from any to any port 22 <- acá cambian al puerto que asignaron, y el mismo proceso que con debian pero en freebsd.

Recargas con el siguiente comando:

pfctl -f /etc/pf.conf

pfctl -f /etc/rc.conf

service sshd restart

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Port knocking:

 

¿Cómo hacer port knocking?

 

Paso 1: Instala la utilidad knockd

pkg install knockd <- freebsd

apt-get install knockd <- debian

Paso 2: ve a /etc/knockd.conf

Paso 3: configurar la secuencia de puertos:

Así se ve (deben conectarse puerto por puerto)

[options]
        UseSyslog

[openSSH]
        sequence    = 7000,8000,9000 <- esta es la secuencia de puertos. recordar que se tendrán que conectar a cada uno de manera independiente en orden, si no los sacará y tendrán que esperar unos minutos. 
        seq_timeout = 5
        command     = /sbin/iptables -A INPUT -s %IPdesdedondeteconectarás% -p tcp --dport (puertoqueasignaste) -j ACCEPT <- basicamente acepta todo por el puerto asignado
        tcpflags    = syn

[closeSSH]
        sequence    = 9000,8000,7000 <- Lo mismo de arriba pero con estos puertos es para cerrarlos. si quieres cerrar el acceso añades lo mismo.
        seq_timeout = 5
        command     = /sbin/iptables -D INPUT -s %IP% -p tcp --dport (Puertoasignado) -j ACCEPT <- Mas de lo mismo
        tcpflags    = syn

[openHTTPS]
        sequence    = 12345,54321,24680,13579 <- Secuencia de puertos (que en realidad no deben tocar, no es necesario)
        seq_timeout = 5
        command     = /usr/local/sbin/knock_add -i -c INPUT -p tcp -d 443 -f %IP% <- Lo mismo pero para las conexiones de HTTPS, acepta todas las conexiones a través de 443.
        tcpflags    = syn

 

Salimos, guardamos y habilitamos la secuencia de puertos en debian con las cadenas que asignaste.

(Debian - Iptables)

iptables -A INPUT -p tcp --dport (Puertoasignado) -j ACCEPT

iptables -A INPUT -p tcp --dport (Puertoasignado) -j ACCEPT

iptables -A INPUT -p tcp --dport (Puertoasignado) -j ACCEPT

(FreeBSD - Unix)

proto tcp from any to any port (Numerodepuerto)

proto tcp from any to any port (Numerodepuerto2)

proto tcp from any to any port (Numerodepuerto3)

 

Guardamos el archivo de freebsd, en el caso de iptables de debian ponemos este comando: iptables-save > iptables.rules (que igual podriamos ponerlo en Ansible y funca igual papá)

 

Y ya, besitos 🙂

¿Quieren evitar esto y que lo hagan por ustedes?. compren en Playhost 🙂

 

Nuestro discord, damos clases GRATIS. de administración de sistemas, cyberseguridad y como romperle las piernas a Break.

https://discord.gg/3CahUmEj

Atentamente: ~Lyk0s (Daniel Aristizabal) - Cybersecurity - Senior Sysadmin ---- https://facebook.com/Lyk0s.FoxShell

[CEO de Playhost & FoxShell Team]

 

Mensajito para Break: TWUgbGEgY2h1cGFzIGVuIHJldmVyc2EsIEJyZWFrLiBpZ3VhbG1lbnRlIGVsIHF1ZSBsZWEgZXN0by4KCkNvbG9tYmlhIDIgLSBIYW1icmllbnRpbmEgMSA=

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...

Important Information

This site uses cookies to enhance your browsing experience and provide relevant content. By continuing to browse, you agree to our We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. and Terms of Use. For more information on how we protect your data, please check our Privacy Policy.