Mostrando entradas con la etiqueta Internet Ubuntu. Mostrar todas las entradas
Mostrando entradas con la etiqueta Internet Ubuntu. Mostrar todas las entradas

lunes, 2 de abril de 2012

SSH sin contraseña y de forma segura usando pareja de claves RSA

Hola a todos de nuevo, hoy voy a explicar de forma muy muy clara como funcionan las claves pública y privada. Ya verán como lo entienden.

Todos sabemos que ssh es un protocolo muy seguro, ya que todo la información que circula por la conexión entre cliente y servidor está encriptada.

Cuando hacemos una conexión a un servidor ssh lo hacemos así:

ssh usuario@direcion.ip.com

El servidor y el cliente ssh negocian el protocolo ssh que se usará (por seguridad debe ser la versión 2)
Y después generan un acuerdo de cifrado para el canal, de manera que ya todo lo que circule por él, esté cifrado.
La conexión continua..

Una vez abierto un canal seguro, el servidor nos pedirá contraseña para acceder y tras introducirla el servidor la comprobará.
Si la clave es correcta obtendremos acceso al servidor ssh.

Aquí se presentan dos inconvenientes.

1.- El password, aunque encriptado, viaja por la red cada vez que nos conectamos y esto puede ser peligroso si alguien estuviese capturando (snifando) datos de nuestra red y fuese capaz de generar fuerza bruta contra nuestros datos para sacar el pass.

2.- Tener que meter una y otra vez la clave cuando iniciamos sesión es 'cansino' y además, si tenemos 20 servidores y los que acceder.... Tenemos que tener 20 claves diferentes, ya que si usamos una sola para todo compromete la seguridad de los 20 pcs si perdemos la clave o alguien nos la roba.

Para todo esto hay una solución, usar un par de claves RSA.




Explicación sobre pareja de claves RSA

¿Que es RSA?
RSA es un sistema de encriptado que usa un algoritmo imposible de solucionar a día de hoy. Se creé que con la llegada de sistemas cuánticos y su rapidez se puedan llegar a solucionar.

¿Por qué una pareja?
Esto mucha gente no lo entiende, y lo voy a explicar muy claro.

Es una pareja de claves porque se crean a pares y de forma que una no sirve sin la otra, una clave es privada y la otra pública.

Clave privada:
Se usa para desencriptar y es la que debe estar solo presente en la máquina cliente y protegerla.

Clave  pública:
Se usa para encriptar y se puede repartir sin miedo a tus amigos.
Esta clave solo encripta y no puede usarse para desencriptar ni lo que se haya encriptado con ella.
Solo la clave privada asociada a ella puede desencriptar lo que se haya encriptado con la clave pública.


¿Y como funciona?
El proceso es el mismo pero con una diferencia...

ssh usuario@direcion.ip.com


El servidor y el cliente ssh negocian el protocolo ssh que se usará (por seguridad debe ser la versión 2)
Y después generan un acuerdo de cifrado para el canal, de manera que ya todo lo que circule por él, esté cifrado.

La conexión continua..
Hasta aquí todo igual, pero ahora comienza la diferencia.....:

El cliente decide usar RSA para identificarse, así que le manda al servidor información sobre su clave pública..

El servidor busca en su base da datos en busca de la clave pública del cliente, cuando la encuentra le manda un desafío, si si, como lo oyes. El servidor manda un paquete llamado (challenge) que contiene un número aleatorio cifrado con la clave pública del cliente.

El cliente recibe el paquete encriptado y usa la clave privada para desencriptar el mensaje, una vez desencriptado se lo devuelve al server... y le dice "¡Eh mira, lo he averiguado, así que soy yo!".

El servidor comprueba que el número devuelto es igual que el que mandó encriptado y por tanto el usuario es el que dice ser, ya que ninguna otra persona puede desencriptar el paquete sin no tiene la clave privada asociada a la pública. Así que se permite la sesión.

Yo creo que explicado así se entiende a la perfección.

¿Os habéis fijado que en ningún momento se mandan claves por la red?
Ahora podrías dar a todos tus amigos tu cláve pública y así poder entrar en sus sistemas sin pedir contraseña ni tener que usar una contraseña para cada sitio.

Como podréis imaginar, si alguien os copia la clave privada de vuestro ordenador, podrá acceder a cualquier sistema en el que estén la clave pública..... que peligro ¿no?
Tranquilos, generaremos una clave RSA que esté encriptada con clave, de manera que si alguien os la quita se quedará con la cara partida porque hace falta una clave para poder usarla... jejeje.



Preparación del Servidor para permitir autenticación por RSA

Accedemos a nuestro servidor:

ssh usuario@servidor.com

Tendremos que meter la clave como siempre.

Una vez dentro tendremos que editar el archivo /etc/ssh/sshd_config

sudo nano /etc/ssh/sshd_config

Buscamos las siguientes líneas y nos aseguramos de que estén así:
PubkeyAuthentication yes
AuthorizedKeysFile      %h/.ssh/authorized_keys

La primara opción permite el uso de clave pública para que un cliente se identifique.
La segunda especifíca donde se guarda la relación de claves públicas autorizadas.

Una vez modificado lo que sea necesario presionamos Ctrl+o para guardar, presionamos "enter" para confirmar y luego Ctrl+x para salir.

Comprobamos que existe la carpeta .ssh dentro del directorio home, el cual debe de contener el archivo authorized_keys

