LINUX

Cómo ocultar el puerto de 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, las amenazas a nuestro servidor también aumentan. Una de las entradas más populares para atacar nuestro servidor es a través del puerto de su servidor que se abre. 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 porque 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 cualquier persona puede utilizar para escanear su máquina.

Nmap

¿Cómo si podemos abrir el bajo demanda y cerrar el puerto cuando no se usa? Suena interesante. Ahora podemos hacerlo usando la aplicación Knockd.

Que es golpeado

Knockd es un servidor port-knock. Escucha todo el tráfico en una interfaz ethernet (o PPP), buscando secuencias especiales de «golpe» de accesos al puerto. (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 acordaron por consenso, como SSH (22), Web (80) y FTP (21).

Una regla básica de seguridad del servidor es abrir solo los puertos usados ​​y cerrar el resto. Es posible que tenga algunos puertos que a veces se utilizan y otras no. No se recomienda dejar esos puertos abiertos mientras no se estén utilizando.

Cuando instalas knockd, puedes dejar que el cliente «golpee» al servidor con un patrón. La secuencia de golpes puede ser personalizada por usted. Entonces, este patrón de golpes será único entre sí. Si el patrón coincide, el puerto que necesita se abrirá durante 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 otra distribución, 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 espere unos minutos, luego su knockd ya estará configurado.

Knockd instalado

Configurar knockd

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

configuración predeterminada knockd

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

Por defecto [options] La sección contiene solo 1 fila. Nos dice que el registro de knockd se grabará utilizando la aplicación de registro del sistema operativo. En Ubuntu, veremos el inicio de sesión / var / log / syslog; carpeta.

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

logfile = /var/log/knockd.log

La línea anterior pondrá el archivo de registro de golpes en /var/log/knockd.log

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

secuencia = 1200,1300,1400
Este es el patrón de golpes. Activará el comando a continuación en la sección. El valor de este parámetro está totalmente personalizado. Podemos elegir otro número aleatorio.

seq_timeout = 10
Esto le dirá a knockd cuánto tiempo debe completarse 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 = syn
Este parámetro indica que el cliente enviará un paquete TCP SYNchronize al servidor

Configurar el cortafuegos

Como sabemos antes, knockd abrirá un puerto en particular temporalmente. Por tanto, debemos asegurarnos de que el servidor de seguridad se esté ejecutando en el servidor. Básicamente, cerraremos todos los puertos. Estamos usando la sintaxis de iptables para hacerlo. Estos son 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 el servidor pueda hacer ping desde otra máquina.
El tercer comando rechazará todas las solicitudes.

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

iptables descarta todas las conexiones

Prueba el knockd en el lado del servidor

Una vez que el firewall y knockd están configurados, a continuación podemos probarlos.
Para probar el firewall, intente remotamente el servidor 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 10.0.76.224)

$ ssh -l pungki 10.0.76.224

Con :
-l = nombre de inicio de sesión
pungki = el nombre de usuario en el servidor de destino

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

conexión denegada

La razón por la que recibimos el mensaje de error es que 10.1.6.14 no puede ingresar al servidor. Si usamos este comando, no veremos ningún resultado.

$ sudo /sbin/iptables -L -n |grep 10.1.6.14

iptables antes de llamar

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

El siguiente paso es probar el servicio knockd.

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

archivo de inicio knockd predeterminado

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

Prueba golpeada desde el lado del cliente

En el lado del cliente, necesitamos golpear al cliente para «golpear» al 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 golpear el servidor:

$ knock -v 10.0.76.224 1200 1300 1400

golpear el puerto abierto

-v = detallado
10.0.76.224 = IP del servidor
1200 1300 1400 = secuencia de detonación que se definió en la configuración de detonación

Después de golpear 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 golpear para abrir el puerto

Entonces podemos ejecutar SSH en el servidor remoto.

ssh éxito tras golpe

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

Cierra el puerto

Después de que el cliente haya terminado con el servidor remoto, el cliente debe cerrar el puerto. Para hacer eso, podemos usar el siguiente comando:

$ knock -v 10.0.76.224 1400 1300 1200

golpear para cerrar el puerto

Por favor tenga cuidado, para cerrar el puerto, ponemos la secuencia de detonación en el orden inverso.

Después de golpear el servidor, volveremos a ver un mensaje. Para verificar si 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 golpear para cerrar el puerto

En el anterior, después de tocar para abrir el puerto, vimos que la dirección IP del cliente – 10.1.6.14 – puede ingresar al servidor por firewall. Ahora, después de tocar para cerrar el puerto, si verificamos con el mismo comando de iptables, la regla fue eliminada.

Cerrar el puerto automáticamente

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

Para poder hacer eso, necesitamos personalizar el archivo de configuración knockd. Aquí está la muestra del archivo de configuración knockd modificado.

Puerto de cierre automático

El comando todavía parece idéntico. La diferencia con la configuración anterior es que ponemos [openSSH] sección y [closeSSH] Sección en el mismo bloque.

Luego agregamos cmd_timeout = 10 línea para decirle al servidor para ejecutar el comando stop_command 10 segundos después de que se ejecute el comando start_command. El puerto se cerrará automáticamente, pero la conexión establecida permanecerá 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 necesitamos a pedido. Para mejorar la seguridad, necesitamos conocer la secuencia de golpe 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