Skip to main content

Registrar información más detallada en el log de exim

Exim va escribiendo en un archivo de log todas las peticiones de conexión que se realizan al servidor. Quedan registradas las IP’s, emails, y las sesiones que se crean y se cierran, así como si la conexión ha sido correcta o ha habido algún error. En general, es información más que suficiente. Aún así hay algo que no se guarda en el log y que puede sernos útil. En concreto, vamos a ver cómo guardar también un registro de los emails eliminados, o movidos de carpeta. Vamos allá:

El fichero en el que queda registro de toda actividad, en mi caso es /var/log/maillog y tiene una pinta parecida a esta:

Sep 11 11:37:06 servername dovecot: imap-login: Login: user=<user@example.com>, method=PLAIN, rip=123.456.789.123, lip=123.456.789.123, mpid=9007, TLS, session=<QVpx3dfsC1DU>

Sep 11 08:25:03 servername dovecot: pop3(user@example.com): Disconnected: Logged out top=0/0, retr=2/41769, del=1/47, size=15946098, bytes=50/43374

Sep 11 08:45:10 servername dovecot: imap(user@example.com): Logged out in=409, out=1405, bytes=409/1405

En la primera linea, el usuario se ha conectado y muestra la IP remota (rip), la IP local (lip), así como el tipo de conexión (TLS) y el identificador de la sesión al final. También nos indica que ha sido una conexión usando imap.

En la segunda línea, el usuario se ha desconectado de su sesión, su conexión era de tipo pop3 y hay un parámetro, que he resaltado en negrita que dice del=1/47. Esto nos indica que durante la sesión, ese usuario ha borrado 1 mensaje de los 47.

En la tercera linea, también se han desconectado de una sesión, en este caso imap, pero ahí sólo aparece los bytes que se han recibido/enviado (in/out) durante la conexión.

Para detallar más el log, hay que activar el plugin MailLog de exim. Esto nos dará detalles sobre los emails eliminados, movidos de una carpeta a otra, ¡perfecto!

Lo primero es editar el fichero de configuración de devecot

nano /etc/dovecot/dovecot.conf

Y buscaremos la linea que contiene mail_plugins, y añadiremos los plugins mail_log notify. En micaso quedará así

mail_plugins = quota quota_clone mail_log notify

Luego, buscaremos dentro de ese mismo fichero el apartado de Plugin settings y deberemos escribir estas lineas:

##
## Plugin settings
##