ls -al  ~

Si no existe lo crearemos

mkdir ~/.ssh
touch ~/.ssh/authorized_keys

En ese archivo se guardan las claves públicas de los clientes autorizados.

Necesitamos reiniciar el demonio ssh y normalmente eso no supone una caida del cliente que está conectado a ssh... así que:

sudo service ssh restart

Ahora ya podemos salir del ssh:

exit

Configuración del Cliente para usar RSA
El cliente de la versión actual de ssh está configurado para usar en primera instancia automáticamente una privada RSA para identificarse, así que solo tenemos que crearla.




Creación de parejas de claves

Ahora llega el momento de crear nuestra pareja de claves, es importante comprender que podemos crear la pareja de claves en cualquier pc y llevarlas a donde queramos.... pero en este caso las crearemos en el cliente.

Primero comprobamos que existe la carpeta .ssh dentro del directorio home, el cual es necesario ya que es ahí donde se generarán la pareja de claves.

ls -al  ~

Si no existe lo crearemos

mkdir ~/.ssh

Ahora generamos la pareja de claves RSA

ssh-keygen -t rsa

Nota: ssh-keygen genera por defecto claves RSA pero por si las moscas lo hemos especificado.

Creará una clave de 1028 Bits, muy segura, aunque se pueden crear mayores claves con menor rendimiento... claro está.

Tras ejecutar el comando nos preguntará donde generar la clave, le dejamos la ruta por defecto ~/.ssh/id_rsa

Seguidamente nos pedirá una clave de paso, yo uso la misma que para mi sesión, pero podéis usar cualquier clave que sea segura, que contenga numeros, símbolos y letras en minúscula y mayúscula.

Una vez terminado tendréis una clave privada (id_rsa) y otra pública (ud_rsa.pub) en el directorio .ssh de vuestra carpeta personal.

Ahora moveremos la llave pública al servidor usando scp, que pertenese al paquete de ssh y permite copiar contenido usando ssh de forma segura:

scp ~/.ssh/id_rsa.pub usuario@servidor.com:/tmp/

Y metemos la clave para mandar la llave pública a la carpeta temporal del server.


Añadiendo la clave pública al servidor ssh


Tras copiar la clave pública en el server hay que añadirlo al archivo authorized_keys

Accedemos al servidor ssh:

ssh usuario@servidor.com

Y ejecutamos:
cat /tmp/id_rsa.pub >> ~/.ssh/authorized_keys

Listo, ya podemos salir del server y al entrar no usaremos clave para iniciar sesión, y ojo, sigue leyendo.

exit

Usar ssh-agent para evitar la frase de paso

Si ya has intentado acceder pos ssh para probar la conexión te habrás percatado de que te pide contraseña.... ehhh! jeje para para, no me llames mentirosooooo jejee

Dije que no te pediría clave para iniciar sesión, y de hecho, no lo hace, lo que pasa es que tu clave privada está cifrada ¿Recuerdas que al crearla pusiste una clave para protegerla?

Usaremos ssh-agent, que se instala automáticamente al instalar ssh y que se ejecuta al inicio de cada sesión de manera automática.

Usaremos ssh-add para añadir la clave a ssh-agent de manera que esté vinculada a la sesión y no te pida más la pass para desencriptar la clave privada.... ya se encargará ssh de pedírsela a ssh-agent.

ssh-add ~/.ssh/id_rsa

Eso nos pedirá la frase de paso que usamos para crearla, y la añadirá a la base de datos.

Prueba ahora y verás...

Ya puedes usar tu clave privada sin temor, y compartir la pública para poder acceder a otros servidores o pc's sin tener que memorizar gran cantidad de claves.

Nota: Tras reiniciar o cerrar la sesión actual en tu sistema linux, se te volverá a pedir la clave de paso, pero puedes hacer que no te la vuelva a pedir pinchando en la opción "Desbloquear al iniciar sesión" .... o algo así XD

Bien, para terminar os recomiendo que impidáis el acceso mediante clave al server ssh.

¿Para qué?
Pues para evitar ataque de fuerza bruta y que intenten sacar el pass.

Accedemos a nuestro servidor:

ssh usuario@servidor.com

Ya no tendrémos que meter la clave como siempre, y se accederá por RSA automáticamente. XD

Una vez dentro tendremos que editar nuevamente el archivo /etc/ssh/sshd_config

sudo nano /etc/ssh/sshd_config

Buscamos las siguientes líneas y nos aseguramos de que estén así:
#PasswordAuthentication yes

Y la dejamos así:

PasswordAuthentication no 

Ahora reinicias el servicio ssh
 
sudo service ssh restartListo, ya no os pedirá contraseña normal y exigirá identificación por RSA.
Un saludo y espero que os sirva.

domingo, 25 de marzo de 2012

Configuración de un server para compartir internet


Hay veces que tenemos un ordenador viejo, que no anda con ningún Windows, al menos de los menos viejos, ya  que Windows es un devorador de recursos y exige continuamente hardware nuevo para funcionar.
Linux por el contrario nos brinda la oportunidad de aprovechar prácticamente cualquier pc por muy viejo que sea.

Así que id desempolvando esos viejos pc's.

Veamos, en muchos tutoriales de internet podemos ver fácilmente como compartir internet con otros equipos usando sistemas Linux.

