Seguridad

De como me independicé de Google (ii) – Navegar sin temor…

De como me independicé de Google (ii) – Navegar sin temor…

… en el mar es lo mejor 𝅘𝅥𝅰  𝄞 ¿Alguien se acuerda de la canción de los payasos de la tele? Qué tiempos aquellos… en los que se podían surcar los procelosos mares de internet sin tener a un señor de negro subido a la chepa. Por cierto, dejaré un enlace a la canción al final del artículo, por eso de la nostalgia, y tal…

El navegador

Empecemos por el principio. Ahora bien, no voy a meterme a hacer una comparativa en cuanto a navegadores. Si quieres una, hay miles en internet (Si no me crees puedes buscarlas en Google, je, je…). Aquí me limitaré a mostrar algunas conclusiones. Y en este punto lo tengo claro: Mozilla Firefox.

Es un proyecto de código abierto, apoyado por una comunidad madura y comprometida, con un desarrollo de largo recorrido, continuo y con frecuentes actualizaciones. Está construido desde su base con la privacidad como objetivo y aunque quizás no sea de los más espectaculares en rendimiento y prestaciones, funciona francamente bien. Por algo es el navegador predeterminado en Ubuntu y para mí es más que suficiente.

Respecto a los navegadores basados en Chrome diré que hay algunos que son estupendos, pero todos tienen un pequeño inconveniente: y es que están basados en Chrome. Y sí, ya sé que a partir del código abierto de Chrome se puede hacer un buen navegador que no comprometa la privacidad y tal. Pero ya desde el título de esta entrada dejo claro que lo que quiero es alejarme lo más posible de Google así que… ajo y agua.

Migrar desde Chrome a Firefox resulta muy sencillo, ya que el propio Firefox permite realizar la importación de todos los datos de navegación de un navegador a otro. Sin embargo, una de las cosas que quizás tiene peor resueltas es el tema del uso de varios perfiles dentro de una misma cuenta, algo que a mí me resulta muy útil. De hecho, las opciones para crear perfiles y cambiar de uno a otro no están a la vista. Es necesario ingresar en una página local introduciendo la expresión about:profiles en la barra de direcciones. Una solución un tanto rara, la verdad, pero que se arregla añadiendo un marcador a la barra de marcadores. No es elegante pero funciona.

Ni que decir tiene que si queremos mantener una navegación suficientemente privada no basta con utilizar este navegador (ni cualquier otro). Por defecto Firefox adopta medidas como la ocultación de la ubicación y el bloqueo de rastreadores, sin embargo es importante tener mucho cuidado a la hora de instalar complementos que puedan comprometer la privacidad.

El buscador

Pero quizás, incluso antes de pensar en cambiar de navegador merece la pena reflexionar sobre el buscador. ¿Alguien se acuerda de Altavista? ¿O de Yahoo? ¿Cuándo y cómo llegamos a convencernos de que buscar en Internet era equivalente a buscar en Google? Tan acostumbrados estamos que da escalofríos sólo pensarlo.

Y no es cuestión baladí. Aquí conviene tener presente que la privacidad va en dos sentidos (por lo menos): que los buscadores no almacenen nuestras búsquedas es sólo una parte. Luego está la neutralidad de los resultados que el buscador arroja, incluyendo publicidad, o resultados que el buscador deduce que son «más relevantes» para nosotros, como les gusta llamar a estas compañías el hecho de mostrarnos aquella información que más fácil nos va a entrar para satisfacer a un tiempo nuestros impulsos y sus intereses.

(Dejo este enlace a un artículo que me resultó bastante interesante)

Igual que antes, no me enredaré en comparativas y me limitaré a señalar a DuckDuckGo como la opción más interesante. Merece la pena configurarlo como buscador por defecto. Por cierto, existe un complemento para Firefox llamado DuckDuckGo Privacy Essentials que resulta muy interesante instalar. Entre otras cosas, nos va informando de todos los rastreadores y anuncios que nos va bloqueando conforme navegamos, lo cual no hace sino contribuir a ponernos los pelos de punta al hacernos conscientes de hasta qué punto las grandes plataformas se dedicaban a cotillear en nuestras cosas cuando aún no usábamos estas herramientas.

