La seguridad informática es un problema que preocupa a todos, bueno, lamentablemente esto no es del todo cierto, pero la verdad es que es un tema que cada día preocupa a mas gente del sector. Es algo que siempre tenemos que tener en cuenta, ya que al hacerce mas popular el uso de la tecnología, el botín es mas tentador y hay mas gente intentando adueñarse de lo ajeno.
También es verdad que gracias a internet tenemos mas disponibilidad de toda esta tecnología sin estar fisicamente delante de ella. Para eso necesitamos acceso remoto. Para tener acceso remoto, debemos exponer nuestros equipos a la inseguridad del mundo exterior, y es aquí cuando entra en juego el dilema de cuanto mas necesitamos, mas exponemos y menos seguro estamos. En seguridad informática siempre se intenta primar el mínimo punto de exposición, pero cuanto menos exponemos, menos acceso y mas incómodo resulta el trabajo.
Para seguir con la pauta del menor punto de exposición y aún así, no perder servicios, es para lo que existe la técnica del “port knocking”, literalmente “golpeo de puertos”. Que consiste en tener todos los puertos cerrados exceptuando los del demonio del servicio de port knocking, cuando el demonio detecta una determinada secuencia de “golpeo” en esos puertos determinados, abre el puerto necesario para la comunicación con el host que realizo la “llamada”. Este método se utiliza mucho con ssh.
fwknop es una vuelta de tuerca mas a esta técnica, ya que no utiliza una secuencia de puertos, sino que usa certificados.
Instalar fwknop es muy fácil, veamos como se instala en el servidor y en el cliente.
$sudo apt-get update $sudo apt-get install fwknop-serverEn el cliente es:
$sudo apt-get update $sudo apt-get install fwknop-clientCreamos las llaves, en el cliente y en el servidor debemos hacer lo mismo:
$gpg --gen-key $gpg --list-keys /home/linuxsers/.gnupg/pubring.gpg ------------------------------ pub 2048R/SSSSSSSS 2014-10-31 uid linuxsers (linuxsers) <linuxsers@correo.com> sub 2048R/4BEB2434 2014-10-31Necesitamos el identificador de la llave pública (en el ejemplo usaremos SSSSSSSS para el identificador del lado servidor y CCCCCCCC del lado cliente), para exportarlo a un archivo, tanto en el servidor como en el cliente:
linuxsers@servidor:~$gpg -a --export SSSSSSSS > servidor.asc linuxsers@cliente:~$gpg -a --export CCCCCCCC > cliente.ascCopiamos el archivo del cliente en el servidor y el del servidor en el cliente:
linuxsers@servidor:~$scp linuxsers@cliente:~/cliente.asc . linuxsers@servidor:~$scp servidor.asc linuxsers@cliente:~Importamos los archivos:
linuxsers@servidor:~$gpg --import cliente.asc linuxsers@cliente:~$gpg --import servidor.ascFirmamos los certificados, el certificado del servidor lo firmamos en el cliente y el del cliente en el servidor:
linuxsers@servidor:~$gpg --edit-key CCCCCCCC gpg>sign gpg>save linuxsers@cliente:~$gpg --edit-key SSSSSSSS gpg>sign gpg>saveModificamos el archivo de configuración de fwknop:
linuxsers@servidor:~$ sudo nano /etc/fwknop/access.conf SOURCE ANY; OPEN_PORTS tcp/22 FW_ACCESS_TIMEOUT 30 REQUIRE_SOURCE_ADDRESS Y DATA_COLLECT_MODE PCAP GPG_REMOTE_ID CCCCCCCC GPG_DECRYPT_ID SSSSSSSS GPG_DECRYPT_PW (contraseña del certificado) GPG_HOME_DIR /home/usuario/.gnupgAhora resta crear las reglas del cortafuegos, del siguiente modo, sin olvidar guardarlas:
linuxsers@servidor:~$sudo iptables -A INPUT -i eth0 -p tcp --dport 22 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT linuxsers@servidor:~$sudo iptables -A INPUT -i eth0 -p tcp --dport 22 -j DROP linuxsers@servidor:~$sudo iptables-saveReiniciamos el servicio fwknop-server e ufw:
linuxsers@servidor:~$sudo service fwknop-server restart linuxsers@servidor:~$sudo service ufw restartPara conectarse desde el cliente hay que hacer 2 pasos:
linuxsers@cliente:~$ fwknop -A tcp/22 --gpg-recip SSSSSSSS --gpg-sign CCCCCCCC -a IP_CLIENTE -D IP_SERVIDOR Enter passphrase for signing: linuxsers@cliente:~$ ssh linuxsers@IP_SERVIDOR linuxsers@IP_SERVIDOR's password: linuxsers@servidor:~$ tail /var/log/syslog Oct 31 23:34:33 servidor fwknopd[4803]: (stanza #1) SPA Packet from IP: IP_CLIENTE received with access source match Oct 31 23:34:33 servidor fwknopd[4803]: Added Rule to FWKNOP_INPUT for IP_CLIENTE, tcp/22 expires at 1414794903 Oct 31 23:35:03 servidor fwknopd[4803]: Removed rule 1 from FWKNOP_INPUT with expire time of 1414794903 linuxsers@servidor:~$Eso es todo por ahora!