Lo que ocurre es que la mayoría de las veces está orientado a sistemas con interfaz gráfica, y claro está, si estás usando un sistema sin las X, como Ubuntu Server pues te encontrarás que no puedes seguir esos tutos, caso a parte, no siempre sabes que cambios se están haciendo a nivel de configuración...

Bueno, en esta entrada intentaré explicar de forma breve la configuración básica de un sistema para:

-Funcionar como un router. (incluso como repetidor sin necesidad de que el router desde el que viene la señal soporte wds )

-Crear una red local.
-Compartir internet.
-Asignar ips y DNS de forma automática al resto de pcs.

Nota: Hay distribuciones especiales de linux para hacer función de router o proxy, como "Router Linux" o "Freesco" y que pueden andar sin instalación desde un live-CD pero aquí no los usaremos, ya que buscamos usar el sistema que tenemos instalado.

Requisitos:
-Necesitamos al menos 2 interfaz de red, ya que por una nos comunicaremos con el exterior, (internet) y con la otra nos comunicaremos con el resto de pc's.
Pueden ser tarjetas de red Ethernet o Wifi.

-Iptables, que sirve para administrar conexiones y aplicar reglas. (cualquier versión del kernel igual o superior a la 2.6 serviría ya que lo trae por defecto)

-dnsmasq, que nos servirá para asignar ips y dns de forma automática al resto de máquinas que lo soliciten.

Bueno, partiremos de que ya tendremos configurada la conexión a internet en la máquina en la que estamos trabajando de acuerdo a los requisitos de nuestro proveedor.

Encendemos el server y nos logueamos.

Imaginemos que tenemos conectado el servidor a un moden por cable de red, y que tenemos otra tarjeta libre.

Serían Eth0 y Eth1 respectivamente.
Para empezar tenemos que  echar un vistazo al archivo /etc/network/interfaces y editar lo que nos haga falta.

sudo nano /etc/network/interfaces

En este caso el contenido el el siguiente:

auto lo iface lo inet loopback auto eth0 iface eth0 inet dhcp

Esto quiere decir que tenemos configurado la tarjeta de red eth0 para obtener ip por dhcp, pero no hay menciones para eth1, así que lo pondremos nosotros, pero lo haremos de forma manual ya que lo que estamos haciendo es crear una red con esa interfaz.

auto lo iface lo inet loopback auto eth0 iface eth0 inet dhcp auto eth1 iface eth1 inet static address 192.168.0.1 netmask 255.255.255.0 broadcast 192.168.0.255

Presionamos Ctrl+o para guardar (confirmamos presionando enter) y Ctrl+x 
para cerrar.  

La configuración quedaría así:

Ip de la máquina es 192.168.0.1
La máscara de red es  255.255.255.0
Y la dirección de difusión es la 192.168.0.255

Con eso ya hemos configurado nuestra tarjeta para que coja esos valores.
Pero para que sean efectivos ahora mismo hemos de reiniciar el servicio de red.
sudo /etc/init.d/netwoking restart
Ahora hay que activar ip_forward para que nuestro server no ignore los paquetes
que no vayan destinado a si mismo, ya que pueden ser paquetes para otros
equipos y esto haría que esos equipos no obtuviesen respuesta del exterior.

Para activarlo podemos hacerlo de dos formas:

-Provisionalmente (Se pierde al reiniciar):
echo 1 > /proc/sys/net/ipv4/ip_forward
-De manera permanente:
Editando el archivo /etc/sysctl.conf
sudo nano /etc/sysctl.conf
Y descomentando la linea:

#net.ipv4.ip_forward=1

Descomentar es quitar la "#" de manera que quede así:

net.ipv4.ip_forward=1
Presionamos Ctrl+o para guardar (confirmamos presionando enter)
 y Ctrl+x para cerrar.
Bien, ya nos queda menos, ahora vamos a activar NAT para que los equipos que 
estén conectados a nuestro server puedan salir a internet mediante la ip del server.
Lo que hace nat es como una bifurcación de los datos entre redes.
Para esto usaremos iptables con el siguiente comando:

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Vamos a explicarlo:
Iptables es el comando para modificar las reglas.
-t Es para especificar el tipo de tabla a la que van dirigidas las reglas.
nat Es el tipo de tabla.
-A Añade la regla a las ya existentes.
POSTROUTING Modifica los paquetes justo antes de reenviarlos a las máquinas
correspondientes
-o Sirve para especificar hacia que tarjeta van redirigidos los paquetes.
eth0 Es nuestra tarjeta conectada a insternet.
-j Especifica hacia donde se aplican las reglas
MASQUERADE Indica el enmascaramiento ip.
Traducido, que todo lo que entre a nuestro pc por el puerto que no sea eth0 se 
enmascara para reenviarlo a la tarjeta eth0
XD
Esta regla solo se aplica en esta sesión, cuando reiniciemos se desactivará.
(Ya la haremos permanente si nos funciona bien)

Pues desde ya, cualquier pc conectado a nustra tarjeta eth1 tendría acceso a 
internet, pero lo que pasa es que tendríamos que configurar las direciones ip y 
las dns a mano, puesto que no tenemos activo dhcp, peto eso lo podemos arreglar
con el programa dnsmasq

Así que lo instalamos si no lo hemos hecho ya.
sudo apt-get install dnsmasq 

Ahora cambiamos la configuración:
sudo nano /etc/dnsmasq.conf

Buscamos las lineas siguientes y las modificamos para que queden así:

