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.
¿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.
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.
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.
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.
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.
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
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.
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
-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
Entonces podemos ejecutar SSH en el servidor remoto.
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
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á.
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.
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.