plugin {

  # Events to log. Defined in src/plugins/mail-log/mail-log-plugin.c - also available: flag_change save mailbox_create
  mail_log_events = delete undelete expunge copy mailbox_delete mailbox_rename

  # Also available: Defined in src/plugins/mail-log/mail-log-plugin.c - flags vsize from subject
  mail_log_fields = uid box msgid size
  (...)

Ya está, sólo tendremos que reiniciar el servicio

/etc/init.d/dovecot restart

Ahora, si borramos o movemos un email dentro de nuestro cliente de correo, quedará detallado en el log. Se verá algo así:

Sep 13 11:46:02 servername dovecot: imap(user@example.com): copy from INBOX: box=INBOX.Trash, uid=1433, msgid=<abc.123@example.com>, size=3143

Sep 13 11:46:02 servername dovecot: imap(user@example.com): expunge: box=INBOX, uid=4750, msgid=<abc.123@example.com>, size=3143

Sep 13 11:46:16 servername dovecot: imap(user@example.com): delete: box=INBOX.Trash, uid=1433, msgid=<abc.123@example.com>, size=3143

Eso sí, contad conque el log aumentará considerablemente de tamaño cada día.

Un saludo!

Comandos útiles para gestionar exim desde el terminal

Acceder por ssh a un servidor remoto para comprobar el estado de los emails es bastante habitual. Exim, es el MTA más común para servidores linux, y es con el que me encuentro a diario. Aquí dejo una lista de comandos que me han resultado útiles en más de una ocasión para el mantenimiento de los servidores.

Mostrar el número de emails en cola

exim -bpc

Eliminar todos los emails en cola

exim -bp | awk '/^ *[0-9]+[mhd]/{print "exim -Mrm " $3}' | bash

Mostrar los emails en cola

exim -bp

Se mostrará algo parecido a esto

46h  1.7K 1bi4YL-000123-AB <> *** frozen ***
          root@your-server.net

43h  1.7K 1bi7MY-000123-AB <> *** frozen ***
          root@your-server.net

(...)

Resumen de emails en cola

exim -bp | exiqsumm

Se mostrará

Count  Volume  Oldest  Newest  Domain
-----  ------  ------  ------  ------

   16    27KB     46h     82m  your-server.net
---------------------------------------------------------------
   16    27KB     46h     82m  TOTAL

Actividad actual de exim

exiwhat
783 daemon: -q1h, listening for SMTP on port xxx (IPv6 and IPv4) port xxx (IPv6 and IPv4) port xxx (IPv6 and IPv4) and for SMTPS on port xxx (IPv6 and IPv4)

Mostrar configuración de exim

exim -bP

Mostrar emails enviados desde remitente

exiqgrep -f usuario@dominio.tld

Mostrar emails para un destinatario

exiqgrep -r usuario@dominio.tld

Mostrar emails en cola más antiguos de n segundos (en este ejemplo 1h)

exiqgrep -o 3600

Mostrar emails en cola creados hace menos de n segundos (en este ejemplo 1h)

exiqgrep -y 3600

Comprobar la ruta de una direccion de email

exim -bt usuario@dominio.tld
test@gmail.com
  router = dnslookup, transport = remote_smtp
  host gmail-smtp-in.l.google.com      [2a00:1450:400c:c08::1a] MX=5
  host gmail-smtp-in.l.google.com      [74.125.140.27]          MX=5
  host alt1.gmail-smtp-in.l.google.com [2a00:1450:4010:c03::1a] MX=10
  host alt1.gmail-smtp-in.l.google.com [209.85.233.27]          MX=10
  host alt2.gmail-smtp-in.l.google.com [2404:6800:4003:c01::1a] MX=20
  host alt2.gmail-smtp-in.l.google.com [74.125.130.27]          MX=20
  host alt3.gmail-smtp-in.l.google.com [2404:6800:4008:c03::1a] MX=30
  host alt3.gmail-smtp-in.l.google.com [74.125.203.27]          MX=30
  host alt4.gmail-smtp-in.l.google.com [2404:6800:4008:c01::1a] MX=40
  host alt4.gmail-smtp-in.l.google.com [173.194.72.26]          MX=40

Procesar los emails en cola

exim -q -v

Eliminar un email concreto de la cola

exim -Mrm <id_email>
Message 1bi4YL-000123-AB has been removed

Congelar un email (no se enviará)

exim -Mf <id_email>

Procesar un email tanto si está congelado como si no (se enviará)

exim -M <id_email>

Forzar el fallo de un email y retornar el estado “cancelado por administrador”

exim -Mg <id_email>

Eliminar todos los emails congelados

exiqgrep -z -i | xargs exim -Mrm
Message 1bi4YL-000123-AB has been removed
(...)
Message 1bi7MY-000123-AB has been removed

Eliminar emails más antiguos de n segundos (en este ejemplo 1h)

exiqgrep -o 3600 -i | xargs exim -Mrm

Congelar todos los emails de un remitente

exiqgrep -i -f usuario@dominio.tld | xargs exim -Mf

Mostrar las cabeceras de un email

exim -Mvh <id_email>

Mostrar el contenido del email

exim -Mvb <id_email>

Mostrar el log de un email

exim -Mvl <id_email>

Añadir un destinatario a un email

exim -Mar <id_email> usuario@dominio.tld [ <usuario2@dominio.tld> [...] ]

Modificar el remitente de un email

exim -Mes <id_email> usuario@dominio.tld

Parar exim (diferentes maneras según tu sistema operativo)

systemctl stop eximd.service
service exim stop
/etc/init.d/exim stop

Iniciar exim (según tu sistema operativo)

systemctl start eximd.service
service exim start
/etc/init.d/exim start

Reiniciar exim (según tu sistema operativo)

systemctl restart eximd.service
service exim restart
/etc/init.d/exim restart

Comprobar el estado de exim (según tu sistema operativo)

systemctl status eximd.service
service exim status
/etc/init.d/exim status

Uso práctico de GPG: cifrando y descifrando archivos

GPG es el acrónimo de GNU Privacy Guard, un sistema de cifrado de código abierto. Los usos más populares vienen de la mano de envío de emails cifrados o con firma digital, pero hoy vamos a ver cómo cifrar (que no encriptar) un archivo cualquiera, para poder enviarlo asegurándonos de que nadie más que el destinatario va a poder recibirlo. Eso sí, tanto remitente como receptor, deben conocer la clave de cifrado.

Cifrar un archivo

He creado un archivo de texto plano, en el que he escrito un mensaje.

user@my-laptop:~$ cat mi-archivo.txt
Shhhh... Este es un mensaje secreto...

Para cifrarlo, sólo tendremos que hacer lo siguiente:

user@my-laptop:~$ gpg -c mi-archivo.txt 
Enter passphrase: <poner aquí cualquier clave>
Repeat passphrase: <repetir aquí la misma clave>

El archivo cifrado se llamará igual que el original, pero añadiendo la extensión .gpg. Esto genera un archivo llamado, en mi caso, mi-archivo.txt.gpg. Veamos qué contiene:

user@my-laptop:~$ cat mi-archivo.txt.gpg
/�4G��`�H��J%,����0�er�]�&
>�^�*�[�s���(^���=SoUDZ��-y��pV>�4bˑE��=H

Perfecto, listo para enviar sin preocuparnos de nuestra privacidad.

Cabe decir, que es un buen sistema para guardar información (imágenes, backups, o cualquier archivo) de manera segura en servicios en la nube poco securos como Dropbox o Google. Si por algún motivo olvidas la contraseña, puedes olvidarte de recuperar el contenido.

Cómo descifrar el archivo

Descifrarlo es, si cabe, aún más facil que cifrarlo. Veamos como descifrar el arhivo de antes:

user@my-laptop:~$ gpg mi-archivo.txt.gpg 
gpg: CAST5 encrypted data
gpg: encrypted with 1 passphrase
Enter passphrase: <usar la misma clave de antes>
user@my-laptop:~$ cat mi-archivo.txt
Shhhh... Este es un mensaje secreto...

Yuhuuu! ya lo tenemos de vuelta 🙂

Manual práctico de hping

Artículo escrito por Pedro Carrasco

Que es y para qué sirve

La herramienta hping es un analizador/ensamblador de paquetes TCP/IP de uso en modo consola. Está inspirado en el comando ping de unix, aunque a diferencia de éste, hping no solo es capaz de enviar paquetes ICMP sino que además también puede enviar paquetes TCP, UDP, y RAW-IP.

Todo esto quiere decir, que con esta herramienta, podemos generar paquetes TCP/IP a medida, que contengan la información que queramos. Esto puede resultar muy interesante para poder efectuar auditorías de red y poder así prevenir ataques malintencionados.

Descarga e instalación

La instalación de esta herramienta, al menos en Ubuntu, es realmente sencilla, como la mayoría de aplicaciones. Tan sólo hay que abrir una consola y escribir como root:

root@laptop:/home/root# apt-get install hping3

Para más información puedes consultar la web oficial aquí.

Diferentes usos y su sintaxis

El uso más sencillo que podemos darle es como sustituto de la herramienta ping, aunque veremos que la información que nos aporta es algo diferente. Vamos a comparar ambas herramientas:

root@laptop:/home/root# ping localhost
PING localhost (127.0.0.1) 56(84) bytes of data.
64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.020 ms
64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.016 ms
64 bytes from localhost (127.0.0.1): icmp_seq=3 ttl=64 time=0.017 ms
64 bytes from localhost (127.0.0.1): icmp_seq=4 ttl=64 time=0.023 ms
^C
— localhost ping statistics —
4 packets transmitted, 4 received, 0% packet loss, time 2997ms
rtt min/avg/max/mdev = 0.016/0.019/0.023/0.002 ms

root@laptop:/home/root# hping3 localhost
HPING localhost (lo 127.0.0.1): NO FLAGS are set, 40 headers + 0 data bytes
len=40 ip=127.0.0.1 ttl=64 DF id=0 sport=0 flags=RA seq=0 win=0 rtt=0.1 ms
len=40 ip=127.0.0.1 ttl=64 DF id=0 sport=0 flags=RA seq=1 win=0 rtt=0.1 ms
len=40 ip=127.0.0.1 ttl=64 DF id=0 sport=0 flags=RA seq=2 win=0 rtt=0.0 ms
len=40 ip=127.0.0.1 ttl=64 DF id=0 sport=0 flags=RA seq=3 win=0 rtt=0.0 ms
^C
— localhost hping statistic —
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 0.0/0.0/0.1 ms

En ambos casos, la información que nos proporciona es muy similar, salvo algún pequeño matiz como el campo de flags, que a continuación veremos de qué se trata.

También podemos utilizarlo como scanner de puertos, utilizando el método idle scan (por cierto, método ideado por Salvatore Sanfilipo, el mismo creador de hping), la sintaxis es la siguiente:

root@laptop:/home/root# hping3 -S localhost -p 9091
HPING localhost (lo 127.0.0.1): S set, 40 headers + 0 data bytes
len=44 ip=127.0.0.1 ttl=64 DF id=0 sport=9091 flags=SA seq=0 win=32792 rtt=0.1 ms
len=44 ip=127.0.0.1 ttl=64 DF id=0 sport=9091 flags=SA seq=1 win=32792 rtt=0.1 ms
len=44 ip=127.0.0.1 ttl=64 DF id=0 sport=9091 flags=SA seq=2 win=32792 rtt=0.1 ms
len=44 ip=127.0.0.1 ttl=64 DF id=0 sport=9091 flags=SA seq=3 win=32792 rtt=0.0 ms
^C
— localhost hping statistic —
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 0.0/0.1/0.1 ms

Si nos fijamos en el valor del flag, veremos que pone SA, que quiere decir SYN/ACK, que a grosso modo es el mensaje que un servidor responde cuando tiene un puerto abierto (en mi caso tengo un pequeño servidor web en el puerto 9091). Si hubiera estado cerrado, nos habría respondido con el flag RA, que quiere decir RST/ACK, o lo que es lo mismo, que tiene el puerto cerrado; veámoslo utilizando otro puerto distinto:

root@laptop:/home/root# hping3 -S localhost -p 9092
HPING localhost (lo 127.0.0.1): S set, 40 headers + 0 data bytes
len=40 ip=127.0.0.1 ttl=64 DF id=0 sport=9092 flags=RA seq=0 win=0 rtt=0.0 ms
len=40 ip=127.0.0.1 ttl=64 DF id=0 sport=9092 flags=RA seq=1 win=0 rtt=0.1 ms
^C
— localhost hping statistic —
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.0/0.0/0.1 ms

En este caso nos responde con un RST/ACK, lo que nos indica que el puerto 9092 está cerrado.

Otro uso que podemos darle es como herramienta traceroute, aunque para este uso, prefiero tcptraceroute, veamos cómo hacerlo con hping:

root@laptop:/home/root# hping3 pedrocarrasco.org -t 1 −−traceroute
HPING pedrocarrasco.org (wlan0 174.132.157.133): NO FLAGS are set, 40 headers + 0 data bytes
hop=1 TTL 0 during transit from ip=10.109.8.1 name=UNKNOWN
hop=1 hoprtt=0.9 ms

El campo ip=10.109.8.1, hace referencia a la IP del primer salto que realiza para llegar al dominio especificado. Ésto lo hemos especificado poniendo -t 1 (también podemos utilizar el comando -z en vez de -t, e incrementar el TTL cuanto queramos de uno en uno presionando Ctrl+Z).

Además podemos “firmar” los paquetes que enviemos, con el contenido que queramos. Aunque este ejemplo es inocuo, utilizándolo (in)debidamente podríamos causar diversas alteraciones en la máquina destino. Veámos el ejemplo:

root@laptop:/home/root# cat firma.txt
esto es solo un ejemplo
root@laptop:/home/root# hping3 -2 -p 7 localhost -d 50 -E firma.txt
HPING localhost (lo 127.0.0.1): udp mode set, 28 headers + 50 data bytes
[main] memlockall(): Success
Warning: can’t disable memory paging!
ICMP Port Unreachable from ip=127.0.0.1 name=localhost
status=0 port=1963 seq=0

Estableciendo la opción -2 enviamos paquetes UDP, con la opción -d 50 indicamos la longitud del mensaje y con la opción -E indicamos que lea del archivo firma.txt. Podemos ver lo que hemos enviado si capturamos con cualquier sniffer (yo he usado wireshark) el tráfico de la red.

Firmar paquetes con hping
Firmar paquetes con hping

Otra interesante habilidad de hping es poder enviar archivos a través de la red. Para esto, necesitamos una máquina que envíe algún archivo, y otra que esté a la escucha para recibirlo. Primero, preparamos la máquina que permanecerá a la escucha, para ello utilizaremos el parámetro −−listen en el que especificaremos el texto que nos servirá de indicador de inicio de mensaje (en este caso utilizo signature), el protocolo que usaremos es ICMP y lo establecemos utilizando el parámetro −−icmp (también puede usarse UDP o TCP). Al ejecutarlo veremos algo así:

root@laptop:/home/root# hping3 localhost −−listen signature −−safe −−icmp
Warning: Unable to guess the output interface
hping3 listen mode
[main] memlockall(): Success
Warning: can’t disable memory paging!

Ahora toca preparar por otro lado el comando que nos servirá para enviar el fichero que queramos.

root@laptop:/home/root# hping3 localhost −−icmp -d 50 −−sign signature −−file firma.txt
HPING localhost (lo 127.0.0.1): icmp mode set, 28 headers + 50 data bytes
[main] memlockall(): Success
Warning: can’t disable memory paging!
len=78 ip=127.0.0.1 ttl=64 id=5268 icmp_seq=0 rtt=0.1 ms
len=78 ip=127.0.0.1 ttl=64 id=5287 icmp_seq=1 rtt=0.1 ms
len=78 ip=127.0.0.1 ttl=64 id=5289 icmp_seq=2 rtt=0.1 ms
len=78 ip=127.0.0.1 ttl=64 id=5291 icmp_seq=3 rtt=0.1 ms
len=78 ip=127.0.0.1 ttl=64 id=5293 icmp_seq=4 rtt=0.1 ms
len=78 ip=127.0.0.1 ttl=64 id=5295 icmp_seq=5 rtt=0.1 ms
len=78 ip=127.0.0.1 ttl=64 id=5297 icmp_seq=6 rtt=0.1 ms

El resultado es que en el lado en que estábamos esperando recibir algo, empieza a verse lo siguiente:

root@laptop:/home/root# hping3 localhost −−listen signature −−safe −−icmp
Warning: Unable to guess the output interface
hping3 listen mode
[main] memlockall(): Success
Warning: can’t disable memory paging!
esto es solo un ejemplo
esto es solo un ejemplo
esto es solo un ejemplo
esto es solo un ejemplo
esto es solo un ejemplo
esto es solo un ejemplo

Conociendo este último uso, y con un poco de imaginación podremos utilizar hping como si de un troyano se tratase. Aunque mas que para ser usado como troyano, esta herramienta es perfecta para realizar ataques de DoS, spoof o flood. Acabaremos el artículo viendo un sencillo ejemplo de ataque flooding:

root@laptop:/home/root# hping3 −−rand-source −−flood localhost
HPING localhost (lo 127.0.0.1): NO FLAGS are set, 40 headers + 0 data bytes
hping in flood mode, no replies will be shown
^C
— localhost hping statistic —
189742 packets transmitted, 0 packets received, 100% packet loss
round-trip min/avg/max = 0.0/0.0/0.0 ms

Podemos ver que en tan solo unos segundos, hemos inundado la red con casi doscientos mil paquetes transmitidos de forma ininterrumpida. Esto puede (suele) causar que la red se colapse, impidiendo a otros usuarios poder utilizarla, ya que hping no deja espacio (entre paquete y paquete) para que otras máquinas transmitan ningún tipo de información. El parámetro −−rand-source hace que cada paquete tenga un origen distinto y aleatorio, y −−flood no deja espacio entre paquete y paquete. Si tenemos wireshark a la escucha, podemos ver cual es el resultado:

hping-flood
hping-flood

Ahora os toca practicar con hping para aprender más sobre el protocolo TCP/IP y sus debilidades. No creo que haga falta decirlo, pero por si acaso aviso de que el uso malintencionado de esta herramienta puede ser ilegal, así que utilizad esta información de un modo educativo o para auditar vuestra propia red.

Privacidad real usando GPG

Artículo de Pedro Carrasco


Candado (imagen extraida de la wikipedia)
Candado (imagen extraida de la wikipedia)

¿Qué es GPG?

GPG, tal y como se dice en la Wikipedia, es una herramienta para cifrar y firmar mensajes. Podriamos decir que es el hermano libre de PGP. Existen los proyectos GPG4win y macgpg2 que proveen de una versión de GPG para Windows y Mac respectivamente.

¿Para qué necesito cifrar y firmar mensajes?

Lo más conveniente sería que habitualmente hiciéramos uso de este tipo de herramientas, al menos para las comunicaciones que queramos mantener realmente en privado.

Por si no lo sabías, la mayoría de correos electrónicos, programas de mensajería como Messenger, accesos y contenido de páginas web, herramientas de videoconferencias, y un largo etcétera de utilidades que a priori pueden parecernos suficientemente privadas, se transmiten por Internet sin ningún tipo de encriptación. Esto quiere decir que si alguien es capaz de escuchar esta comunicación (muy sencillo mediante cualquier sniffer), puede llegar a ver todo lo que estamos haciendo.

Puede parecer poco probable que esto suceda, pero ni te imaginas la de oportunidades que se presentan al día para poder ser víctima de este tipo de espionaje: siempre que utilizas tu conexión wifi del móvil o portátil y te conectas a Internet en un bar, en una biblioteca pública, en la red cableada de tu oficina, incluso en la propia red inalámbrica de tu casa (ni te imaginas lo fácil que puede llegar a ser reventar la clave de una red wifi doméstica) puedes estar siendo espiado.

Sí, sé que suena paranoico, y probablemente lo sea, pero si necesitas una privacidad real, la mejor solución es encriptar o cifrar nuestras comunicaciones.

¿Cómo puedo encriptar un mensaje?

Para encriptar un mensaje con GPG (o con cualquier sistema de criptografía asimétrica), necesitamos generar un par de claves. Una de ellas será la clave pública, clave que todo el mundo deberá conocer, y la otra será la clave privada, que debe mantenerse en privado y sólo tú debes conocer, ya que eso nos garantizará los servicios de confidencialidad, autenticación, integridad y no repudio.

Para generar nuestro par de claves, utilizaremos Seahorse, un gestor de claves GPG para Gnome que facilita mucho todo el proceso. Si utilizas Gnome, te interesará instalar también los plugins de seahorse para nautilus, para disponer del menú contextual que te permita encriptar un archivo haciendo clic en el botón derecho. Instalar seahorse y el plugin puedes hacerlo escribiendo en la consola lo siguiente:

root@laptop:/home/root# sudo apt-get install seahorse seahorse-plugins

Tras la instalación, debes reiniciar nautilus. Para hacerlo puedes reiniciar el PC, o cerrar sesión y volver a entrar o simplemente escribiendo:

root@laptop:/home/root# killall nautilus

Aquí están las capturas que nos muestra cómo generar el par de claves paso a paso utilizando Seahorse:

Paso 1: Ejecutamos Seahorse, y vamos al menú Archivo » Nueva...
Paso 1: Ejecutamos Seahorse, y vamos al menú Archivo » Nueva...
Paso 2: Aparecerá una ventana con los tipos de claves que seahorse nos permite crear. Seleccionamos Clave PGP
Paso 2: Aparecerá una ventana con los tipos de claves que seahorse nos permite crear. Seleccionamos Clave PGP
Paso 3: Aparece una nueva ventana en la que deberemos introducir nuestros datos: Nombre, email y comentario (éste último opcional). También podemos seleccionar el tipo de cifrado, la fortaleza de la clave (recomendado 4096 o más) y la caducidad de la misma si hacemos clic en «opciones avanzadas de clave»
Paso 3: Aparece una nueva ventana en la que deberemos introducir nuestros datos: Nombre, email y comentario (éste último opcional). También podemos seleccionar el tipo de cifrado, la fortaleza de la clave (recomendado 4096 o más) y la caducidad de la misma si hacemos clic en «opciones avanzadas de clave»
Paso 4: Escribe una contraseña. Ésta sirve para poder guardar de forma segura la clave privada. Deberás utilizar esta clave siempre que hagas uso de la clave privada, así que procura no olvidarla!
Paso 4: Escribe una contraseña. Ésta sirve para poder guardar de forma segura la clave privada. Deberás utilizar esta clave siempre que hagas uso de la clave privada, así que procura no olvidarla!
Paso 5: En este paso es donde se crea propiamente el par de claves. Este proceso puede tardar bastante, en función de la fortaleza de la clave que hayamos seleccionado antes. Para 4096 tarda unos 3 minutos.
Paso 5: En este paso es donde se crea propiamente el par de claves. Este proceso puede tardar bastante, en función de la fortaleza de la clave que hayamos seleccionado antes. Para 4096 tarda unos 3 minutos.
Paso 6: Una vez haya terminado de generar la clave, aparecerá automáticamente en la lista de claves personales, listo para usarlo!
Paso 6: Una vez haya terminado de generar la clave, aparecerá automáticamente en la lista de claves personales, listo para usarlo!

Si utilizas Windows o Mac, prueba con GPG4Win o macgpg2, el proceso debe ser muy parecido, aunque nunca lo he probado. Si alguien tiene alguna experiencia con estas versiones estaré encantado de saber qué tal funcionan y poder intercambiar opiniones.

¿Y ahora qué?

Bien, pues ahora puedes encriptar y firmar documentos o archivos y enviárselos a quien quieras, con la certeza de que nadie, salvo la persona a la que le envías el mensaje, podrá leerlo. Para hacerlo, la persona que recibirá el mensaje encriptado debe disponer también de un par de claves como los que acabamos de generar, y tú debes conocer la clave pública del destinatario.

Vamos a ver un ejemplo de cómo exportar tu clave pública con Seahorse.

Paso 1: Seleccionar la clave GPG de la que quieres exportar la clave pública y hacer clic en el icono de «Exportar a un archivo»
Paso 1: Seleccionar la clave GPG de la que quieres exportar la clave pública y hacer clic en el icono de «Exportar a un archivo»
Paso 2: Seleccionar el nombre e indicar dónde queremos guardarlo.
Paso 2: Seleccionar el nombre e indicar dónde queremos guardarlo.

Para importar una clave pública y añadirla en tu lista de claves públicas, tan solo tienes que hacer doble clic en el fichero .asc o, dentro de Seahorse, hacer clic en Archivo » Importar… y seleccionar el archivo de clave pública.

Una vez tengas alguna clave pública del destinatario en el apartado de «Otras claves» ya podemos compartir mensajes encriptados con esa persona. El proceso es muy sencillo, aquí van las capturas de cómo cifrar un archivo paso a paso:

Paso 1: Seleccionamos el fichero que queremos cifrar y hacemos clic con el boton derecho. Seleccionamos la opción Cifrar...
Paso 1: Seleccionamos el fichero que queremos cifrar y hacemos clic con el boton derecho. Seleccionamos la opción Cifrar...
Paso 2: Elegimos las personas que van a poder descifrar el mensaje. En este caso seleccionamos a Albert. También podemos elegir si queremos firmar el mensaje que ciframos o no.
Paso 2: Elegimos las personas que van a poder descifrar el mensaje. En este caso seleccionamos a Albert. También podemos elegir si queremos firmar el mensaje que ciframos o no.
Paso 3: Escribimos la contraseña que hemos utilizado para cifrar nuestra clave privada durante el proceso de creación de la clave (ver paso 4, durante la creación de clave)
Paso 3: Escribimos la contraseña que hemos utilizado para cifrar nuestra clave privada durante el proceso de creación de la clave (ver paso 4, durante la creación de clave)
Paso 4: Se genera un archivo cifrado con el mismo nombre que el original y se le añade la extensión PGP. Este es el fichero que debemos enviar, ya que, en este caso, sólo Albert podrá descifrarlo. Ni siquiera yo mismo podría descifrarlo. Si quieres poder descifrarlo tu también, tan solo debes añadirte a ti mismo como destinatario.
Paso 4: Se genera un archivo cifrado con el mismo nombre que el original y se le añade la extensión PGP. Este es el fichero que debemos enviar, ya que, en este caso, sólo Albert podrá descifrarlo. Ni siquiera yo mismo podría descifrarlo. Si quieres poder descifrarlo tu también, tan solo debes añadirte a ti mismo como destinatario.

Ya está! Ahora solo tenemos que enviar el archivo encriptado por correo electrónico, mensajería instantánea o como queramos y nos hemos asegurado de que sólo el destinatario podrá descifrarlo. Si el fichero sufre alguna modificación durante el envío -malintencionadamente o no-, quedará corrupto y no podrá ser devuelto a su estado original (no podrá ser descifrado), por lo tanto se cumple el servicio de integridad. Si además de cifrarlo, hemos optado por firmarlo, el destinatario tendrá la certeza de que sólo quien lo envía ha podido ser el remitente, así que también se cumple el servicio de autenticación. Y desde luego nadie podrá conocer el contenido, salvo Albert en este caso, así que se cumple también el servicio de confidencialidad.

Por cierto, aquí dejo el enlace a mi clave pública por si alguien necesita enviarme algo realmente confidencial.