listen-address=192.168.0.1 bind-interfaces dhcp-range=192.168.0.2,192.168.0.254,12h

Unas hay que descomentarlas y otras cambiar los valores.
Presionamos Ctrl+o para guardar (confirmamos presionando enter)
 y Ctrl+x para cerrar.

Reiniciamos el servicio con:
sudo /etc/init.d/dnsmasq restart
Y ahora sí, cualquier pc conectado a ese puerto obtendrá ip, dns y acceso a
internet.
Si queremos conectar muchos pc's podemos colocar un hub, de manera que
multiplico por 4 u 8 los puertos de red y todos los pc's tendrían el mismo trato,
sus propias ips, dns y acceso a internet.
Bueno, si nos funciona podemos dejar fija la reglas existentes de iptables así:

Creamos un script que contenga la regla:

sudo nano firewall.sh

Introducimos los parámetros:

#!/bin/sh #Regla de iptables para canalizar iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE #Activación de ip_fordward echo 1 > /proc/sys/net/ipv4/ip_forward

Nota:Si activaste ip_fordward de manera permanente no es necesario hacerlo de nuevo.

Guardas el archivo y lo cierras.
Le damos permiso de ejecución y exclusividad para root:

sudo chmod 700 firewall.sh
sudo chown root:root firewall.sh

Ahora solo tendríamos que añadir una linea nueva al final del archivo /etc/init.d/rc.local para que ejecute el script al inicio:

sudo nano /etc/init.d/rc.local

Os movéis hasta el final del archivo y poneis la ruta del script que hemos creado.
En mi caso es:

/etc/firewall.sh

Guardáis y cerráis
Pues listo.
Si lo que queréis es compartir internet por wifi podemos hacerlo así:
Volvemos a editar el archivo /etc/network/interfaces

sudo nano /etc/network/interfaces

En este caso el cambio sería el siguiente:

auto lo iface lo inet loopback auto eth0 iface eth0 inet dhcp auto wlan0 iface wlan0 inet static address 192.168.0.1 netmask 255.255.255.0 broadcast 192.168.0.255
wireless_essid "nombre de tu red wifi"
wireless_channel 6
wireless_mode ad hoc
#
# Para usar claves con texto o en hexadecimal descomentar una de las lineas:
#wireless_key s:claveweptexto
wireless_key 0123456789

Presionamos Ctrl+o para guardar (confirmamos presionando enter) y Ctrl+x 
para cerrar.

Reiniciamos la configuración de red:
sudo /etc/init.d/netwoking restart

Con eso el resto de pc's podrán ver un nuevo punto de acceso wifi al que pueden
acceder para tener internet.
El problema es que este tipo de configuración es equipo a equipo, y no se pueden 
conectar más de un pc al mismo tiempo al punto de acceso creado.

Un saludo y espero que os sirva a más de uno.

Una de las fuentes que he visitado:
http://crysol.org/es/router-casero

jueves, 8 de septiembre de 2011

Accede a tu pc desde internet de forma segura con SSH

En este tutorial, voy a explicar como instalar openssh-server para poder conectarnos a nuestro pc desde una LAN o desde internet.

También lo configuraremos de manera que sea más seguro y añadiremos extras de seguridad.


Instalación y configuración de ssh

Para empezar, vamos  a instalar openssh-server

Abrimos una terminal y :

scorpyo@pc:~$ sudo apt-get install openssh-server

Como el programa una vez instalado, se ejecuta, pues lo vamos a parar... para que no esté andando.

scorpyo@pc:~$ sudo service ssh stop

Ahora, vamos a modificar los parámetros de ssh para que sea más seguro.

El archivo que configura ssh está en /etc/ssh/sshd_config, así que en la misma terminal ponemos:

scorpyo@pc:~$ sudo nano /etc/ssh/sshd_config

*Yo he usado nano, pero podeis usar gedit si preferís así:

scorpyo@pc:~$ gksu gedit /etc/ssh/sshd_config

Bien, ahora las opciones que tenemos que cambiar o añadir si no están son estas:

-Cambiar el puerto:
Por defecto, ssh usa el puerto 22, pero a nosotros no nos interesa eso, ya que es algo que cualquiera sabe, nos interesa poner otro puerto, ejemplo.... 4428, entonces tenemos que cambiar el parametro Port.
Quedaría así:
Port 4428

-Cambiar o añadir osuarios permitidos:
Por defecto, si tienes solo un usuario no hace falta, pero si tienes varios usuarios en tu pc, y quieres decidir quien pueden entrar por ssh a su cuenta desde el exterior, puedes ponerlo en el siguiente apartado, será entonces cuando solo se puedan conectar los usuarios que pongas ahí:

AllowUsers scorpyo

-Disminuir el tiempo de cortesía para logearse:
Por defecto suele venir en 120... pero eso es demasiado tiempo, si te sabes la contraseña, por muy larga que sea no tardas más de 8 segundos en colocarla, así que quien tarde más de 30 segundos es que no la sabe... lo pondremos en 30 segundos y mucho es.

LoginGraceTime
30

-No permitir login de root
Es importante, que nadie pueda acceder como root al sistema, y si queremos hacer tareas administrativas siempre podremos usar sudo.

PermitRootLogin no

-Maximos intentos de loguin erroneos hasta cerrar sesión:
Por si alguien está intentando averiguar la contraseña, esto le incordiará bastante, ya que lo que hacemos es cerrar la conexión tras un limites de intentos, en el ejemplo he puesto 2.

