GNU/Linux >> Tutoriales Linux >  >> Ubuntu

Cómo usar Port Knocking en Ubuntu para ocultar el puerto SSH

¿Todos conocen estas viejas películas de gángsters en las que un tipo usa una secuencia de golpes en una puerta para entrar? La llamada de puerto es exactamente eso, solo para su servidor. Cambiar su puerto ssh predeterminado no garantiza que no será pirateado. Los piratas informáticos suelen utilizar herramientas para realizar exploraciones automáticas en busca de puertos abiertos antes de atacar un servidor. Port Knocking es una forma de defenderse de los escáneres de puertos. Rechaza el acceso a un puerto protegido hasta que un cliente acceda a una secuencia de otros puertos en el orden correcto por adelantado.

Instalar port knocking en Ubuntu es fácil. Le mostraré en este artículo cómo instalar y configurar la activación de puertos. Los pasos de este tutorial también deberían funcionar para Debian 8.

Paso 1:Asegúrese de que todos los paquetes necesarios estén instalados

Todos los comandos a continuación no se deben ejecutar como usuario root. No quiero anteponer sudo a todos los comandos, así que uso:

sudo su

para convertirse en usuario root. El primer paso es actualizar las listas de paquetes de Ubuntu:

apt-get update

Luego instale el servidor SSH (si aún no lo ha instalado).

apt-get install openssh-server

Ahora instale el software knockd, que es el demonio que controla la activación del puerto.

apt-get install knockd
Get:1 http://security.debian.org wheezy/updates Release.gpg [1,554 B]
Get:2 http://security.debian.org wheezy/updates Release [102 kB]
Get:3 http://security.debian.org wheezy/updates/main amd64 Packages [336 kB]
Hit http://mirrors.digitalocean.com wheezy Release.gpg
Hit http://mirrors.digitalocean.com wheezy Release
Get:4 http://security.debian.org wheezy/updates/main Translation-en [195 kB]
Hit http://mirrors.digitalocean.com wheezy/main amd64 Packages
Hit http://mirrors.digitalocean.com wheezy/main Translation-en
Fetched 635 kB in 1s (358 kB/s)
Reading package lists... Done
[email protected]:~#
[email protected]:~# apt-get install openssh-server
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following extra packages will be installed:
openssh-client
Suggested packages:
ssh-askpass libpam-ssh keychain monkeysphere rssh molly-guard ufw
The following packages will be upgraded:
openssh-client openssh-server
2 upgraded, 0 newly installed, 0 to remove and 32 not upgraded.
Need to get 1,364 kB of archives.
After this operation, 0 B of additional disk space will be used.
Do you want to continue [Y/n]? 

Presione Y y luego ingrese para continuar.

Después de instalar el paquete, debe instalar el firewall del kernel de iptables. Ejecutar:

apt-get install iptables

Paso 2: Agregar reglas a iptables

Primero, eliminamos las reglas de firewall existentes y nos aseguramos de que las conexiones salientes no se interrumpan.

iptables --flush
iptables -t nat --flush
iptables -t mangle --flush
iptables --policy OUTPUT ACCEPT

Queremos asegurarnos de permitir todas las conexiones establecidas y las sesiones en curso a través del cortafuegos; de lo contrario, el cortafuegos bloquearía la sesión SSH actual:

iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

Nota : La regla anterior no tiene espacios a ambos lados de la coma en ESTABLECIDO, RELACIONADO.

Luego use la siguiente regla para bloquear el puerto entrante 22 (SSH):

iptables -A INPUT -p tcp --destination-port 22 -j DROP

Una vez que haya establecido sus reglas de iptables, puede automatizar el proceso de restauración al reiniciar con iptables-persistent. Podemos descargar esto desde el repositorio predeterminado de Ubuntu:

apt-get install iptables-persistent
Current iptables rules can be saved to the configuration file ?
? /etc/iptables/rules.v4. These rules will then be loaded automatically ?
? during system startup. ?
? ?
? Rules are only saved automatically during package installation. See the ?
? manual page of iptables-save(8) for instructions on keeping the rules ?
? file up-to-date. ?
? ?
? Save current IPv4 rules?
Current iptables rules can be saved to the configuration file ?
? /etc/iptables/rules.v6. These rules will then be loaded automatically ?
? during system startup. ?
? ?
? Rules are only saved automatically during package installation. See the ?
? manual page of ip6tables-save(8) for instructions on keeping the rules ?
? file up-to-date. ?
? ?
? Save current IPv6 rules?

Durante la instalación, el programa le pedirá que guarde las reglas actuales de iptables (ipV4 e ipV6), simplemente seleccione Sí para ambas.

Guarde el conjunto de reglas actual en un archivo con el comando iptables-save. Este archivo puede ser utilizado por iptables-restore más adelante para restaurar la misma configuración de iptables:

iptables-save
 # Generated by iptables-save v1.4.14 on Tue Feb 23 04:59:28 2016
*filter
:INPUT ACCEPT [1:40]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [17:1976]
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j DROP
COMMIT
# Completed on Tue Feb 23 04:59:28 2016

Ahora, permanecerá conectado a su conexión existente mientras bloquea otras conexiones en el puerto SSH.

