LINUX

Cómo ocultar el puerto de la aplicación usando knockd en Linux

Como administrador del sistema, debemos hacer todo lo posible para proteger nuestro servidor de los atacantes. A medida que Internet crece, también lo hacen las amenazas a nuestro servidor. Una de las entradas más populares para atacar nuestro servidor es a través del puerto que se abre en su servidor. Si su servidor SSH se está ejecutando en su máquina, generalmente el puerto SSH está escuchando. Lo que significa que está abierto, esperando la conexión.

No se recomienda dejar el puerto abierto durante 24 horas, ya que es vulnerable. Porque podemos escanear la máquina para ver el puerto abierto. nmap es uno de los escáneres de puertos más populares que cualquiera puede usar para escanear su automóvil.

nmap

¿Qué pasa si podemos abrir el puerto a pedido y cerrar el puerto cuando no esté en uso? Suena interesante. Ahora podemos hacerlo usando la aplicación knockd.

¿Qué es knockd?

Knockd es un servidor de golpe de puerto. Escucha todo el tráfico en una interfaz ethernet (o PPP), buscando secuencias especiales de puertos de «lugar». (Fuente: http://www.zeroflux.org/projects/knock)

Cómo funciona

Cada aplicación necesita un puerto como «puerta» para «escuchar» las solicitudes de otros clientes. Este puerto suele estar en estado abierto o cerrado. Hay muchos puertos disponibles en el servidor. Pero hay algunos puertos que se han puesto de acuerdo por consenso, como SSH (22), Web (80) y FTP (21).

Una regla general básica para la seguridad del servidor es abrir solo los puertos que usa y cerrar el resto. Es posible que tenga algunos puertos que a veces se usan y otras no. No se recomienda dejar estos puertos abiertos mientras no estén en uso.

Cuando instala knockd, puede dejar que el cliente «golpee» el servidor con el patrón. Usted puede personalizar la secuencia de pulsos, por lo que este patrón de pulsos será único entre sí. Si el patrón coincide, entonces el puerto que necesita estará abierto por un período de tiempo y la solicitud puede ingresar a su servidor.

Una vez que haya terminado con la aplicación, puede cerrar el puerto de forma manual o automática.

Cómo instalar Knockd

En este artículo, estamos usando el sistema operativo Zorin 9, que se basa en Ubuntu 14.04 LTS. Si está utilizando una distribución diferente, ajústela al método de instalación de su distribución.

Knockd está disponible en el repositorio de Ubuntu. Entonces podemos usar apt-get para instalar knockd.

$ sudo apt-get install knockd

Solo espera unos minutos y tu knockd ya está configurado.

Knockd instalado

Configurar knockd

El archivo de configuración de Knock se encuentra en el /etc/knockd.conf
La configuración de muestra es simple y fácil de entender.

configuración predeterminada de knockd

Podemos ver que la configuración se divide en tres secciones. los [options] sección, [openSSH] para abrir el puerto SSH y [closeSSH] sección para cerrar el puerto SSH.

Implícitamente [options] la sección contiene solo 1 fila. Nos dice que el registro de knockd se registrará utilizando la aplicación de registro del sistema operativo. En Ubuntu, veremos el inicio de sesión /var/log/syslog; plegable.

Por supuesto, podemos optar por no utilizar SysLog. Podemos cambiarlo en esta línea si queremos usar el registro personalizado.

logfile = /var/log/knockd.log

La línea anterior insertará el archivo de registro de hits /var/log/knockd.log

[openSSH] secciones tiene comandos idénticos a [closeSSH] sección.

secuencia = 1200,1300,1400
Este es el patrón de martilleo. Activará el siguiente comando en la sección. El valor de este parámetro es completamente personalizable. Podemos elegir otro número aleatorio.

seq_timeout = 10
Esto le dirá a knockd cuánto tiempo debe completar el patrón de detonación.

comando = /sbin/iptables -I ENTRADA -s %IP% -p tcp –dport 22 -j ACEPTAR
Este parámetro abrirá el puerto SSH en el puerto 22

tcpflags = sin
Este parámetro indica que el Cliente enviará un paquete TCP SYNchronize al servidor

Configuración del cortafuegos

Como sabemos antes, knockd abrirá algún puerto temporal. Por lo tanto, debemos asegurarnos de que el firewall se esté ejecutando en el servidor. Básicamente, cerraremos todos los puertos. Usamos la sintaxis de iptables para hacer esto. Aquí están los pasos.

configuración de iptables

El primer comando permitirá la sesión actual en curso a través del firewall.
El segundo comando permitirá que otra máquina haga ping al servidor.
El tercer comando rechazará todas las solicitudes.

Para probar el servicio knockd, esperamos que nuestro firewall elimine todas las conexiones ssh. Luego, knockd lo abrirá temporalmente a pedido.

iptables descarta todas las conexiones

Probar knockd del lado del servidor

Una vez que el firewall y knockd están configurados, podemos probarlos.
Para probar el firewall, pruebe el servidor remoto a través de SSH desde otra máquina. (En este artículo, la IP del cliente es 10.1.6.14 y la IP del servidor es 10.0.76.224)

$ ssh -l pungki 10.0.76.224

Con :
eso = nombre de inicio de sesión
bolsas = nombre de usuario en el servidor de destino

Si el cortafuegos funciona, obtendremos «Conexión denegada» mensaje de error.

conexión denegada

La razón por la que recibimos el mensaje de error es porque 10.1.6.14 no está permitido en el servidor. Si usamos este comando, no veremos ningún resultado.

$ sudo /sbin/iptables -L -n |grep 10.1.6.14
iptables antes de vencer

Más adelante veremos la diferencia después de implementar knockd.

El siguiente paso es probar el servicio knockd.

Para ejecutar knockd, debemos cambiar el archivo knockd predeterminado que se encuentra en /etc/default/knockd. Cambiar su valor Parámetro START_KNOCKD de 0 a 1.

el archivo de inicio predeterminado de knockd

Guarda el archivo. Luego escriba:

$ sudo service knockd start

*nota: intenté ejecutar el servicio usando /etc/init.d/knockd start pero siempre falla al iniciar

Probar la escritura del lado del cliente

En el lado del cliente, necesitamos Knock Client para «golpear» el servidor. Del lado del cliente, usamos Centos 5.2. Luego instalamos knock-client desde http://pkgs.repoforge.org/knock/knock-0.5.3.el5.rf.i386.rpm

Luego ejecute el siguiente comando para acceder al servidor:

$ knock -v 10.0.76.224 1200 1300 1400
abre el puerto

V = detallado
10.0.76.224 = IP del servidor
1200 1300 1400 = la secuencia de golpe que se define en la configuración de golpe

Después de presionar el servidor, ahora veremos que la IP del cliente ahora puede ingresar al servidor.

$ sudo /sbin/iptables -L -n |grep 10.1.6.14
iptables después de tocar para abrir el puerto

Luego podemos ejecutar SSH remoto al servidor.

ssh éxito después del golpe

Como podemos ver en la imagen de arriba, los nombres de host son diferentes. Después de establecer SSH en la máquina remota, el nombre de host se cambia de @web01 a @dev-machine.

cerrar el puerto

Después de que el cliente haya conectado el servidor de forma remota, el cliente debe cerrar el puerto. Para hacer eso, podemos usar el siguiente comando:

$ knock -v 10.0.76.224 1400 1300 1200
toque para cerrar el puerto

Por favor tenga cuidadopara cerrar el puerto, invertimos la secuencia de pulsos.

Después de llegar al servidor, veremos un aviso nuevamente. Para verificar que el golpe fue exitoso, usamos el comando iptables nuevamente. Si tuvo éxito, veremos que la IP 10.1.6.14 desaparecerá.

iptables después de tocar para cerrar el puerto

En el anterior, después de tocar para abrir el puerto, vi que la dirección IP del cliente, 10.1.6.14, puede ingresar al servidor a través del firewall. Ahora, después de presionar para cerrar el puerto, si verificamos con el mismo comando de iptables, la regla se ha eliminado.

Cerrar el puerto automáticamente

Dado que la actividad de cierre del puerto la activa el cliente, tendremos la posibilidad de que el cliente se olvide de cerrar el puerto. No queremos que eso suceda. Entonces podemos configurar knockd para cerrar automáticamente el puerto.

Para hacer esto, tenemos que personalizar archivo de configuración knockd. Aquí hay un ejemplo de un archivo de configuración knockd modificado.

Puerto de cierre automático

El orden todavía parece idéntico. La diferencia con la configuración anterior es que ponemos [openSSH] sección y [closeSSH] sección de la misma manzana.

Luego agregamos cmd_tiempo de espera = 10 línea para decirle al servidor para ejecutar stop_command 10 segundos después de que se ejecute start_command. El puerto se cerrará automáticamente, pero la conexión establecida permanece conectada.

Conclusión

Knockd nos ayuda a minimizar el riesgo de dejar todos los puertos abiertos todo el tiempo. Con knockd, podemos abrir los puertos que necesitemos bajo demanda. Para mejorar la seguridad, necesitamos conocer la secuencia de detonación antes de abrir el puerto.

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba
Cerrar