MaxAuthTries 2

(esto no evita que vuelca a conectar y reintentar otras claves)

Bueno, con esto ya tenemos lista nuestra configuración de ssh.
Guardamos y cerramos Gedit.
Si estamos editando con nano apretamos Ctrl+o para guardar, le damos enter para confirmar y salimos con Ctrl+x


Otras medidas de seguridad

Ahora, vamos a tomar otras medidas de seguridad.

Hay que tener en cuenta algo primordial, aquí estamos usando la clave del usuario para iniciar sesión por ssh, es decir, si tu clave de usuario es "pepe", vamos por muy mal camino, es una clave super facil.

Así que unos consejos:

-No usar claves que puedan encontrarse en un diccionario, tales como... silla, calabaza, hermano, perro.... ni nombres propios... ni fechas de nacimiento.

-Usad siempre palabras inventadas como PerricopterO14?Alf
Anda, ¡que averigüen eso!... jajaja

Así, que si creéis que buestra contraseña no es segura, cambiadla.

Lo mejor es crear un par de claves RSA o RDA de manera que no haya claves viajando por la conexión, aunque sea SSH se corren riesgos...
Más adelante crearé un tutorial para crear una pareja de claves RSA y dejar de usar el login tradicional y pondré un enlace aquí.


Sigamos...

Todos sabemos que mediante fuerza bruta se pueden sacar claves aunque sean difíciles como la de arriba... puede llevar horas, semanas o meses, pero eso, al que está atacando le da igual.

Pues nosotros vamos a ponérselo más difícil aún... vamos a Banear (impedir conexión) a todos los que hagan cierta cantidad de intentos de acceso con claves erróneas.

Para eso necesitamos instalar fail2ban, así que en la misma terminal ponemos:

scorpyo@pc:~$ sudo apt-get install fail2ban

Ahora lo vamos a configurar para que sea un poco más duro en su trabajo... Va a pegar guantazos y todo... jajaja

Igual que antes vamos a editar con nano o gedit el archivo /etc/fail2ban/jail.conf así que....

scorpyo@pc:~$ sudo nano /etc/fail2ban/jail.conf

Tenemos que ir hasta el apartado [ssh] y veremos los situientes parámetros:

[ssh]

enabled = true
port   = ssh
filter  = sshd
logpath  = /var/log/auth.log
maxretry = 6


Pues bien, hay que hacer cambios... nos aseguraremos de que el valor de enabled está en true ya que si etá en false significa que no controlará las conexiones ssh.

port (puerto a controlar)
El puerto está establecido como el que usa por defecto ssh, que es el 22 pero nosotros lo cambiamos para más seguridad, así que hay que especificarlo, el nuestro era el 4428

port = 4428

maxretry (intentos de conexión antes de banear)
Aquí pondremos el numero de veces que una determinada IP puede intentar hacer login de forma errónea...
Si supera ese límite el programa fail2ban impedirá la conexión de esa ip durante un tiempo establecido por defecto en 10 minutos.

maxretry = 4


Quedaría algo así:

[ssh]

enabled = true
port    = 4428
filter  = sshd
logpath  = /var/log/auth.log
maxretry = 4

Ok, ya tenemos configurado la mayor parte, pero como soy muy malo, a mi, 10 minutos de baneo me parecen muy pocos... ya que como tiene 4 intentos por cada 10 minutos, significa que tiene 20 intentos por hora y 480 por día.. me parece una burrada... así, que vamos a complicarlo..

Buscamos el apartado Defaults que está casi arriba y buscamos la opción bantime.

Esta opción es el tiempo de baneo en segundos... así que en vez de 600 que són 10 minutos, le pondremos algo más, yo le pongo 1680 segundos que son 28 minutos.

bantime 1680

Esto, reduce considerablemente el uso de ataques a nuestro pc.

Ya, creo que hemos terminado con la seguridad, ahora, guardamos todo.
Apretamos Ctrl+o para guardar, le damos enter para confirmar y salimos con Ctrl+x

Bien, ahora relanzamos el programa fail2ban para que tome las nuevas opciones

scorpyo@pc:~$ sudo service fail2ban restart

Y también lanzamos de nuevo ssh que lo paramos anteriormente

scorpyo@pc:~$ sudo service ssh start


Cortafuegos y routers

Ahora tenemos que configurar nuestro cortafuegos para que permita las conexiones entrantes al puerto 4428 que es el que hemos puesto.

Si estámos tras un router tendrá también su propio cortafuegos, así que tendremos que añadir este puerto y redirigirlos hacia nuestro pc... para eso no voy a hacer un tutorial, pero has de tener una ip fija o asegurarte de que el router siempre asigna el puerto 2248 a tu pc mediante mac o como sea.
Hay muchos tutoriales en internet.


Probando nuestra conexión desde el exterior o desde LAN

Pues listo, ya podemos conectarnos desde otro pc al nuestro de la siguiente forma:

Por ejemplo, mi ip (la del exterior, es decir, con la que salimos a internet) es la 83.168.154.124 y mi usuario en la máquina en la que quiero conectarme es scorpyo, pues haré lo siguiente:

scorpyo@pc:~$ ssh -p 4428 scorpyo@83.168.154.124

