Cifrados WiFi: Protegiendo nuestra red

En este post vamos a conocer los tipos de cifrados para nuestra red WiFi y explicar conceptos básicos para evitar que "el vecino" nos "robe" el internet.

¿Por qué deberíamos proteger nuestra red?

Bien, quizá os de igual por un motivo u otro que una tercera persona acceda a vuestra red ya que puede que para vosotros no sea una necesidad tener un buen ancho de banda o simplemente no os importa. Bien, perfecto, pero... ¿Qué puede hacer un atacante una vez que ha entrado en vuestra red?
En primer lugar podría ver qué equipos hay en tu red y explotar vulnerabilidades accediento a vuestros datos. Si tenéis cámaras IP podría acceder a ellas, si vuestra contraseña del router es la que venía por defecto podría modificar los parámetros de vuestro router e incluso dejaros sin internet (aunque tendría solución). Tambíen podría "esnifar" vuestros datos y obtener vuestras contraseñas. Por tanto, ¿Salimos ganando con un poco de protección, no?

Los cifrados actuales

WEP

WEP, acrónimo de Wired Equivalent Privacy, fue uno de los primeros cifrados WiFi (sobre el 2000). Hoy por hoy se conocen las vulnerabilidades de este sistema y en apenas unos minutos se puede obtener la contraseña del router "víctima". Por tanto bajo ningún concepto lo uséis, ya que es como si no tuviéseis protección.

WPA

WPA o "Wi-Fi Protected Access" surgió para corregir las limitaciones del WEP. Introdujo mejoras de seguridad como el TKIP (Temporal Key Integrity Protocol).
WPA implementa el sistema PSK o de clave compartida. Existe una versión "personal" y otra de empresa.

WPA2

Es el estándar más moderno para proteger redes inalámbricas y el que recomienda la Wi-Fi Alliance. Al igual que el WPA existe una versión personal (WPA2-Personal) y empresarial (WPA2-Enterprise). Este sistema es compatible con WPA (pero no con WEP), por tanto no vas a tener ningún problema con los dispositivos que soporten el anterior.

¿TKIP o AES?

Sin duda elegiríamos el cifrado AES ya que en el TKIP se han descubierto algunas vulnerabilidades. De todas formas aumentando la seguridad a WPA/WPA2 nadie (en principio) va a querer conectarse a nuestra red. El único inconveniente es que algunos dispositivos pueden no soportar el cifrado AES. Por tanto informaros pero en general los smartphones y ordenadores deben de funcionaros correctamente.

Eligiendo una contraseña fuerte