¿Y para el móvil?

En el caso del móvil tenemos tres navegadores que merece la pena utilizar para reemplazar tanto a Chrome como al navegador que traiga nuestro móvil por defecto y que, por cierto, suele ser un churro:

  • Firefox para Android: Muy similar al de escritorio y abierto a múltiples configuraciones. Entre otras cosas, permite sincronizar los datos de navegación y las contraseñas con el resto de navegadores Firefox en otros dispositivos. Muy conveniente, para quien le convenga, claro.
  • Firefox Focus: Una versión del anterior minimalista y muy ligera, preconfigurada para la mayor privacidad y muy cómoda para navegar sin distracciones aunque tenga menos características.
  • DuckDuckGo Privacy Browser: Como podemos imaginar, un navegador que trae por defecto todas las opciones de privacidad habidas y por haber. Pero lo más interesante es que incorpora un widget de búsqueda similar al típico que viene por defecto con Android y que resulta perfecto como sustituto. Sólo por eso ya merece la pena instalarlo, aunque luego usemos otro navegador.

Edición de mayo de 2022: Recientemente he sabido acerca de un acuerdo de sindicación entre DuckDuckGo y Microsoft que impide a la primera compañía bloquear los rastreos por parte de la segunda. Al parecer, esto ocurriría exclucivamente en el navegador de Android y no en los de escritorio, siempre según fuentes de Duckduckgo, claro. Por lo tanto, la mejor opción para Android sigue siendo, siempre en mi humilde opinión, Mozilla Firefox. No obstante, no está de más tener también instalada la aplicación móvil de DuckDuckGo para disponer del widget de búsqueda como sustituto del de Google.

Y en el próximo capítulo espero dedicarme al peliagudo tema de los calendarios y las agendas de contactos. Uno de los anzuelos que más enganchados nos mantienen al ojo que todo lo ve.

Nos vemos pronto. Y de momento, ahora sí, para los nostálgicos, tal y como estaba prometido… la canción:

Publicado por David en Blog, Herramientas, Linux, Seguridad, 0 comentarios
De como me independicé de Google (i) – No sos vos, soy yo.

De como me independicé de Google (i) – No sos vos, soy yo.

Hace unos meses me hacía eco de una curiosa noticia. Google iba a empezar a tomarse la libertad de monitorizar el contenido que mantenemos en Drive por si acaso guardamos algo que ellos puedan considerar «inadecuado». Y en tal caso, podría tomar partido con acciones que irían desde restringir el acceso al contenido ofensivo hasta eliminarlo. Y recordemos… que cuando Google habla de «contenido» se está refieriendo a nuestro material (nuestras fotos, por ejemplo)

Un poco de memoria

Que Google lleva años pasándose nuestra privacidad por el arco del triunfo y que sabe más de nuestra intimidad que nuestro terapeuta no es ningún secreto. Y que nosotros le hemos ido consintiendo cada vez más a cambio de sus servicios «gratuitos», tampoco. No estará mal hacer un poco de memoria:

Antes que nada Google fue el buscador que todos adoptamos ilusionados de manera totalmente acrítica hará como unos veinte años. Un buscador que, por cierto, toma nota de cada búsqueda que hacemos y selecciona cuidadosamente los resultados que nos muestra para que sean «relevantes» para nosotros. Un nosotros que pronto se materializó en una dirección de correo Gmail, también «gratis», alojada en sus servidores, y que se convirtió a efectos prácticos en el carné de identidad dentro del universo Google. Después llegó Chrome, ese estupendo navegador. Y lo digo sin ironías: rápido, ágil, lleno de prestaciones, que nos permitía trasladar nuestra experiencia de navegación de una máquina a otra de manera transparente a golpe de recopilar información sobre cada uno de nuestros gustos construyendo así nuestro «perfil». Y, como no, para todos los que nos afanábamos manejando las agendas de aquellas primeras «palmtop» (hay que ver qué mal envejecen algunos términos) llegaron en nuestro auxilio los servicios de Google Calendar. Menos mal que en cuanto la tecnología de aquellos primeros computadores de mano con teléfono integrado, a los que de pronto todos empezamos a denominar con el hortera anglicismo de «smart phone», empezó a madurar, apareció Google de nuevo con su sistema operativo «gratuito» Android para hacerlos funcionar. Y tan bien funcionaron que pronto integramos toda nuestra agenda, tanto telefónica como de email en Google Contacts, lo que además nos permitía pasar de un teléfono a otro sin perder un solo número. Y hacíamos copia de seguridad de todos nuestros datos en la nube de Google Drive, incluyendo las fotos. Y felices dijimos adiós a aquellos «carísimos» navegadores TomTom y Garmin, adoptando los mapas de Google Maps y su servicio «gratuito» de navegación. Y hubo tal regocijo que pronto todos quisimos que formara parte permanente de nuestro vehículo, así que llegó Android Auto para instalarse en nuestros coches. Y suma y sigue, y seguro que me dejo cosas. ¡Y lo que está por venir!

Algo pasa con Google

Google sabe qué nos gusta, qué miramos, qué nos entretiene, qué nos interesa, con quién nos comunicamos, a qué nos dedicamos, qué horarios tenemos, por dónde nos movemos, adónde viajamos o vamos de vacaciones, dónde vivimos nosotros, nuestra familia y nuestros amigos, cuánto tiempo pasamos en la panadería, en ese bar de mala muerte o en casa de fulanita, dónde caí borracho por última vez o lo poco que salgo de casa y el tiempo que hace que no me como un rosco, a que manifestación decidí ir, o si es que quizás preferí no ir…

Vamos, que no es de ayer precisamente el que tengamos sobrados motivos para recelar de esta compañía. Pero lo de Google Drive… no sé cómo decirlo, ha sido la puntilla, la gota que ha colmado el vaso. Ya sólo faltaba que el día que por la razón que sea lleguen a la nube aquellas fotos que nos hiciéramos mi churri y yo aquel verano en el Pirineo, cuando la euforia debida seguramente a la altitud nos llevó a pensar que era buena idea inmortalizar el momento de chapuzarnos en pelotas en un ibón, llegue el Sr. Google a meter las narices y les eche un vistazo no vaya a ser que le parezcan o le dejen de parecer lo bastante «adecuadas» para existir en su exquisita nube. Como si ese maldito criterio moralista y puritano que lo está embarrando todo tuviera que perseguirnos también a nuestra alcoba digital. Bueno, pues hasta aquí hemos llegado. Igual que hay cosas en la vida que es mejor no ver, también hay experiencias por las que es mejor no tener que pasar. Y para los que penséis que exagero, molestaros en echar un vistazo a sus políticas, sobre todo la parte en la que dice eso de que «podemos revisar el contenido y tomar las medidas que estimemos oportunas», teniendo en mente que esto incluye su servicio Drive, ese lugar donde el común de los mortales guarda su material más intrascendente pero también el más personal.

Así que aquí estoy, embarcado en una trayectoria que ha de llevarme poco a poco, o eso espero, a la independencia total de Google y su omnipresente actitud vigilante cual ojo de Sauron. Trayectoria que en su momento ya recorrí con Microsoft con notable éxito, aunque por razones diferentes.

Lo que empezó siendo una entrada en la que recoger algunas conclusiones para que no cayeran en el olvido ha terminado convirtiéndose en la crónica de un peregrinaje en busca de un uso más libre y neutro de la red. Una red que, para quienes la vimos aterrizar en medio de nuestras vidas, nunca debería haber dejado de encarnar ese espíritu de interconexión y libertad con el que todo empezó. De manera que dedicaré varias entradas, una por cada etapa del camino, y a medida que las vaya publicando, las iré enlazando también desde aquí.