-p es para especificar el puerto, ya que nosotros lo hemos cambiado, si no lo ponemos  el comando ssh usaría por defecto el 22 y no podríamos conectarnos.

La IP es facil averiguarla si queréis acceder desde la misma red local, por ejemplo tipeando en una terminal:

scorpyo@pc:~$ nm-tool | grep Address
  HW Address:        70:F1:A1:16:BE:3E
    Address:         192.168.0.106
  HW Address:        70:5A:B6:80:72:EA
Ahí la tenéis... la 192.168.0.106 (siempre tengo la misma dentro de la red local)

Si queréis acceder desde internet podéis averiguar vuestra ip de muchas maneras, hay páginas en internet que os la dicen, también sale en el router... etc.

Como la mayoría de las ip's que nos asignan los proveedores de internet, son ips dinámicas, (esto significa que no siempre es la misma) pues eso añade el problema de que tenemos que estar constantemente averiguando la ip del pc, y si estamos fuera de casa, pues es un problemón.

Para eso, os podeis hacer una cuenta en http://dyn.com/dns/ o en http://www.no-ip.com/
Añadís los datos al router (no todos los routers soportan esta opción) y de esta manera, podríais tener un dominio tipo mimakina-remota.dyndns.org o mimakina-remota.no-ip.com y esta siempre os redirigiría hacia la ip actual que tengas.

Así yo me conectaría por ejemplo de esta manera:


scorpyo@pc:~$ ssh -p 4428 scorpyo@la-pcera.dyndns.org

Listo, ahora mismo eso es todo, y es lo mínimo que debéis de hacer para tener un servicio ssh mínimamente seguro.

Lo mejor es no tener activo ssh cuando no se necesite o cerrar el puerto en el cortafuegos.

Una forma de incrementar notablemente la seguridad es creando una pareja de claves RSA:
Tutorial y explicación sobre parejas de claves RSA

domingo, 24 de julio de 2011

Encontrar las mejores DNS para tu conexión con namebench

Hola de nuevo, una de las razones por la que escribo este post es porque a mucha gente le va muy mal internet, y muchas veces se vuelven locos buscando una solución mas enrevesada cuando en realidad es tan solo culpa de las DNS.

¿Que es esto?
DNS = Domain Name System
Pues para que todos nos entendamos cuando llamamos a google (www.google.es) no estamos llamando más que a una dirección IP.
Pero hay de nosotros si tuviésemos que recordar la ip de google actual, la 74.125.39.105.
Si queréis podeis probar, jejeje tan solo meter esos numeros en el navegador y veréis como se carga la página de google.

Pues bien, para que no tengamos que recordar esos números para cada dirección existen los DNS que no son otra cosa que unos servidores a los que solicitamos las direcciones WEB, es decir, funcionan como un filtro para localizar las las IP's del dominio al que estamos llamando y nos la reporta.

Si queréis  datos más técnicos tenéis la wikipedia: http://es.wikipedia.org/wiki/Domain_Name_System

Pues bién, el problema es que según a que DNS estemos pidiendo la resolución de las web tardaremos más o menos.
Esto se debe a muchos factores, algunos son:

-Lejanía respecto a nuestro pc (si, la lejanía importa, cuanto más lejos, mas puntos tiene que atravesar nuestra petición y por lo tanto, más tardará en llegarnos una respuesta)

-Saturación del servidor DNS.

Pues bien, el problema es, ¿como cambio mis dns? y, ¿Que DNS elijo?

Voy a explicaros como elejir las mejores DNS para vuestra conexión y como cambiar las DNS en ubuntu.

Primero instalamos el programa que vamos a usar, se llama namebench así que...

scorpyo@pc:~$ sudo apt-get install namebench

Una vez instalado nos encontramos con un problema que nadie comenta, y es que sí, que el programa buscara DNS y tal, pero las que busca son extranjeras, no nos valen a los españoles o argentinos.

Solución:
Vamos a añadir una lista de DNS de España (tambien dejo una lista para los argentinos, que sé que me siguen)

Lista para España:

----------------------Copia el texto--------------------------
# DNS de España
[regional]
217.116.0.176=ns1.acens.net
217.116.0.177=ns2.acens.net
212.36.64.16=dns1.adam.es
212.36.64.17=dns2.adam.es
195.5.64.2=ns1.landsraad.net
195.5.64.6=ns2.landsraad.net
217.76.128.131=dns7.servidoresdns.net
217.76.128.4=atlante.servidoresdns.net
217.76.129.131=dns8.servidoresdns.net
217.76.129.4=prometeo.servidoresdns.net
62.81.0.1=mayor.red.retevision.es
62.81.0.35=35-0-81-62.libre.auna.net
62.81.0.36=36-0-81-62.libre.auna.net
62.81.16.131=131-16-81-62.libre.auna.net
62.81.16.132=132-16-81-62.libre.auna.net
62.81.31.250=dns.iddeo.es
212.145.4.97=ns1.comunitel.net
212.145.4.98=ns2.comunitel.net
193.43.232.4=dns1.conexionfutura.com
213.139.0.51=ns0.es.easynet.net
213.139.0.52=ns1.es.easynet.net
212.55.8.132=dns.euskaltel.es
212.55.8.133=dns2.euskaltel.es
217.11.108.234=dns.bcn.iberbanda.es
217.11.96.234=dns.mad.iberbanda.es
193.127.102.104=ns2.presenzia.net
193.127.102.45=ns1.presenzia.net
213.172.33.34=ns1.neo.es
213.172.33.35=ns2.neo.es
62.14.2.1=dns1.inversas.jazztel.es
62.14.4.64=dnscache1.jazzvisp.com
62.14.4.65=dnscache2.jazzvisp.com
62.14.63.145=[Unknown]
62.42.230.135=dns01.ono.com
62.42.230.136=newsf01.ono.com
62.42.230.24=resolv.ono.com
62.42.63.51=dns03.ono.com
62.42.63.52=[Unknown]
213.195.64.129=dns1.ibercom.com
213.195.79.129=dns2.ibercom.com
212.21.224.5=sn1.retena.es
212.21.224.6=sn2.retena.es
212.21.224.3=sn1.reterioja.es
212.21.224.4=sn2.reterioja.es
212.51.33.106=ns-cor.net.mundo-r.com
212.51.33.73=ns.mundo-r.com
212.4.96.21=ns2.grupalia.com
212.4.96.22=ns1.grupalia.com
130.244.127.161=dns1.swip.net
130.244.127.169=dns2.swip.net
212.89.0.31=dns.telecable.es
194.179.1.100=minerva.ttd.net
194.179.1.101=artemis.ttd.net
194.224.52.36=ns1.telefonica-data.com
194.224.52.37=ns2.telefonica-data.com
194.224.52.4=esifw1.tsai.es
194.224.52.6=esifw2.tsai.es
213.0.184.68=minerva.ttd.net
213.0.184.69=artemis.ttd.net
80.58.0.33=33.Red-80-58-0.pooles.rima-tde.net
80.58.0.97=97.Red-80-58-0.pooles.rima-tde.net
80.58.32.33=33.Red-80-58-32.pooles.rima-tde.net
80.58.32.97=97.Red-80-58-32.pooles.rima-tde.net
195.235.113.3=dns.terra.es
195.235.96.90=tpdns2.terra.es
213.4.132.1=dns1.terra.es
213.4.141.1=dns2.terra.es
212.166.64.1=dns1.tiscali.es
212.166.64.2=dns2.tiscali.es
62.37.225.56=dns.comtenidos.com
62.37.225.57=dns2.comtenidos.com
62.37.225.58=pdns03pub.uni2.es
62.37.228.20=m2cachedns.uni2.es
62.37.228.22=m2cachedns2.uni2.es
62.37.228.22=m2cachedns2.uni2.es
62.37.236.200=dns2.wanadoo.es
62.37.237.140=dns1.wanadoo.es
62.151.20.6=ns2.bs-ya.com
62.151.20.7=ns.bs-ya.com
62.151.2.65=dns.yaonline.es
62.151.2.8=dns.ya.com
62.151.8.100=dns2.ya.com
-----------Fin------------

Lista para Argentina (los que he encontrado):

----------------------Copia el texto--------------------------
# DNS para Argentina[regional] 200.45.191.35=ARNET
200.45.191.40=ARNET
200.45.0.115=ARNET
200.45.0.116=ARNET
200.42.0.108=Ciudad_INTERNET
200.42.0.109=Ciudad_INTERNET
200.49.156.3=FIBERTEL
200.49.159.69=FIBERTEL
200.49.156.8=FIBERTEL
200.49.156.7=FIBERTEL
200.51.212.7=SPEEDY
200.51.211.7=SPEEDY
200.69.193.1=IPLAN
200.69.193.2=IPLAN

-----------Fin------------

Ahora hay que añadir estos DNS en el archivo namebench.cfg que se encuentra en /etc/namebench/namebenc.cfg

En la terminal escribimos:
scorpyo@pc:~$ sudo gedit /etc/namebench/namebench.cfg


Se nos abrirá el archivo pertinente y lo que tenemos que hacer es añadir justo después de que termine la primer lista de DNS la nuestra (podemos borrar la antigua, yo la borré pero guardé una copia)

Queda así para el caso de España:
---------------------------- texto no completo -----------------------------
# How many servers should we include in our benchmark test
num_servers=11

# Always include at least one of each anycast service in the benchmarks.
[global]
8.8.8.8=Google Public DNS
8.8.4.4=Google Public DNS-2
208.67.220.220=OpenDNS
208.67.222.222=OpenDNS-2
156.154.70.1=UltraDNS
156.154.71.1=UltraDNS-2
216.146.35.35=DynGuide
216.146.36.36=DynGuide-2
2001_470_20__2=Hurricane Electric IPv6

