Aqui veremos lo mas importante de este topico.
1- Introduccion
2- Utilizando Secure Shell (SSH)
2-1 Comandos
2-2 Instalacion
2-3 Archivos de Configuracion
2-4 Primeras Conexiones
2-5 Teoria Llaves asimetricas
2-6 Creando Llaves asimetricas
2-7 Creando Tuneles
3-0 Teoria GPG
3-1 Uso GPG
3-2 Uso de GPG con Gmail
Introduccion
Vamos a ver un poco como funciona el servicio OpenSSh que viene de los desarroladores de OpenBSD.
Este servicio utiliza lo que se llama cifrado asimetrico (llave publica y privada) con diferentes algoritmos(RSA, DSA,etc) que van a realizar la encriptacion.[2]
Utilizando Secure Shell (SSH)
SSH, tambien conocido como Shell segura es un reemplazo de telnet y otros comandos (rsh,rlogin,rcp ).
Principalmente se usa ssh para poder establecer conexiones remotas encriptadas. Sin embargo se utiliza tambien para copiar archivos,
crear tuneles con diferentes procotolos y puertos.
SSH es un modelo cliente/servidor en donde el demonio sshd es el servidor y ssh y scp son los comandos clientes.
Los clientes se conectan al servidor (sshd) , se establece una sesion encriptada que para eso necesitamos una autentificacion entre ambas partes (intercambio de llaves) y luego nos da el prompt de login.
Comandos
El comando ssh puede ser usado para conectarme remotamente a otros equipos o para conectarme localmente a mi equipo.Podriamos decir que es un uso similar al de rlogin,rsh,telnet.
El comando scp nos va a servir para poder copiar archivos y directorios desde o hacia un servidor remoto, funcionando este como el rcp.
Tambien se puede hacer forwarding con ssh (autentificacion con X y forwarding). Tambien se puede arrancar una X cliente desde una maquina remota y el protocolo X Window System sera encriptado para que sus paquetes viajen por la red.[3]
Instalacion
Aca vamos a consultar si ya lo tenemos instalado.
root@debian:~# dpkg -l |grep -i openssh ii openssh-blacklist 0.4.1 list of default blacklisted OpenSSH RSA and DSA keys ii openssh-client 1:5.5p1-6 secure shell (SSH) client, for secure access to remote machines ii openssh-server 1:5.5p1-6 secure shell (SSH) server, for secure access from remote machines root@debian:~#
Como ven tenemos instalado todo ya, si lo quisieramos instalar basta con hacer aptitude install NombrePaquete.
No se olviden que para poder hacer que se conecten al equipo necesitan el openssh-server.
Luego de instalar el openssh-server les va a generar las claves.
Archivos de Configuracion
Vamos a ver donde se situan los archivos de configuracion del cliente y del servidor.
Aca tenemos el directorio en gral. root@debian:~# ls -ld /etc/ssh/ drwxr-xr-x 2 root root 4096 Feb 8 23:59 /etc/ssh/ root@debian:~#
Aca tenemos todos los archivos que contiene:
root@debian:~# ls -l /etc/ssh/ total 152 -rw-r--r-- 1 root root 125749 Dec 26 13:12 moduli -rw-r--r-- 1 root root 1669 Dec 26 13:12 ssh_config -rw-r--r-- 1 root root 2453 Feb 8 23:59 sshd_config -rw------- 1 root root 668 Feb 8 23:59 ssh_host_dsa_key -rw-r--r-- 1 root root 601 Feb 8 23:59 ssh_host_dsa_key.pub -rw------- 1 root root 1675 Feb 8 23:59 ssh_host_rsa_key -rw-r--r-- 1 root root 393 Feb 8 23:59 ssh_host_rsa_key.pub root@debian:~#
Como ven tienen las llaves que genero con el algoritmo dsa y rsa tanto publicas ocmo privadas.
root@debian:/etc/ssh# file ssh_host_rsa_key ssh_host_rsa_key: PEM RSA private key root@debian:/etc/ssh# file ssh_host_rsa_key.pub ssh_host_rsa_key.pub: ASCII text, with very long lines root@debian:/etc/ssh#
Luego el archivo de configuracion del cliente es el siguiente :
root@debian:/etc/ssh# ls -l ssh_config -rw-r--r-- 1 root root 1669 Dec 26 13:12 ssh_config root@debian:/etc/ssh#
Un archivo tipico ..
root@debian:~# cat /etc/ssh/ssh_config |grep -v "#"
Host *
SendEnv LANG LC_*
HashKnownHosts yes
GSSAPIAuthentication yes
GSSAPIDelegateCredentials no
root@debian:~#
El archivo de configuracion del servidor es el siguiente:
root@debian:/etc/ssh# ls -l sshd_config -rw-r--r-- 1 root root 2453 Feb 8 23:59 sshd_config root@debian:/etc/ssh#
Un archivo tipico :
root@debian:~# cat /etc/ssh/sshd_config |grep -v "#" Port 22 Protocol 2 HostKey /etc/ssh/ssh_host_rsa_key HostKey /etc/ssh/ssh_host_dsa_key UsePrivilegeSeparation yes KeyRegenerationInterval 3600 ServerKeyBits 768 SyslogFacility AUTH LogLevel INFO LoginGraceTime 120 PermitRootLogin yes StrictModes yes RSAAuthentication yes PubkeyAuthentication yes IgnoreRhosts yes RhostsRSAAuthentication no HostbasedAuthentication no PermitEmptyPasswords no ChallengeResponseAuthentication no X11Forwarding yes X11DisplayOffset 10 PrintMotd no PrintLastLog yes TCPKeepAlive yes AcceptEnv LANG LC_* Subsystem sftp /usr/lib/openssh/sftp-server UsePAM yes root@debian:~#
Aca en este archivo vamos a mencionar alguna de las cosas mas importantes como por ejemplo.
Port para especificar el puerto
Protocol la version del ssh
PermitRootLogin para permitir que se loguen como root.
PubkeyAuthentication Permite autentificacion de llaves publicas.
# For this to work you will also need host keys in /etc/ssh_known_hosts
# (for protocol version 2)
HostbasedAuthentication para que los usuarios puedan utilizar las llaves guardas bien conocidas o no.
# To disable tunneled clear text passwords, change to no here!
PasswordAuthentication Creo que el comentario de arriba lo dice todo.
X11Forwarding Para poder realizar forwardeo de grafica.
Primeras Conexiones
Cuando nos conectemos por primera vez a un equipo remoto va a pasar lo siguiente.
Equipo Remoto : 192.168.100.136
[rino@oc7287280510 ~]$ uname -a Linux oc7287280510.ibm.com 2.6.35.10-74.fc14.x86_64 #1 SMP Thu Dec 23 16:04:50 UTC 2010 x86_64 x86_64 x86_64 GNU/Linux [rino@oc7287280510 ~]$ [rino@oc7287280510 ~]$ ssh -l root 192.168.100.136 The authenticity of host '192.168.100.136 (192.168.100.136)' can't be established. RSA key fingerprint is 7f:91:5b:59:fb:3e:2d:9a:74:5f:41:7d:4a:36:98:9b. Are you sure you want to continue connecting (yes/no)? Como ven ahi se va a realizar el intercambio de llaves.. Ponemos yes. Warning: Permanently added '192.168.100.136' (RSA) to the list of known hosts. root@192.168.100.136's password: Y como vemos ya tenemos para poner la password Linux debian 2.6.32-5-686 #1 SMP Wed Jan 12 04:01:41 UTC 2011 i686 The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Last login: Mon Feb 14 15:54:53 2011 from 192.168.100.1 root@debian:~# root@debian:~# uname -a Linux debian 2.6.32-5-686 #1 SMP Wed Jan 12 04:01:41 UTC 2011 i686 GNU/Linux root@debian:~# Ahora como ven estamos logueado en el equipo remoto.
Ahora volvamos al equipo local.
[rino@oc7287280510 ~]$ pwd && ls -ld .ssh /home/rino drwx------. 2 rino rino 4096 Feb 14 18:51 .ssh [rino@oc7287280510 ~]$
Como ven se creo un directorio que se llama .ssh en el home directory del usuario el cual contiene estos archivos.
[rino@oc7287280510 ~]$ pwd && ls -l .ssh /home/rino total 104 -rw-------. 1 rino rino 1002 Aug 25 21:58 authorized_keys -rw-rw-r--. 1 rino rino 62 Jul 22 2010 config.ssh -rw-------. 1 rino rino 672 May 2 2010 id_dsa -rw-r--r--. 1 rino rino 607 May 2 2010 id_dsa.pub -rw-r--r-- 1 rino rino 77941 Feb 14 18:52 known_hosts -rw-------. 1 rino rino 1743 Jul 22 2010 rino -rw-r--r--. 1 rino rino 399 Jul 22 2010 rino.pub [rino@oc7287280510 ~]$
El archivo que nos creo fue el known_hosts que es el que contiene todas las llaves publicas de los servidores remotos que me quiero conectar.
Los demas archivos que figuran son porque en mi caso tengo mis llaves (publicas y privadas) que genere yo para poder conectarme a los equipos remotos sin necesidad de poner ninguna clave.. Eso lo vamos a ver mas adelante.
Si se fijan pueden buscar en el archivo mencionado anteriormente si esta la llave.
[rino@oc7287280510 .ssh]$ cat known_hosts |grep -i "192.168.100.136" 192.168.100.136 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCvwJeIutxTZiydnLX+mOGenaYj5g2AKTpztQGFV4pSZxJLe9G0gsnrqZb2Amfe7ibaKqRMCy8OAPJfXJGmOyRVOHvqHnxeDifdXI9u81+qkBQRmuqV+6niqx1BxjWov7LnsiVmEnQDj3rlVe8t3WW5tOujdBTster29ECH0XfaiJdbzEF4xq0wdm0CknGwGha5DkkdWmoXlQh4fXrxsjHyIYSe5MpsIiaFsxp29M7ecxIaGcXct6twS0rABBD/pKrvrg6GMx2CUHaJC3AuoHajlxo7PoaHCv/c1pWZMlKNP4uSon+RH7ficNZ1MXiHsudm6O5gOEZFtTTdLzytxcPj [rino@oc7287280510 .ssh]$
Si la borran (eso de arriba es toda una linea) , la proxima vez que se conectan a ese equipo le va a pedir devuelta que confirmen el intercambio de llaves.
Para conectarnos a un servidor remoto la sintaxis basica es asi.
ssh -l usuario ip/fqdn ssh usuario@fqdn Ejemplo: ssh -l pepe 192.168.1.1 ssh -l pepe@mipc.com
Teoria llaves asimetricas
Una breve introduccion:
Breve introducción a la criptografía
En general, se pueden utilizar dos métodos de cifrado: simétrica y asimétrica.
El cifrado Simétrico es más rápido pero menos seguro, y el cifrado asimétrico es más lento pero más seguro.
En un medio ambiente con clave simétrica, ambas partes utilizan la misma clave para cifrar y descifrar mensajes.
Con las claves asimétricas, una clave pública y una clave privada se utilizan, y esta es la técnica importante que es utilizada para SSH.
Si las claves asimétricas son utilizadas, cada usuario tiene su propia clave pública / clave privada, y cada equipo necesita un par de ellas. De estas claves, la clave privada debe ser protegida en todo momento: si la clave privada se ve comprometida, la identidad del propietario de la clave privada se pone en peligro.
En resumen, el robo de usuarios de la clave privada es como el robo de identidad de un usuarios. Por lo tanto, una clave privada se almacena normalmente en un lugar muy seguro donde nadie más que su propietario puede acceder a él, por regla general se graba ~./ssh. La clave pública, por el contrario, está disponible a todo el mundo.
La clave Pública / Privada se utiliza generalmente para tres propósitos: encriptación, autenticación y no rechazo.
Para enviar un mensaje cifrado, el remitente cifra el mensaje con la clave pública del receptor que puede descifrar con la clave privada correspondiente. Este escenario requiere que, antes de el envío de un mensaje cifrado, usted tenga la clave pública de la persona que desea enviar el mensaje.
Las otras opciones son para utilizar las claves públicas y privadas para la autenticación o para probar que un mensaje no ha cambiado desde su creación. Este método se conoce como el no repudio. En el ejemplo de la autenticación, la clave privada se utiliza para generar una señal de token codificada. Si este token se puede descifrar con la clave pública de la persona que quiere autentificarse, esto demuestra que realmente está tratando con la persona adecuada, y el acceso puede ser concedido.
Sin embargo, esta técnica requiere que la clave pública sea copiada al host antes de que la autentificacion ocurra.
Utilizando modelo llave Publica/Privada en un ambiente con SSH.
Cuando la autenticación basada en claves se utiliza SSH , debe asegurarse de que, para todos los usuarios que necesitan utilizar esta tecnología, la clave pública está disponible en los equipos que se quieran acceder . Al entrar, el usuario crea una solicitud de autenticación en donde se utiliza la firma de la clave privada del usuario . Esta solicitud de autenticación se corresponde con la clave pública del mismo usuario en el equipo en el que el usuario desea ser autenticado. Si coincide, el usuario tiene permiso de acceso; Si no es así, el acceso de usuario se le niega.
La clave Pública / privada de autenticación está habilitada por defecto en todas las principales distribuciones de Linux.
Los pasos siguientes proporcionan un resumen de lo que sucede cuando un usuario intenta establecer una sesión SSH con un host:
1. Si la autenticación de clave pública está habilitada (por defecto), SSH comprueba el directorio en el directorio home del usuario para comprobar si una clave privada está presente.
2. Si una clave privada se encuentra, SSH crea un paquete con algunos datos en ella (token), cifra el paquete con la clave privada, y lo envía al host. La clave pública se envía también con este paquete.
3. El anfitrión ahora comprueba si un archivo con el nombre authorized_key en el home directory del usuario. Si no es así, el usuario no puede ser autenticado con sus llaves.
Si el archivo no existe y la clave pública es una clave permitida (y también es idéntica a la clave que ha sido seleccionada en el host), el host utiliza esta clave para comprobar la firma.
4. Si la firma se verifica, el usuario tiene acceso. Si la firma no puede ser verificada, el anfitrión le pide al usuario una contraseña en su lugar.
Todo esto suena bastante complicado, pero no lo es realmente. Todo sucede de forma transparente, si ha sido correctamente configurado. Además, lesto representa apenas un retraso significativo al establecer una conexión. Normalmente se requieren no más de un segundo.
Creacion llaves asimetricas
Vamos a realizar los pasos para crear nuestro juego de llaves y lograr que no tengamos que poner ninguna clave al conectarnos en un equipo remoto.[6]
Tenemos nuestro equipo ServidorA que va a ser nuestro equipo de trabajo
[rino@servidorA .ssh]$ hostname servidorA [rino@servidorA .ssh]$
Tenemos nuestro equipo ServidorB que va a ser el equipo donde nos vamos a conectar remotamente.
root@servidorB:~# hostname servidorB root@servidorB:~#
Paso 1 –> Crear llave publica y privada usando el comando ssh-key-gen en el servidor local
[test@servidorA ~]$ ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/home/test/.ssh/id_rsa): Created directory '/home/test/.ssh'. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/test/.ssh/id_rsa. Your public key has been saved in /home/test/.ssh/id_rsa.pub. The key fingerprint is: 9d:45:29:e0:78:47:c3:85:0b:9e:ef:b2:59:26:aa:82 test@servidorA The key's randomart image is: +--[ RSA 2048]----+ | .oooo. | | o..+o. | | ..oo.o. | | .oo.o | | S.o | | . | | . ..o | |E . ..=. | | .... oo | +-----------------+ [test@servidorA ~]$
Paso 2 –> Copiar la llave publica en el servidor remoto utilizando ssh-copy-id
[test@servidorA ~]$ ssh-copy-id -i .ssh/id_rsa.pub rino@192.168.100.136 The authenticity of host '192.168.100.136 (192.168.100.136)' can't be established. RSA key fingerprint is 7f:91:5b:59:fb:3e:2d:9a:74:5f:41:7d:4a:36:98:9b. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '192.168.100.136' (RSA) to the list of known hosts. rino@192.168.100.136's password: [test@servidorA ~]$
Acuerdense que tienen que tener un usuario en el equipo remoto.
Esto va hacer un append de nuestra llave publica en el archivo remoto .ssh/authorized_key del servidor destino.
Paso 3 —> Autentificarse en el equipo remoto sin poner ningun password.
[test@servidorA ~]$ ssh rino@192.168.100.136 Linux debian 2.6.32-5-686 #1 SMP Wed Jan 12 04:01:41 UTC 2011 i686 The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Last login: Mon Feb 14 19:43:11 2011 from 192.168.100.1 rino@servidorB:~$
Como ven no utilizamos ninguna password.
Ahora vamos a ver como utilizar ssh-add y ssh-agent.
Estos comandos nos van a servir para poder administrar nuestras llaves que se cargan cuando se inicia nuestra sesion. Imaginense que alguien se adueña de nuestras llaves como no la protegimos con una clave cualquiera se puede pasar por nosotros es por eso que necesitamos configurarle una clave.
[test@servidorA ~]$ ssh-keygen -p -t rsa Enter file in which the key is (/home/test/.ssh/id_rsa): Enter new passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved with the new passphrase. [test@servidorA ~]$
Ahora ya tenemos una clave para nuestras llaves.
[test@servidorA ~]$ ssh rino@192.168.100.136 Enter passphrase for key '/home/test/.ssh/id_rsa': Linux debian 2.6.32-5-686 #1 SMP Wed Jan 12 04:01:41 UTC 2011 i686 The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Last login: Mon Feb 14 19:57:21 2011 from 192.168.100.1 rino@servidorB:~$
Ahora como ven antes de hacer algo me pide que autentifique con la clave de las llaves.. Ya si alguien quiere usar mis llaves no puede..
La idea es que no tenga que poner siempre esa clave y eso lo vamos a lograr con ssh-add y ssh-agent.
[test@oc7287280510 ~]$ ssh-agent SSH_AUTH_SOCK=/tmp/ssh-JtWDS10101/agent.10101; export SSH_AUTH_SOCK; SSH_AGENT_PID=10102; export SSH_AGENT_PID; echo Agent pid 10102; [test@oc7287280510 ~]$
*. Esos comandos que tiro por lineas lo tendriamos que copiar y pegar para que los ejecute la shell, pero seria muy engorroso asi que vamos a realizarlo de la siguiente manera.*
*. Tengan en cuenta que les va a pedir su passphrase.*
Entonces vamos a realizar otros pasos:
[test@oc7287280510 ~]$ eval `ssh-agent` Agent pid 10194 [test@oc7287280510 ~]$
Aca entra en juego el ssh-ad para que agreguemos nuestra llave en memoria. Nos va a pedir nuestra clave de la llave.
[test@oc7287280510 ~]$ ssh-add Enter passphrase for /home/test/.ssh/id_rsa: Identity added: /home/test/.ssh/id_rsa (/home/test/.ssh/id_rsa) [test@oc7287280510 ~]$
Ahora intentamos loguearnos al servidor remoto.
[test@oc7287280510 ~]$ ssh rino@192.168.100.136 Linux debian 2.6.32-5-686 #1 SMP Wed Jan 12 04:01:41 UTC 2011 i686 The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Last login: Mon Feb 14 20:02:54 2011 from 192.168.100.1 rino@servidorB:~$
Como ven ya nos logueamos sin necesidad de poner ninguna clave. (ni la del usuario ni la de nuestra llave).
Lo unico malo de esto es que no es una buena idea ponerlo en .bashrc o .bash_profile , menos en /etc/profile.. Lo ideal seria en alguno de los scripts de inicio de nuestra sesion grafica para que cuando iniciemos la grafica nos pida que pongamos la password y ya queda nuestra llave cargada [7][8][9] porque sino solo quedaria la llave con la clave cargada unicamente en la shell donde lo ejecutamos en cambio si lo hacemos no bien entramos en nuestra sesion grafica ya queda definida de forma global.
Creando Tuneles
Sintaxis
ssh -R|L port:host:host_port [user@]hostname [command]
Cuando la opción principal es-L, ssh redirige el tráfico desde el puerto local (port) al puerto de la máquina remota(host:host_port)
Cuando un programa se conecta al puerto host local, la conexión se transmite al lado remoto.
Una aplicación muy útil para esto es que transmita los puertos locales al servidor de correo de su empresa para que pueda enviar correo electrónico como si estuviera en la oficina. Todo lo que tienes que hacer es configurar el cliente de correo electrónico para conectar con el puerto correcto en el servidor local. Mas adelante veremos un ejemplo.
Cuando se utiliza-R, ocurre lo contrario. El puerto (port) de la interfaz de host local de la máquina remota se une al equipo local, y las conexiones que le serán enviadas a la máquina local dada por el host: host_port.
Ejemplo
Acceda a login.example.com. Entonces, redireccione las conexiones hacia localhost puerto 2525 al puerto 25 en mail.example.com, que seguramente va a rechazar la retransmisión para usted. La razón es porque la unión con el puerto 2525 tiene que ser creada por root en el puerto 25:
$ ssh-L 2525: mail.example.com: 25 login.example.com
En el sentido de que podemos forwardear estos puertos y otros para crear un tunel cifrado de datos en ambas partes.
Otros ejemplos y teoria [14][15]
La idea es que generemos un tunel (comunicacion) entre dos puntos ya sea de un lado o del otro para poder tener nuestros datos cifrados.
Igualmente recomiendo ver las paginas mencionadas para estar mas a fin con el concepto aca solamente se meniciona la sintaxis.
Veamos un ejemplo mas.
Supongamos que querramos enviar un mail con telnet utilizando un servidor de correo externo en este caso mail.restauradordeleyes.com.ar
[rino@oc7287280510 ~]$ telnet mail.restauradordeleyes.com.ar 25 Trying 38.108.125.71... Connected to mail.restauradordeleyes.com.ar. Escape character is '^]'. 220 wiki.itrestauracion.com.ar ESMTP Sendmail 8.13.8/8.13.8; Tue, 15 Feb 2011 21:37:57 +0300 helo mail.restauradordeleyes.com.ar 250 wiki.itrestauracion.com.ar Hello cpe-200-115-224-64.telecentro-reversos.com.ar [200.115.224.64] (may be forged), pleased to meet you mail from: rino@restauradordeleyes.com.ar 250 2.1.0 rino@restauradordeleyes.com.ar... Sender ok rcpt to: villadalmine@gmail.com 550 5.7.1 villadalmine@gmail.com... Relaying denied. IP name possibly forged [200.115.224.64]
Como ven nos rechaza porque esta bien configurado no nos permite hacer relay por lo cual necesitamos si o si crear un tunel hacia el mail server.
Entonces antes que nada creamos el tunel.
[rino@oc7287280510 ~]$ ssh -L 2525:localhost:25 root@mail.restauradordeleyes.com.ar bienvenido a mi sistema %a. Tu IP esta siendo guardada para mayor seguridad root@mail.restauradordeleyes.com.ar's password: Last login: Tue Feb 15 21:33:40 2011 from 200.115.224.64 [root@villadalmine ~]#
Como ven lo redireccionamos al puerto 2525 pero si queriamos hacerlo sobre el puerto 25 de nuestra maquina tenemos que tener cuidado que no este corriendo un smtp en ese puerto y lo vamos a tener que abrir como root.
Ahora vamos a ver como si nos deja enviar un mail.
[root@oc7287280510 ~]# telnet localhost 2525 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. 220 wiki.itrestauracion.com.ar ESMTP VersionZZ XXXX; Tue, 15 Feb 2011 21:42:33 +0300 helo mail.restauradordeleyes.com.ar 250 wiki.itrestauracion.com.ar Hello localhost.localdomain [127.0.0.1], pleased to meet you mail from:rino@restauradordeleyes.com.ar 250 2.1.0 rino@restauradordeleyes.com.ar... Sender ok rcpt to: villadalmine@gmail.com 250 2.1.5 villadalmine@gmail.com... Recipient ok data 354 Enter mail, end with "." on a line by itself HOla este es un mail de prueba . 250 2.0.0 p1FIgXUA015400 Message accepted for delivery quit 221 2.0.0 wiki.itrestauracion.com.ar closing connection Connection closed by foreign host. [root@oc7287280510 ~]#
Y como ven ahora si nos dejo enviar un mail
.
Ejemplo con tunel reverso.
En el equipo B tenemos corriendo apache con una pagina pero este host esta nateado detras de una red privada como hariamos para mostrarle la pagina a nuestro cliente remoto que tiene linux ??
Facil primero le tenemos que pedir que nos habilite el puerto 22 y que deje corriendo ssh con un usuario que el nos provee asi luego vamos conectarnos a la pc de el para que despues se abra el tunel y el pueda poner en su navegador locahost:8080 y vea la pagina que tenemos en nuestro servidor privado.
Abrimos el tunel del lado del equipo que esta corriendo apache para conectarnos al equipo del cliente.
root@servidorB:~# ssh -R 8080:localhost:80 rino@192.168.1.102
The authenticity of host ’192.168.1.102 (192.168.1.102)’ can’t be established.
RSA key fingerprint is 3a:c4:01:ea:36:0c:26:91:dc:78:5b:7b:b0:e7:6b:72.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added ’192.168.1.102′ (RSA) to the list of known hosts.
rino@192.168.1.102′s password:
Last login: Thu Jan 27 17:29:41 2011
[rino@oc7287280510 ~]$
Ahora telefoneamos al cliente y le decimos que pruebe poner en le navegador localhost:8080
El cliente va a tipear en una terminal o en un navegador lo siguiente.
Si es una terminal –> lynx localhost:8080 y esto le va a devolver..
It works! Usted esta viendo la pagina de mi web privada
This is the default web page for this server.
The web server software is running but no content has been added, yet.
Commands: Use arrow keys to move, '?' for help, 'q' to quit, '<-' to go back.
Arrow keys: Up and Down to move. Right to follow a link; Left to go back.
H)elp O)ptions P)rint G)o M)ain screen Q)uit /=search [delete]=history list
Asi entonces abrimos un tunel reverso.. y escapamos al firewal interno porque viaja todo por otro puerto..
Teoria GPG[17]
Historia
GPG inicialmente fue desarrollado por Werner Koch. La versión 1.0.0 fue lanzada el 7 de septiembre de 1999. El ministerio de Economía y Tecnología del Gobierno Alemán financió la documentación y la versión a Microsoft Windows en el año 2000.
Usos de GPG
GPG es estable, calificado como un software para el uso en producción y es comúnmente incluido en los sistemas operativos como FreeBSD, OpenBSD, NetBSD y últimamente con todas las distribuciones GNU/Linux.
Aunque básicamente el programa tiene una interfaz textual, actualmente hay varias aplicaciones gráficas que utilizan recursos de GPG. Por ejemplo, ha sido integrado dentro de Kmail y Evolution, también hay un plugin llamado Enigmail que se integra con Mozilla y Thunderbird que trabajan en Windows, GNU/Linux y otros sistemas operativos. Debido a que los plugins no forman parte del mecanismo de GPG y no están especificados en los estándares OpenPGP, ni sus respectivos desarrolladores están vinculados con los proyectos de plugins, se podría pensar que las ventajas de seguridad de GPG puedan estar comprometidas o incluso perdiendo su efectividad como resultado de esta falta de coordinación y apoyo, pero al ser las herramientas de código abierto o scripts interpretados (como en el caso de los plugins en Thunderbird), se garantiza un funcionamiento fiable con la herramienta GPG.
GPG también puede ser compilado en otras plataformas como Mac OS X y Windows. En Mac OS X hay portada una aplicación libre llamada MacGPG, que ha sido adaptada para usar el ambiente del usuario y sus definiciones de clases nativas. La compilación cruzada no es un ejercicio trivial, por lo menos en parte debido a que las provisiones de seguridad cambian con el sistema operativo y su adaptación a menudo se vuelve difícil, pero los compiladores de alta calidad deben producir ejecutables que interactúen correctamente con otras implementaciones GPG.
Como trabaja GPG
GPG cifra los mensajes usando pares de claves individuales asimétricas generadas por los usuarios. Las claves públicas pueden ser compartidas con otros usuarios de muchas maneras, un ejemplo de ello es depositándolas en los servidores de claves. Siempre deben ser compartidas cuidadosamente para prevenir falsas identidades por la corrupción de las claves públicas. También es posible añadir una firma digital criptográfica a un mensaje, de esta manera la totalidad del mensaje y el remitente pueden ser verificados en caso de que se desconfíe de una correspondencia en particular.
GPG no usa algoritmos de software que están restringidos por patentes, entre estos se encuentra el algoritmo de cifrado IDEA que está presente en PGP casi desde sus inicios. En su lugar usa una serie de algoritmos no patentados como ElGamal, CAST5, Triple DES (3DES), AES y Blowfish. También es posible usar IDEA en GPG descargando un plugin extra, sin embargo este puede requerir una licencia para usuarios de algunos países en donde esté patentada IDEA.
GPG es un software de cifrado híbrido que usa una combinación convencional de criptografía de claves simétricas para la rapidez y criptografía de claves públicas para el fácil compartimiento de claves seguras, típicamente usando recipientes de claves públicas para cifrar una clave de sesión que es usada una vez. Este modo de operación es parte del estándar OpenPGP y ha sido parte del PGP desde su primera versión.
Problemas
El estándar OpenPGP especifica varios métodos de mensajes con firmas digitales. Debido a un error al intentar mejorar la eficiencia de uno de los métodos, se introdujo una vulnerabilidad de seguridad (Nguyen 2004) que afectó a un único método de mensajes firmado digitalmente utilizado en algunas versiones de GPG (desde la 1.0.2 hasta la 1.2.3, con menos de 1.000 claves listadas en los servidores de claves). Dicha vulnerabilidad ha sido corregida a partir de la versión 1.2.4 de GPG. El episodio ilustra la dificultad de realizar implementaciones correctas de algoritmos criptográficos, protocolos e incluso criptosistemas.
GPG es un sistema en línea de comandos. Diferentes implementaciones gráficas están disponibles pero sólo algunas tienen implementadas todas sus características (por ejemplo: borrado de ID, usuarios o firmas). Debido a que todas las instrucciones deben ser pasadas a la línea de comandos, rápidamente llegan a dificultar el uso correcto de aspectos no triviales del programa. El trabajo sobre una versión de librería está en progreso.
Uso GPG
Vamos a ver como usariamos gpg para tener un conocimiento basico sobre el y poder estar listo para rendirlo en LPIC-1.
Generar nuestra llave gpg.
rino@servidorB:~$ gpg --gen-key
gpg (GnuPG) 1.4.10; Copyright (C) 2008 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Please select what kind of key you want:
(1) RSA and RSA (default)
(2) DSA and Elgamal
(3) DSA (sign only)
(4) RSA (sign only)
Your selection?
RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048)
Requested keysize is 2048 bits
Please specify how long the key should be valid.
0 = key does not expire
= key expires in n days
w = key expires in n weeks
m = key expires in n months
y = key expires in n years
Key is valid for? (0) 4
Key expires at Sat 19 Feb 2011 03:05:33 PM EST
Is this correct? (y/N) y
You need a user ID to identify your key; the software constructs the user ID
from the Real Name, Comment and Email Address in this form:
"Heinrich Heine (Der Dichter) "
Real name: RinoRondan
Email address: rino@restauradordeleyes.com.ar
Comment: This is a Test
You selected this USER-ID:
"RinoRondan (This is a Test) "
Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O
You need a Passphrase to protect your secret key.
We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
.....+++++
.............+++++
We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
..+++++
..+++++
gpg: /home/rino/.gnupg/trustdb.gpg: trustdb created
gpg: key B32E99FF marked as ultimately trusted
public and secret key created and signed.
gpg: checking the trustdb
gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model
gpg: depth: 0 valid: 1 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 1u
gpg: next trustdb check due at 2011-02-19
pub 2048R/B32E99FF 2011-02-15 [expires: 2011-02-19]
Key fingerprint = DEDF F9DE D3EF F481 5DC6 4829 A2D2 DE78 B32E 99FF
uid RinoRondan (This is a Test)
sub 2048R/56E6C627 2011-02-15 [expires: 2011-02-19]
rino@servidorB:~$
Si llegamos a tener este error -->
Not enough random bytes available. Please do some other work to give the OS a chance to collect more entropy! (Need 285 more bytes)
Tenemos que instalarnos la tool rng-tools y editar el archivo /etc/default/rng-tools agregandole el device -->HRNGDEVICE=/dev/urandom.
Para luego restartear el servicio --> /etc/init.d/rng-tools start.
Bueno si todo salio bien van a tener una pantalla similar a la de arriba.
Ahora vamos a ver como listamos nuestra llave creada.
rino@servidorB:~$ gpg --list-keys /home/rino/.gnupg/pubring.gpg ----------------------------- pub 2048R/B32E99FF 2011-02-15 [expires: 2011-02-19] uid RinoRondan (This is a Test)sub 2048R/56E6C627 2011-02-15 [expires: 2011-02-19] rino@servidorB:~$
Importar una llave publica al gpg keyring.
rino@servidorB:~$ gpg --export --armor rino@restauradordeleyes.com.ar > rinorondan.asc rino@servidorB:~$ gpg --import rinorondan.asc gpg: key B32E99FF: "RinoRondan (This is a Test)" not changed gpg: Total number processed: 1 gpg: unchanged: 1 rino@servidorB:~$
En este caso la llave publica ya la tengo... pero si tuviera una que me pasaran por mail con el gpg --import file bastaria.
Si quisiera editar una llave ..
rino@servidorB:~$ gpg --edit-key RinoRondan
gpg (GnuPG) 1.4.10; Copyright (C) 2008 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Secret key is available.
pub 2048R/B32E99FF created: 2011-02-15 expires: 2011-02-19 usage: SC
trust: ultimate validity: ultimate
sub 2048R/56E6C627 created: 2011-02-15 expires: 2011-02-19 usage: E
[ultimate] (1). RinoRondan (This is a Test)
gpg> help
quit quit this menu
save save and quit
help show this help
fpr show key fingerprint
list list key and user IDs
uid select user ID N
key select subkey N
check check signatures
sign sign selected user IDs [* see below for related commands]
lsign sign selected user IDs locally
tsign sign selected user IDs with a trust signature
nrsign sign selected user IDs with a non-revocable signature
adduid add a user ID
addphoto add a photo ID
deluid delete selected user IDs
addkey add a subkey
addcardkey add a key to a smartcard
keytocard move a key to a smartcard
bkuptocard move a backup key to a smartcard
delkey delete selected subkeys
addrevoker add a revocation key
delsig delete signatures from the selected user IDs
expire change the expiration date for the key or selected subkeys
primary flag the selected user ID as primary
toggle toggle between the secret and public key listings
pref list preferences (expert)
showpref list preferences (verbose)
setpref set preference list for the selected user IDs
keyserver set the preferred keyserver URL for the selected user IDs
notation set a notation for the selected user IDs
passwd change the passphrase
trust change the ownertrust
revsig revoke signatures on the selected user IDs
revuid revoke selected user IDs
revkey revoke key or selected subkeys
enable enable key
disable disable key
showphoto show selected photo IDs
clean compact unusable user IDs and remove unusable signatures from key
minimize compact unusable user IDs and remove all signatures from key
* The `sign' command may be prefixed with an `l' for local signatures (lsign),
a `t' for trust signatures (tsign), an `nr' for non-revocable signatures
(nrsign), or any combination thereof (ltsign, tnrsign, etc.).
gpg>
Cualquier cambio que hagan les va a pedir la clave para esa llave.
Todas las claves tienen un ID -->
pub 2048R/B32E99FF created: 2011-02-15 expires: 2011-02-19 usage: SC
Lo que esta resaltado en negrita es el ID de su clave gpg.
Exportar las llaves :
Ambas:
rino@servidorB:~$ gpg --export -o gpg_backup_file
Solo la privada:
rino@servidorB:~$ gpg --export-secret-key -a "RinoRondan" -o private.key
Les va a mostrar todo el string con la data de la clave privada.
Importar una clave por el ID
rino@servidorB:~/.gnupg$ gpg --recv-keys EF9AAD20 gpg: requesting key EF9AAD20 from hkp server keys.gnupg.net gpg: key EF9AAD20: public key "G. Matthew Rice" imported gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model gpg: depth: 0 valid: 1 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 1u gpg: next trustdb check due at 2011-02-19 gpg: Total number processed: 1 gpg: imported: 1 rino@servidorB:~/.gnupg$
Ahora firmamos el id que bajamos con la nuestra llave.
rino@servidorB:~/.gnupg$ gpg --edit-key G. Matthew Rice
gpg (GnuPG) 1.4.10; Copyright (C) 2008 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
pub 1024D/EF9AAD20 created: 2004-05-14 expires: never usage: SC
trust: unknown validity: unknown
sub 2048g/EC0B7A34 created: 2004-05-14 expires: never usage: E
[ unknown] (1). G. Matthew Rice
[ unknown] (2) G. Matthew Rice
[ unknown] (3) G. Matthew Rice
[ unknown] (4) G. Matthew Rice
[ unknown] (5) G. Matthew Rice
[ unknown] (6) G. Matthew Rice
Invalid command (try "help")
Invalid command (try "help")
gpg> lsign
Really sign all user IDs? (y/N) y
pub 1024D/EF9AAD20 created: 2004-05-14 expires: never usage: SC
trust: unknown validity: unknown
Primary key fingerprint: BD41 69EA 33A4 B657 3A28 2A80 E006 CBF0 EF9A AD20
G. Matthew Rice
G. Matthew Rice
G. Matthew Rice
G. Matthew Rice
G. Matthew Rice
G. Matthew Rice
Are you sure that you want to sign this key with your
key "RinoRondan (This is a Test) " (B32E99FF)
The signature will be marked as non-exportable.
Really sign? (y/N) y
You need a passphrase to unlock the secret key for
user: "RinoRondan (This is a Test) "
2048-bit RSA key, ID B32E99FF, created 2011-02-15
gpg> tsign
Really sign all user IDs? (y/N) y
Your current signature on "G. Matthew Rice "
is a local signature.
Do you want to promote it to a full exportable signature? (y/N) y
Your current signature on "G. Matthew Rice "
is a local signature.
Do you want to promote it to a full exportable signature? (y/N) y
Your current signature on "G. Matthew Rice "
is a local signature.
Do you want to promote it to a full exportable signature? (y/N) y
Your current signature on "G. Matthew Rice "
is a local signature.
Do you want to promote it to a full exportable signature? (y/N) y
Your current signature on "G. Matthew Rice "
is a local signature.
Do you want to promote it to a full exportable signature? (y/N) y
Your current signature on "G. Matthew Rice "
is a local signature.
Do you want to promote it to a full exportable signature? (y/N) y
pub 1024D/EF9AAD20 created: 2004-05-14 expires: never usage: SC
trust: unknown validity: unknown
Primary key fingerprint: BD41 69EA 33A4 B657 3A28 2A80 E006 CBF0 EF9A AD20
G. Matthew Rice
G. Matthew Rice
G. Matthew Rice
G. Matthew Rice
G. Matthew Rice
G. Matthew Rice
Please decide how far you trust this user to correctly verify other users' keys
(by looking at passports, checking fingerprints from different sources, etc.)
1 = I trust marginally
2 = I trust fully
Your selection? 2
Please enter the depth of this trust signature.
A depth greater than 1 allows the key you are signing to make
trust signatures on your behalf.
Your selection? 1
Please enter a domain to restrict this signature, or enter for none.
Your selection? 1
Are you sure that you want to sign this key with your
key "RinoRondan (This is a Test) " (B32E99FF)
Really sign? (y/N) y
You need a passphrase to unlock the secret key for
user: "RinoRondan (This is a Test) "
2048-bit RSA key, ID B32E99FF, created 2011-02-15
gpg> quit
Save changes? (y/N) y
Ahora listamos:
rino@servidorB:~/.gnupg$ gpg --list-keys gpg: checking the trustdb gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model gpg: depth: 0 valid: 1 signed: 1 trust: 0-, 0q, 0n, 0m, 0f, 1u gpg: depth: 1 valid: 1 signed: 0 trust: 0-, 0q, 0n, 0m, 1f, 0u gpg: next trustdb check due at 2011-02-19 /home/rino/.gnupg/pubring.gpg ----------------------------- pub 2048R/B32E99FF 2011-02-15 [expires: 2011-02-19] uid RinoRondan (This is a Test)sub 2048R/56E6C627 2011-02-15 [expires: 2011-02-19] pub 1024D/EF9AAD20 2004-05-14 uid G. Matthew Rice uid G. Matthew Rice uid G. Matthew Rice uid G. Matthew Rice uid G. Matthew Rice uid G. Matthew Rice sub 2048g/EC0B7A34 2004-05-14 rino@servidorB:~/.gnupg$
Ahora encriptamos con un archivo nuestro para que solo lo pueda abrir una persona.
rino@servidorB:~/.gnupg$ gpg -e -u "RinoRondan" -r "G. Matthew Rice" rino rino@servidorB:~/.gnupg$
Despues cuando Matthew reciba el archivo el lo va a poder desencriptar asi..
gpg -d rino.gpg
Como subir mi ID a un servidor de llaves publicas
gpg --keyserver keys.gnupg.net --recv-key ID
Si quisieramos buscar mas sobre como funciona tendriamos que entender sobre estos archivos:
En el examen de LPI solo nos van a pedir que identifiquemos los archivos que estan en ~/gpg/.
gpg.conf
Nos permite crear los seteos por defectos para GPG, incluyendo nuestro servidor de llaves preferido. En donde este servidor contiene las llaves publicas de los que deseen subirla.
pubring.gpg
Contiene las llaves publicas que importamos.
random_seed
Un archivo de texto que contiene caracteristicas que permitiran a GPG crear numeros aleatorios mas facil y rapidamente.
secring.gpg
Contiene la llave privada que determina nuestra identidad.
trustdb.gpg
La base de datos de confianza, que contiene la información relativa a los valores de la confianza que ha asignado a varias claves públicas. Un usuario puede establecer diferentes niveles de confianza para las claves públicas en su anillo dominante.
Uso de GPG con Gmail
Para poder usar nuestras llaves con gmail vamos a tener que usar el thunderbird y activar el plugin Enigmail o bajarselo con aptitude.
Luego pueden utilizar el wizzar de thunderbird para habilitar la cuenta de gmail y despues configurar su llaves. Acuerdense de antes generar sus llaves con gpg.
Tambien pueden utilizar FreeGPG para firefox en donde van a poder utilizar gpg con gmail.
Aca les dejo un link donde explica --> https://security.ngoinabox.org/es/thunderbird_usarenigmail
Fuente:
http://es.wikipedia.org/wiki/OpenSSH
[2]http://es.wikipedia.org/wiki/Clave_pública
[3]http://ubuntulife.wordpress.com/2007/03/30/exportar-el-display-ejecutar-aplicaciones-x-remotas-en-local/
[4]http://www.gnupg.org/gph/es/manual.html#AEN210
[5]http://codesorcery.net/old/mutt/mutt-gnupg-howto
[6]http://www.thegeekstuff.com/2008/11/3-steps-to-perform-ssh-login-without-password-using-ssh-keygen-ssh-copy-id/
[7]http://docs.fedoraproject.org/en-US/Fedora/13/html/Deployment_Guide/s2-ssh-configuration-keypairs.html
[8]http://www.ucolick.org/~sla/ssh/agenttips.html
[9]https://wiki.archlinux.org/index.php/Using_SSH_Keys
[10]http://fedoraproject.org/wiki/DocsProject/UsingGpg/CreatingKeys
[11]https://security.ngoinabox.org/es/thunderbird_usarenigmail
[12]http://www.dotdeb.org/2010/07/11/dotdeb-packages-are-now-signed/
[13]http://www.itrestauracion.com.ar/?p=26
[14]http://www.e-ghost.deusto.es/docs/articulo.ssh.html
[15]http://crysol.org/es/node/1317
[16]http://www.rossde.com/PGP/index.html
[17]http://es.wikipedia.org/wiki/GNU_Privacy_Guard
[18]http://www.howtoforge.com/helping-the-random-number-generator-to-gain-enough-entropy-with-rng-tools-debian-lenny
[19]http://technologist.pro/systems/encrypt-data-using-gpggnu-privacy-guard

The Preparando LPIC-1 110.3 Asegurando datos mediante cifrado by ITRestauracion, unless otherwise expressly stated, is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License.