Empezamos:

  1.  De como me independicé de Google (ii) – Navegar sin temor…

 

 

 

 

 

 

 

Publicado por David en Blog, Herramientas, Linux, Seguridad, 0 comentarios
Acceso remoto SSH con clave pública

Acceso remoto SSH con clave pública

El acceso a un servidor mediante el uso de clave pública es una alternativa cómoda y segura al tradicional acceso con contraseña. Para ello, lo primero que tenemos que hacer es generar un par de claves pública y privada en el mismo cliente desde el que queramos acceder al servidor por primera vez:

~$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/<USER>/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/<USER>/.ssh/id_rsa
Your public key has been saved in /home/<USER>/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:mU/wwq4it1/2pIYfl9o5hM4WughDxubXZuGDvR9vo78 engineer@home
The key's randomart image is:
+---[RSA 3072]----+
|                 |
|                 |
|        .        |
| .     . =       |
|  =   . S.o      |
| =   = oo+..     |
|  + o B=*o=      |
|  .+o+o*=@+.     |
|   oo+=**+E+     |
+----[SHA256]-----+

Al generar las claves podemos dejar todos las opciones por defecto, en cuyo caso se nos generarán los archivos correspondientes a una identidad genérica de nombre id_rsa en el directorio /home/<USER>/.ssh/ Sin embargo, es posible y, en ocasiones, aconsejable, utilizar un nombre personalizado para dichos archivos. De esta manera podemos crear varias identidades diferentes, lo que nos permitirá acceder a los servidores remotos bajo diferentes nombres de usuario. En nuestro ejemplo, los archivos creados son los siguientes:

ls ./.ssh/
id_rsa id_rsa.pub

Como podemos ver, la clave pública se guarda en un archivo con la extensión .pub, mientras que la clave privada está en un archivo sin extensión. Cada vez que generemos un nuevo par de claves, éste es el lugar en el que se almacenarán. Por supuesto, las claves pueden ser copiadas de una máquina a otra para poder conectarnos desde diferentes lugares.

En este sentido, es evidente que sólo será necesario generar un nuevo par de claves si no las hemos generado previamente en ésta o en cualquier otra máquina. En este caso, podemos saltarnos este paso y, simplemente, asegurarnos de tener las claves que queremos utilizar en este directorio.

Ahora ya podemos enviar nuestra clave pública al servidor al cual deseamos tener acceso para que nos reconozca a través de la clave privada, la cual permanecerá a buen recaudo en nuestro ordenador cliente.

ssh-copy-id <USERNAME>@<HOSTNAME>

O bien, si hemos especificado un nombre personalizado para el fichero (sin extensión):

ssh-copy-id -i <identidad> <USERNAME>@<HOSTNAME>

Obviamente, necesitamos tener acceso al servidor remoto mediante nombre de usuario y contraseña, los cuales se nos pedirán a continuación. El programa cliente ssh de nuestra máquina local conectará entonces con el servidor y transferirá la clave pública de la identidad especificada, la cual quedará almacenada en el servidor.

A veces, sobre todo si hemos elegido un nombre personalizado para la identidad, puede ser necesario especificar el directorio en el cual se encuentran las claves, es decir: ./.ssh/<identidad>

Insistimos en este punto: A pesar de que cuando especificamos la identidad en el comando anterior no ponemos la extensión, con lo que en realidad la ruta que hemos de escribir coincide con la de la clave privada, la única clave que se transfiere al servidor es la clave pública. Como regla general, una clave privada debe siempre permanecer en nuestro poder y jamás debería ser subida a ningún servidor público ni copiada a ninguna máquina que no está directamente bajo nuestro control y que sea lo bastante segura. Por algo se llama privada.