# DNS de España
217.116.0.176=ns1.acens.net
217.116.0.177=ns2.acens.net
212.36.64.16=dns1.adam.es
212.36.64.17=dns2.adam.es
195.5.64.2=ns1.landsraad.net
195.5.64.6=ns2.landsraad.net
217.76.128.131=dns7.servidoresdns.net
217.76.128.4=atlante.servidoresdns.net
217.76.129.131=dns8.servidoresdns.net
217.76.129.4=prometeo.servidoresdns.net
62.81.0.1=mayor.red.retevision.es
62.81.0.35=35-0-81-62.libre.auna.net
62.81.0.36=36-0-81-62.libre.auna.net
62.81.16.131=131-16-81-62.libre.auna.net
62.81.16.132=132-16-81-62.libre.auna.net
62.81.31.250=dns.iddeo.es
212.145.4.97=ns1.comunitel.net
212.145.4.98=ns2.comunitel.net
193.43.232.4=dns1.conexionfutura.com
213.139.0.51=ns0.es.easynet.net
213.139.0.52=ns1.es.easynet.net
212.55.8.132=dns.euskaltel.es
212.55.8.133=dns2.euskaltel.es
217.11.108.234=dns.bcn.iberbanda.es
217.11.96.234=dns.mad.iberbanda.es
193.127.102.104=ns2.presenzia.net
193.127.102.45=ns1.presenzia.net
213.172.33.34=ns1.neo.es
213.172.33.35=ns2.neo.es
62.14.2.1=dns1.inversas.jazztel.es
62.14.4.64=dnscache1.jazzvisp.com
62.14.4.65=dnscache2.jazzvisp.com
62.14.63.145=[Unknown]
62.42.230.135=dns01.ono.com
62.42.230.136=newsf01.ono.com
62.42.230.24=resolv.ono.com
62.42.63.51=dns03.ono.com
62.42.63.52=[Unknown]
213.195.64.129=dns1.ibercom.com
213.195.79.129=dns2.ibercom.com
212.21.224.5=sn1.retena.es
212.21.224.6=sn2.retena.es
212.21.224.3=sn1.reterioja.es
212.21.224.4=sn2.reterioja.es
212.51.33.106=ns-cor.net.mundo-r.com
212.51.33.73=ns.mundo-r.com
212.4.96.21=ns2.grupalia.com
212.4.96.22=ns1.grupalia.com
130.244.127.161=dns1.swip.net
130.244.127.169=dns2.swip.net
212.89.0.31=dns.telecable.es
194.179.1.100=minerva.ttd.net
194.179.1.101=artemis.ttd.net
194.224.52.36=ns1.telefonica-data.com
194.224.52.37=ns2.telefonica-data.com
194.224.52.4=esifw1.tsai.es
194.224.52.6=esifw2.tsai.es
213.0.184.68=minerva.ttd.net
213.0.184.69=artemis.ttd.net
80.58.0.33=33.Red-80-58-0.pooles.rima-tde.net
80.58.0.97=97.Red-80-58-0.pooles.rima-tde.net
80.58.32.33=33.Red-80-58-32.pooles.rima-tde.net
80.58.32.97=97.Red-80-58-32.pooles.rima-tde.net
195.235.113.3=dns.terra.es
195.235.96.90=tpdns2.terra.es
213.4.132.1=dns1.terra.es
213.4.141.1=dns2.terra.es
212.166.64.1=dns1.tiscali.es
212.166.64.2=dns2.tiscali.es
62.37.225.56=dns.comtenidos.com
62.37.225.57=dns2.comtenidos.com
62.37.225.58=pdns03pub.uni2.es
62.37.228.20=m2cachedns.uni2.es
62.37.228.22=m2cachedns2.uni2.es
62.37.228.22=m2cachedns2.uni2.es
62.37.236.200=dns2.wanadoo.es
62.37.237.140=dns1.wanadoo.es
62.151.20.6=ns2.bs-ya.com
62.151.20.7=ns.bs-ya.com
62.151.2.65=dns.yaonline.es
62.151.2.8=dns.ya.com
62.151.8.100=dns2.ya.com
---------------- el texto continua .......------------

Guardamos el archivo y listo.


Ahora sí, escribimos en una terminal:

scorpyo@pc:~$ namebench

Ahora se abrirá una ventana:


Nos aseguramos de que está pinchada las dos primeras opciónes.

Ahora tan solo dadle a "Start Benchmark"
Esto tardará un buen rato, dependiendo de la cantidad de DNS que hayamos añadido.
En la ventana de la terminal veréis el proceso...



Si os saliese un error de que el router redirige los datos y demás tendréis que revisar la configuración del router, (Yo pasé de complicarme y me conecté directo sin pasar por el router, activando el cortafuegos).

Cuando todo termine se os abrirá una ventana del navegador con las estadísticas, y os saldrá el mejor DNS encontrado y la mejora con respecto al que usas actualmente:




Ahora solo queda añadir esos valores a nuestra conexión.
Podemos hacerlo al router, para que este nos lo añada a todos los equipos automáticamente.
Pero ahora mismo explicaré como hacerlo en nuestro Ubuntu, haciendo que ignore las direcciones DNS que nos reporta el router y usando las nuestras propias.
En mi resultado, el programa me aconseja estos DNS:

Primary: 80.58.0.33
Secundary: 194.179.1.100
Tertiary: 217.11.96.234

Para añadirlos pinchamos con el botón derecho sobre el icono de conexión que tenemos en el panel superior (yo lo tengo en el inferior) elegimos "Editar las conexiones" y seleccionamos nuestra conexión, en mi caso selecciono la pestaña inalámbrica y selecciono mi conexión, le doy a editar y nos vamos a la pestaña "Ajustes de IPv4" en método elegimos "Solo direcciones automáticas (DHCP)"
Y ahora, en la parte inferior añadimos los servidore DNS en el orden en el que nos mostró el programa y separados por ","
Servidores DNS: 80.58.0.33,194.179.1.100,217.11.96.234

Aplicamos y listo.
Ahora solo tenemos que desconectarnos y volvernos a conectar y de esta manera estaremos usando los DNS nuevos.

Y ahora os dejo un vídeo con el proceso, el audio no es muy bueno, pero espero que lo entendais:

Pincha en el vídeo para ir a youtube y verlo en grande





Un saludo.