A continuación, tenemos que configurar knockd.

Para configurar el servicio tendremos que editar el archivo de configuración /etc/knockd.conf. Abra el archivo con nano:

nano /etc/knockd.conf

Verá las secciones que se verán así.

[options]
UseSyslog

[openSSH]
sequence = 7000,8000,9000
seq_timeout = 5
command = /sbin/iptables -A INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
tcpflags = syn

[closeSSH]
sequence = 9000,8000,7000
seq_timeout = 5
command = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
tcpflags = syn
  • En la sección "opciones", vemos un nombre de directiva UseSyslog . archivo de registro es bastante obvio:registra todos los intentos de golpe
  • Debajo, tenemos dos secciones: openSSH y closeSSH. El primero permitirá que el llamador acceda al puerto 22 (SSH), y el segundo cerrará el puerto cuando el llamador esté completo.
  • knockd reemplaza automáticamente %IP% con la dirección IP del cliente que envió el golpe, para que pueda abrir el puerto solo al cliente autorizado.
sequence = 9000,8000,7000

Esto significa que este conjunto de reglas coincidirá si la misma IP solicita una conexión en el puerto 7000, seguido directamente por el puerto 8000, seguido finalmente por el puerto 9000. Es muy recomendable cambiar los puertos predeterminados y su orden, ya que el orden predeterminado es bueno. conocido también por los atacantes.

seq_timeout = 5

La opción "seq_timeout" define en segundos cuánto tiempo tiene para proporcionar todos los números para el golpe. Este valor predeterminado debería estar bien y no será un problema si está generando automáticamente sus golpes.

command = /sbin/iptables -A INPUT -s %IP% -p tcp --dport 22 -j ACCEPT

Especifique el comando que se ejecutará cuando un cliente haga el golpe de puerto correcto. Todas las instancias de %IP% serán reemplazadas con la dirección IP del golpeador.

tcpflags = syn

Preste atención a los paquetes que deben usarse para establecer este indicador, en este caso, los paquetes de sincronización. Al usar banderas TCP, knockd IGNORARÁ los paquetes tcp que no coincidan con las banderas.

Ahora habilite el knockd. Edite el archivo /etc/default/knockd con nano:

nano /etc/default/knockd

y cambiar:

START_KNOCKD=0

a

START_KNOCKD=1

después de esto guardar y salir. Si tiene varios adaptadores de red o experimenta problemas que knockd no se inicia automáticamente durante el inicio del sistema, puede especificar manualmente la interfaz de red para escuchar quitando los comentarios y modificando la segunda línea KNOCKD_OPTS.

Luego inicie knockd manualmente:

service knockd start

Esto iniciará el demonio y le permitirá cambiar los conjuntos de reglas de iptables tocando las secuencias de puertos.

Ha instalado los paquetes requeridos, si está desconectado de su servidor, para volver a conectarse debe tocar los puertos que definió en la secuencia correcta para establecer una conexión SSH.

Paso 3: Accede al servidor cuando knockd se está ejecutando

Si ha seguido los pasos anteriores, ya no podrá conectarse al servidor SSH directamente sin tocar el puerto.

No debería recibir ninguna respuesta del servidor y el cliente SSH debería expirar. Esto se debe a que nuestro demonio SSH está actualmente bloqueado por iptables. Escriba ctrl-C para finalizar el intento de SSH si no se agota automáticamente.

Prueba de tocar con un cliente telnet

Para usuarios de Linux:Instale el paquete telnet con apt.

Para usuarios de Windows:puede instalar el cliente Telnet accediendo a la sección "Programas", busque "Activar o desactivar las funciones de Windows", desde allí habilite el Cliente Telnet.

Escriba el siguiente comando en su símbolo del sistema (reemplace la secuencia del puerto con su secuencia personalizada):

telnet youripaddress 7000
telnet youripaddress 8000
telnet youripaddress 9000

Tienes que hacer todo esto en 5 segundos porque este es el límite de tiempo impuesto para la configuración. Ahora, intente conectarse a su servidor a través de SSH. Podrá acceder a la conexión.

Ejecute los comandos anteriores en orden inverso para cerrar el servidor SSH.

telnet youripaddress 9000
telnet youripaddress 8000
telnet youripaddress 7000

La mejor parte de la activación de puertos es que puede configurarla junto con la autenticación de clave privada. Si configura ambos, prácticamente no hay posibilidad de que alguien pueda obtener acceso o conectarse hasta que conozca los puertos y la clave privada.


Ubuntu
  1. Cómo permitir que el usuario use sudo en Ubuntu Linux

  2. Cómo usar el comando tail en Ubuntu Linux

  3. Cómo usar el comando de cadena en Ubuntu

  4. Cómo usar el comando netplan en Ubuntu

  5. Cómo usar un administrador de tareas en Ubuntu para monitorear el sistema

Cómo instalar y usar el comando Exa en Ubuntu 20.04

Cómo instalar el servidor OpenSSH en Ubuntu 20.04 LTS

Cómo cambiar el puerto SSH en Ubuntu

Cómo usar el golpe de puerto para asegurar el servicio SSH en Linux

Cómo cambiar el puerto SSH en CentOS

¿Cómo cambiar el puerto SSH en Ubuntu?