Y ya está. Sólo nos queda comprobar que podemos conectarnos sin problemas. Como al subir la identidad ésta queda asociada al nombre de usuario podemos, simplemente, escribir:

ssh <USERNAME>@<HOSTNAME>

¿Y si no puedo entrar?

En primer lugar, deberíamos comprobar que el servidor remoto ssh está correctamente configurado para aceptar conexiones mediante autenticación por clave pública. Ésta es la configuración por defecto, por lo que, en principio, no debería ser necesario. Sin embargo, cuando la cosa no funciona, éste uno de los puntos a comprobar, sobre todo si hemos estado toqueteando la configuración del servidor, la cual se encuentra en el siguiente archivo:

sudo nano /etc/ssh/sshd_config

Y comprobar que el parámetro PubkeyAuthentication no esté inadvertidamente configurado en no

Por cierto, ya que estamos, para incrementar la seguridad no está de más desactivar el acceso mediante contraseña:

PasswordAuthentication no

Otra causa frecuente por la que puede estar fallando es que el cliente no esté seleccionando de manera automática la identidad correcta. Esto puede pasar cuando ya llevo un tiempo creando y borrando identidades para entrar en distintos servidores bajo diferentes cuentas. En cualquier caso, la manera de asegurar el tiro es tan sencillo como explicitar la identidad de la que se trata:

ssh -i .ssh/identidad <USERNAME>@<HOSTNAME>
Publicado por David en Linux, Seguridad, SSH, 0 comentarios
Securizar un stake pool

Securizar un stake pool

Lo primero, el servicio SSH

Lo primero que tenemos que hacer para estar razonablemente seguros de que nuestro stake pool se encuentra seguro ante posibles intrusiones es ajustar el servicio SSH a nuestras necesidades reales. en nuestro caso, utilizamos una autenticación de dos factores mediante un par de claves pública y privada y el servicio de autenticación de Goggle. Tampoco estaría de más restringir las direcciones desde las cuales vamos a autorizar las conexiones al servicio SSH, siempre que esto sea posible. Lógicamente, si estamos en una red privada o una VPN en la que disponemos de direcciones privadas bien definidas, o nos conectamos desde accesos con IP’s públicas fijas, esta opción es inmejorable. Sin embargo, si necesitamos conectarnos desde lugares más o menos arbitrarios con IP’s públicas o privadas asignadas dinámicamente, esta estrategia no es posible.

Como siempre, no existe un plan de seguridad estándar perfecto. El mejor plan de seguridad es el que se adapta de manera adecuada a la estructura de nuestro sistema y a las circunstancias personales de cada cual.

Después, el firewall

Lo siguiente es restringir el tráfico a nuestros ordenadores mediante el firewall. Como la mayoría de operadores de Stake Pools, he elegido la opción de ufw (Uncomplicated FireWall) frente a la configuración de IPtables. Sé que los más avezados expertos en Linux no tardarán en advertir que si IPtables existe es por algo, y que su mayor complejidad ofrece la contrapartida de un control mucho más preciso y robusto de las conexiones del PC. Y tendrán toda la razón. En mi descargo diré que también es bastante más lioso de configurar y, por lo tanto, mucho más probable que en manos de un zarpas como yo se deslicen gazapos que puedan convertirse en brechas de seguridad.

Es importante entender que la seguridad real implica un compromiso entre la robustez de la herramienta y la habilidad para manejarla de manera correcta. No hay nada más peligroso que un AK-47 en manos de un chimpancé.

Y, la verdad, es que ufw cumple con este cometido, al menos para mí. Si un día me decido a estudiar IPtables a fondo, os prometo que seréis los primeros en saberlo.

Dicho esto, lo primero será asegurarnos de que tenemos ufw instalado en nuestro equipo, lo cual no es difícil porque en la mayoría de distribuciones suele venir por defecto. En cualquier caso, basta con teclear:

sudo apt install ufw

Reading package lists... Done
Building dependency tree       
Reading state information... Done
ufw is already the newest version (0.36-6).
ufw set to manually installed.
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

Lo cual nos demuestra que, efectivamente, ya está instalado. Cuando hacemos esto, nos encontramos con el mensaje de que el paquete en cuestión ha sido marcado como instalado manualmente, lo cual a mí, que soy un maniático, me ralla un poco. Si quieres saber más, mira esta otra entrada.

Volviendo al firewall, lo primero que comprobamos es su estado

sudo ufw status
Status: inactive

Es decir, que viene deshabilitado por defecto. Lo cual es conveniente para evitar cortar servicios que pudieran estar en ejecución antes de poder configurarlo. Sin ir más lejos, si estamos conectados a la máquina por SSH y habilitamos el firewall ya podéis imaginar lo que iba a pasar (spoiler: la conexión se corta sin posibilidad de volver a conectar hasta poder acceder físicamente)

Así que lo primero de todo, habilitaremos la conexión al servicio ssh

sudo ufw allow ssh
Rules updated
Rules updated (v6)

Como vemos, esta es una manera rápida de habilitar conexiones al ordenador, basándonos en servicios, en lugar de puertos.

Nota: En muchos manuales veremos que es interesante como medida adicional de protección modificar el puerto por defecto utilizado por el servicio ssh (que pertenece a ese grupo de puertos denominados como «bien conocidos» y que corresponde siempre al 22). En mi opinión, se trata de una medida más incómoda que eficaz. Cualquier atacante puede imaginar que el servicio ssh se puede estar ejecutando en cualquier otro puerto y el primer paso antes de probar nada suele ser un escaneo de puertos para averiguar qué tenemos por ahí. Y lo mismo vale para cualquier servicio ejecutado en uno de los susodichos «well known ports»

Ahora sí, habilitamos el firewall

sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup

Y como era de esperar en un programa bien implementado y dirigido a dummies como yo, nos advierte de los peligros antes de hacernos caso.

Comprobemos las reglas que tenemos hasta ahora:

sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW       Anywhere 
22/tcp (v6)                ALLOW       Anywhere (v6)       

Efectivamente, el bien conocido puerto 22 accesible para el protocolo tcp desde cualquier lugar. Eso es lo que ha mantenido nuestra conexión activa. Nuevamente, si sabemos desde qué direcciones nos vamos a conectar, éste sería otro buen lugar para restringir el acceso desde esas direcciones, además de la configuración del propio servicio ssh. Cuantas más puertas, mejor.

Bien, si ya teníamos nuestro stake pool en funcionamiento con un núcleo y un relé hablando entre sí, será interesante lanzar la aplicación gLiveView para ver lo que ha pasado. Y es que, si todo va bien, las dos máquinas ya no podrán hablar entre sí. Al menos, el relé ya no podrá acceder al núcleo, ya que éste está restringiendo todas las conexiones entrantes. Lógicamente, nos interesa añadir una regla que permita esta comunicación. Será la siguiente:

sudo ufw allow proto tcp from <IP_RELAY> to any port <PORT_KERNEL>

En cristiano, permitir toda conexión entrante en protocolo tcp desde la IP del relé al puerto en el cual se ejecuta el nodo del núcleo. Sencillo, ¿no?

Comprobemos…

sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW       Anywhere                  
<PORT_KERNEL>/tcp          ALLOW       <IP_RELAY>             
22/tcp (v6)                ALLOW       Anywhere (v6) 

Y para evitar paranoias, nada como un túnel SSH

Cualquier manual básico de Cardano nos explica que la necesidad de disponer un cierto número de relés además del nodo productor de bloques (o núcleo) tiene que ver con una cuestión básica de seguridad: el núcleo jamás debería estar directamente expuesto a la red. De este modo, los únicos nodos que pueden ser comprometidos son los relés, y si disponemos de más de uno, bastaría con apagarlo y usar los otros mientras arreglamos el desaguisado. Pero claro, la primera pregunta que surge es… y si el núcleo no está abierto a la Internet… ¿cómo diablos me conecto a él para configurarlo? Si te has hecho esta pregunta, felicidades: vas por el buen camino (y estás jodido).