Mi recomendación es que la contraseña sea de unos 15 carácteres, que contenga tanto números como mayúsculas, minúsculas y caracteres especiales (@#~$%&...). Además deberíais no usar palabras tipo "1234", "contraseña", "movistar", ni nada relacionado con vosotros.
Otro factor importante es cambiar el nombre de la red para que no sepan de qué compañía sois.
Con esto estamos evitando los ataques por fuerza bruta o por diccionario.

Espero que os haya sido útil. En próximas entregas seguiremos viendo más factores "de riesgo".

GIF Blocker: una extensión realmente útil


No sé si os habrá pasado en Twitter (por ejemplo) o navegando en otras webs donde abundan los GIFs animados. Es una locura cuando aparecen cientos de ellos reproduciéndose todos a la vez y no podéis pararlos.
Si estáis hartos de que esto ocurra tenéis la extensión GIF Blocker (enlace) que nos permitirá bloquearlos a todos.
Otra extensión similar está disponible para los usuarios de Mozilla Firefox (enlace).

Con esto evitaremos esas molestas páginas webs en las que apenas se puede navegar.
¡Saludos!

Programando en C++: Tipos de datos (primitivos)

Los tipos de datos primitivos son aquellos que están definidos dentro del lenguaje. De todas formas vamos a ver los más usados, si queréis más información (enlace).

El problema en C/C++ es que el tamaño de las variables depende únicamente del compilador. Así si trabajamos en un ordenador de 64 bits: short <= int <= long <= long long <= 64.
Por tanto podemos usar el operador sizeof( tipo_dato ) para saber el tamaño. De todas formas vamos a ver los tamaños orientativos:

Tipos de datos numéricos enteros

  • short : 2 bytes (16 bits)
  • int : 4 bytes (32 bits)
  • long : 4 bytes (32 bits)
  • long long : 8 bytes (64 bits)
  • char : 1 bytes (8 bits)
El dato tipo char almacena caracteres (según el tipo de codificación) como números. Aquí (enlace) tenéis una lista de los valores.

Tipos de datos numéricos reales

  • float : 4 bytes (32 bits)
  • double : 8 bytes (64 bits)
Estos datos nos permiten almacenar números muy grandes, pero nos ofrecen poca precisión (de aproximadamente unos 15 dígitos). Más información del sistema 'coma flotante' (enlace).

Tipo de datos lógico

El dato bool puede ser true ( != 0 ) o false ( 0 ). Tiene 1 byte.

Sigend / Unsigned

Básicamente nos permiten almacenar más numeros pero sin signo. Por ejemplo, un int normal se considera 'signed', por tanto su rango estaría en el intervalo (suponiendo que es de 32 bits) [-2^16, 2^16-1]. El menos uno se debe a que incluimos el 0 en alguno de ellos.
En cambio un unsigned int iría desde el 0 hasta 2^32.

Comentad cualquier problema, si os ha sido de ayuda o no y lo que queráis tratar en la próxima entrega.
¡Saludos!

Cómo conectarse a un servidor FTP con FileZilla

Los servidores FTP son muy útiles para enviar y transmitir arcvhivos entre ordenadores. De hecho es el protocolo que se usar para subir archivos a un hosting web.
Para conectarnos podemos utilizar clientes con interfaz gráfica como FileZilla (mi favorito).
Para instalarlo en Ubuntu abrimos un terminal y ejecutamos:
sudo add-apt-repository ppa:n-muench/programs-ppa
sudo apt-get update
sudo apt-get install filezilla
Ahora lo abrimos y esta es la interfaz:
Para conectarnos podemos usar la conexión rápida introduciendo servidor (dirección IP), usuario, contraseña y puerto (por defecto es el 20/21).

Usando el terminal: FTP

El comando ftp nos va a permitir conectarnos a un servidor y navegar por los directorios así como descargarnos o subir archivos.
ftp
Ahora nos pedirá nombre de usuario y contraseña. Una vez dentro estos son algunos comandos que podemos usar:
ls
Para ver los archivos y directorios.
cd /directorio
Para entrar en un directorio y:
cd ..
Para subir.
get archivo
Nos descargamos el archivo indicado.
put archivo
Para subir el archivo al servidor.
d :D Espero que os haya sido útil. Si os gusta o necesitáis algo comentad :D

Ubuntu: montar un servidor FTP y compartir archivos

En este post vamos a aprender a montar un servidor FTP en Ubuntu para compartir archivos en red local o acceder a ellos desde fuera de la red.

Instalación

Abrimos un terminal y ejecutamos:
sudo apt-get install vsftpd
Así instalaremos el servidor desde los repositorios de Ubuntu. Para acceder al servidor utilizaremos el nombre de un usuario del sistema (ordenador) y su respectiva contraseña.

Configuración

Abrimos el archivo de configuración con nuestro editor de textos preferido, en mi caso usaré gedit:
sudo gedit /etc/vsftpd.conf
Aquí os muestro mi archivo de configuración, si falta algo aquí lo tenéis explicado en inglés en vuestro archivo.
# Iniciar el servidor junto con el sistema.
listen=YES
# Permitir entrar ausuarios anónimos.
anonymous_enable=NO
#
# Entrar desde el ordenador donde está alojado el servidor.
local_enable=YES
#
# Permiso de escritura.
write_enable=NO
# Log de la actividad del cliente.
dirmessage_enable=YES
#
#Hora del servidor.
use_localtime=YES
# Log de las descargas/subidasde archivos.
xferlog_enable=YES
# Puerto de escucha FTP, por defecto es el 20.
connect_from_port_20=YES
# Mensaje de entrada del servidor
ftpd_banner=Servidor FTP de Alberto
# Este nos permite restringir el acceso a los usuarios a su propio /home (NO) o a todo el disco (YES)
chroot_local_user=NO

secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/private/vsftpd.pem

Si queremos que los usuarios accedan únicamente a su carpeta /home pero que existan usuarios 'root' con acceso a todo el sistema modificaremos esto:
# You may specify an explicit list of local users to chroot() to their home
# directory. If chroot_local_user is YES, then this list becomes a list of
# users to NOT chroot().
chroot_local_user=YES
chroot_list_enable=YES
# (default follows)
chroot_list_file=/etc/vsftpd.chroot_list
Ahora creamo el archivo que contendrá la lista de usuarios 'root':
sudo gedit /etc/vsftpd.chroot_list
Escribimos el nombre de los usuarios que serán root. Guardamos y reiniciamos el servidor:
sudo /etc/init.d/vsftpd restart 
Para detener el servicio:
sudo /etc/init.d/vsftpd stop
Para iniciarlo:
sudo /etc/init.d/vsftpd start

Ubuntu: cómo gestionar usuarios

Modo gráfico

Para getionarlos utilizaremos la aplicación 'gnome-system-tools' que instalaremos desde los repositorios:
sudo apt-get intall gnome-system-tools
Esta herramienta nos permite gestionar tanto usuarios como grupos de forma sencilla. Para abrirla buscamos 'Usuarios y grupos' Puede ser que prefiramos hacerlo desde la terminal así que vamos a aprender algunos comandos básicos.

Utilizando la terminal

Usuarios

Añadir un usuario:
sudo adduser nombre_usuario
Añadir un usuario nuevo y ponerlo en un grupo (principal):
sudo adduser --ingroup nombre_grupo nombre_usuario
Añadir un usuario (nuevo o existente) y ponerlo en un grupo:
sudo adduser nobre_usuario nombre_grupo
Cambiar el grupo principal de un usurio:
usermod -g nombre_grupo nombre_usuario
Cambia el nombre de usuario:
usermod -l nuevo_nombre nombre_usuario
Eliminar un usuario:
sudo userdel nombre_usuario
Eliminar usuario y borrar su carpeta personal:
sudo userdel -r nombre_usuario

Grupos

Añadir grupo:
sudo addgroup nombre_grupo
Cambiar el nombre del grupo:
sudo groupmod -n nuevo_nombre nombre_grupo
Eliminar un grupo:
sudo groupdel nombre_grupo
Hasta aquí un tutorial básico de usuarios y grupos. Espero que os sea útil y si queréis algo comentad! :D

Ubuntu: comandos tail y head

Los comandos tail y head son muy interesantes ya que nos permiten monitorizar la parte inferior (tail o cola) y la superior (head o cabeza) de un documento.
Los dos se utilizan de la misma forma así que sólo explicare uno de ellos.
Mostar las últimas 10 filas:
tail -10 archivo.txt
Además podemos ver el archivo en tiempo real con la opción -f. Esto es muy útil para controlar archivos .log.
tail -10 -f archivo.txt
Si queremos saber cuantas líneas tiene el archivo:
wc -l test.txt
Y si queremos filtar el resultado para que sólo devuelva las líneas:
wc -l test.txt | awk '{print $1}'
Si queréis leer más documentación podéis utilizar el comando man.
man tail
man awk
man head
man wc