Y ahora, veamos las distintas respuestas:

1.- ¡Qué le vamos a hacer!

Dejaremos el puerto ssh abierto con un porrón de medidas de seguridad, especiamente, autenticación multifactorial (MFA) y cruzaremos los dedos.

Bien, no está mal. Conozco a unos cuantos que han seguido esta política y aún no les ha pasado nada. Afortunadamente, un servicio ssh bien configurado es muy seguro.

2.- Restringimos también el acceso ssh a través del relé.

Es decir, nos conectaremos mediante ssh al relé, y de allí al núcleo. Es una medida muy sensata. Y lo único que requiere es modificar un poquito el firewall para que el acceso al núcleo quede restringido únicamente al relé.

Añadimos una regla por aquí… (la que nos permitirá el acceso al núcleo desde el relé)

sudo ufw allow proto tcp from <IP_RELAY> to any port 22

Con lo cual:

Status: active

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW       Anywhere                  
6000/tcp                   ALLOW       <IP_RELAY>             
22/tcp                     ALLOW       <IP_RELAY>             
22/tcp (v6)                ALLOW       Anywhere (v6)   

Y eliminamos otra por allá… (la que permitía el acceso ssh indiscriminado)

sudo ufw delete 1
Deleting:
 allow 22/tcp
Proceed with operation (y|n)? y
Rule deleted

Y ya estaría. Sin embargo, esta estrategia plantea un nuevo problemilla nada trivial. Como comentábamos en el apartado relativo a la conexión segura con SSH, si ya era importante no dejar la llave privada en cualquier máquina local, aún más lo será no dejarla permanentemente en el relé para cuando necesitemos realizar la conexión al núcleo desde allí. La solución de copiarla mediante scp y borrarla cada vez puede ser una opción, pero desde luego resulta lo bastante incómoda como para caer en la muy humana tentación de dejarla almacenada en el relé y confiar en el sistema 2FA. Aunque, si todo este guirigay de relés tienen que ver con considerar la posibilidad de que se estos puedan verse comprometidos, ya no parece tan buena opción, ¿verdad?. Afortunadamente, aún existe una tercera opción (y más que habrá, pero hasta aquí llega mi cacumen por hoy).

3. Crear un túnel ssh desde la máquina local al núcleo a través del relé

Y una vez establecido dicho túnel, conectarnos directamente desde la máquina local al núcleo. Tenemos como prerequisito que la máquina núcleo sea accesible únicamente desde la máquina relé, lo cual ya ha quedado descrito en la opción número 2. La magia vienen a continuación:

En primer lugar, creamos un túnel a través del relé que redirija un puerto de nuestra máquina local a otro puerto de la máquina núcleo.

ssh -L 8022:<IP_CORE>:22 <user_relay>@<IP_RELAY> -i /route-to-key/private-key

Este comando crea un túnel desde el puerto 8022 de mi máquina local al puerto 22 de la máquina core. Utilizamos el puerto local 8022 ya que el puerto 22 suele estar ocupado por el servidor ssh local y es preferible utilizar uno libre para evitar conflictos. Los datos de conexión son los mismos que usamos para conectar al relé: el nombre de usuario y su IP. Y, por supuesto, la clave pública que guardamos en nuestro pendrive, y que se especifica con el parámetro -i (identidad). Si todo va bien, el único dato que nos pedirá será el código del Google Authenticator y el túnel quedará establecido.

Desde ahora, cualquier petición al puerto 8022 a la máquina local será como si la realizáramos directamente al puerto 22 del nucleo, por lo que podremos conectar simplemente así:

ssh  -p 8022 <user>@127.0.0.1 -i /route-to-key/private-key 

Es decir, que en realidad nos estamos conectando a nuestra propia máquina en el puerto 8022. Y, por supuesto, el archivo de clave privada permanece a buen recaudo en nuestro preciado pendrive. ¿A que mola?

Publicado por David en Cardano, Linux, Seguridad, SSH, 0 comentarios
Acceso remoto SSH con clave pública y Google 2FA

Acceso remoto SSH con clave pública y Google 2FA

Las dos maneras más populares de asegurar una conexión SSH son el acceso mediante clave pública y la autenticación en dos pasos (2FA). La primera es la que más tradición tiene y la que llevo años utilizando en mis máquinas domésticas. La segunda es algo más reciente y nunca la había utilizado antes, así que me apeteció probarla para aumentar la seguridad. Hay decenas de tutoriales que explican el procedimiento, bastante sencillo, por cierto. Pero como el objeto de este blog es facilitarme las cosas a mí mismo y evitarme el ponerme a rebuscar, aquí dejo el enlace a la guía oficial de ubuntu sobre el tema: Configure SSH to use 2FA

La verdad es que el acceso mediante 2FA es una chulada. Metes la contraseña y te pide un código del Google Authenticator. Sin embargo, una vez disipada la ilusión inicial pensé que no estaría de más sustituir el paso de introducir la contreña por una autenticación mediante clave pública. Mucho más cómodo y, sobre todo, mucho más seguro. Así que configuré un par de claves RSA para entrar al servidor (proceso que, aunque he realizado decenas de veces, siempre se me olvida, así que también lo describiré por aquí).

La sorpresa vino cuando intenté la conexión. El hecho de haber configurado el acceso mediante clave hizo que la entrada al servidor fuera inmediata, sin solicitar el código de validación. Investigando un poco me entero de que, al parecer, el acceso mediante clave anula por defecto cualquier otro método de autenticación. Toda la configuración para el Google 2FA a hacer puñetas. Menudo chasco!

Así que vuelta a investigar la manera de poder mantener ambos modos de authenticación aunque, eso sí, sin necesidad de introducir la contraseña. De momento, dos factores ya me parecen suficientes. Mejor dejar la autenticación multifactor (MFA) para más adelante.

Partimos de la configuración previa del archivo del servidor SSH, que coloco aquí mientras le busco un sitio mejor

sudo nano /etc/ssh/sshd_config
PasswordAuthentication no
ChallengeResponseAuthentication yes
PermitRootLogin prohibit-password

La cuestión es que si deseamos mantener ambos métodos de autenticación, de manera que ya no nos pida la contraseña (gracias a la clave RSA) pero nos continúe pidiendo el código de verificación, deberemos indicárselo explícitamente. Para ello, añadiremos una línea especificando dos posibles vías de autorización: O proporcionamos una clave pública y una contraseña, o bien una clave pública y un código de verificación.Las dos posibilidades están descritas en forma de dos listas de métodos. Las listas están separadas por un espacio. Y en cada lista, los métodos requeridos están separados por comas. Si los requisitos de una lista no se dan, entonces se pasa a la siguiente.
Como la configuración de este parámetro parece algo liosa, dejo aquí este enlace en el que lo explican todo muy bien y de manera muy detallada.

AuthenticationMethods publickey,password publickey,keyboard-interactive

Luego debemos modificar el archivo de configuración de PAM para que no nos pida la contraseña

sudo nano /etc/pam.d/sshd

Y comentamos la siguiente línea

#@include common-auth

Y ya está. Si os estáis preguntando por qué es necesario decirle a PAM que no pida contraseña en lugar de quitarla directamente de la lista de los métodos de autorización, os diré que yo me pregunto lo mismo. Lo único que sé es que hice la prueba y no funcionó, pero con el método descrito va como la seda.

Publicado por David en Blog, Seguridad, SSH, 0 comentarios