martes, julio 12, 2016

WireGuard, una VPN rápida, moderna y (esperemos) segura

Desde su presentación hace unas semanas atrás le estoy siguiendo el hilo a la nueva implementación de túnel VPN denominada WireGuard que, básicamente, y copypasteando el marketing de su sitio web,

WireGuard es una VPN extremadamente sencilla, aunque rápida y moderna que utiliza técnicas de criptografía avanzadas. Apunta a ser más rápida, más simple, más reducida y más útil que IPSec, evitando a la vez los dolores de cabeza [de su implementación]. Además, busca ser considerablemente más performante que OpenVPN...

Los puntos fuertes de este software son:

  • Sencillez y facilidad de uso: Busca ser tan fácil de configurar y desplegar como SSH. Una conexión VPN requiere el intercambio de claves públicas sencillas -tal como el intercambio de claves SSH- y todo lo demás se maneja en forma transparente por el software.
  • Criptográficamente robusto: Utiliza criptografía moderna: Noise protocol framework y los algoritmos Curve25519, ChaCha20, Poly1305 (estos últimos de la mente de D. J. Bernstein), BLAKE2, SipHash24, HKDF, con decisiones conservadoras y razonables, y ha sido revisado por criptógrafos [aunque no sabemos quienes].
  • Mínima superficie de ataque: Fue diseñado teniendo en mente la sencillez y la facilidad de implementación, siendo implementable fácilmente con pocas líneas de código, y fácilmente auditable por vulnerabilidades de seguridad.
  • De alto rendimiento: Utiliza instrucciones criptográficas disponibles en los procesadores modernos y está implementado en el propio núcleo de Linux, con lo que permite armar una red segura manteniendo altas tasas de transferencia. Puede ser usado tanto en smartphones como en routers de backbone.
  • Bien definido y estudiado: WireGuard es el resultado de un extenso proceso académico detallado y extenso, cuyo resultado es un documento de investigación técnica que define claramente el protocolo y las consideraciones que se tomaron en cuenta en cada decisión.

Más allá de la propaganda del sitio web, además de su pequeño tamaño (en líneas de código) y de estar implementado sobre UDP, lo más relevante de esta implementación es que corre enteramente en el kernel, evitando los cambios de contexto de las implementaciones tradicionales de VPN. WireGuard parece haber sido desarrollado inicialmente por una sola persona: Jason A. Donenfeld, y está licenciado como GPLv2. A él agradecemos, entonces, haberse tomado este tremendo trabajo.

Al dia de hoy es posible probarlo en Debian gracias al trabajo de Daniel Kahn Gillmor (dkg), quien se encargó de empaquetarlo muy responsablemente.

En principio se requiere un kernel Linux igual o mayor a 4.1, pero eso se consigue fácilmente desde backports:

echo "deb http://httpredir.debian.org/debian/ jessie-backports main" \
    > /etc/apt/sources.list.d/jessie-backports.list
apt update
apt -t jessie-backports install linux-image-amd64 linux-headers-amd64

Luego de reiniciar con el kernel nuevo, descargar e instalar los paquetes wireguard-dkms y wireguard-tools desde el repositorio experimental. Esto instalará el código fuente del módulo y la aplicación de configuración. La infraestructura de compilación dkms se encarga de compilar el código a un módulo usable.

echo "deb http://httpredir.debian.org/debian/ experimental main" \
    > /etc/apt/sources.list.d/experimental.list
apt update
apt install dkms
apt -t experimental install wireguard-dkms wireguard-tools

En caso de no disponer de una instalación de Debian a mano, hay otras opciones, como también está el último recurso de compilarlo a la vieja usanza.

Finalmente, una vez que está todo listo,

Quick Start Walkthrough

Para todo lo demás, los remito a la documentación en línea, y al paper que detalla el protocolo.

Vale decir que esto aún está en los principios de su desarrollo. No hay una versión estable y su implementación real aún no ha tenido análisis relevantes desde la comunidad de seguridad en redes, pero vale decir que suena prometedor. Desde luego, si están interesados en participar/desarrollarlo/probarlo/documentarlo, el grupo acepta nueva gente.

martes, mayo 17, 2016

No cree una cuenta de usuario "user"

Leyendo Hacker News encuentro que en Windows 8.1, si creás una cuenta de usuario que contenga la cadena de texto user, el proceso taskhost.exe puede llegar a desbocarse y consumir CPU en forma desproporcionada.

¿El motivo? "This is a problem in the component DFPCommon.dl in Windows 8.1." ¿La solución? El título de este post.

Tan claro como eso. Ya lo habíamos hablado tiempo atrás. Debí haberlo imaginado.

viernes, febrero 19, 2016

jueves, octubre 15, 2015

Post instalación Debian GNU/Linux 8 (Jessie)

En abril de este año salió una nueva versión de la rama estable de Debian, y para continuar la secuencia de recomendaciones post-instalación que inició con un post de Tomás referido a Ubuntu, es buen momento de llevar mi humilde sugerencia de paquetes para un escritorio usable a esta nueva versión.

Para repasar, al igual que la vez anterior, este post tiene dos objetivos principales:

  • para el que quiera tener una instalación de debian jessie (estable) usable, vale decir, con algunas aplicaciones más modernas que las que trae por defecto pero tratando de no salir demasiado de los repos oficiales;
  • y para mí, para no perder tiempo haciendo memoria en el caso de tener que reinstalar el sistema.

Pero a diferencia de aquel post para Debian Wheezy, en el cual recomendé instalar como escritorio a GNOME Clásico, en esta oportunidad la recomendación de entorno de escritorio será KDE, pues me ha resultado más completo y usable que las últimas versiones de los demás escritorios. Además, mientras antes se requería un equipo bastante potente para aprovecharlo completamente, a la fecha los equipos con suficiente poder de cómputo y memoria ya están masificados. Por otro lado, según comentan en Slashdot, hoy es el cumpleaños del proyecto KDE así que resulta un momento justo para navegar en la nostalgia y volver a recomendarlo.

Paso 1

Para comenzar, partimos de la instalación base de Debian Jessie. Para que se den una idea, hay que seguir la instalación tradicional y cuando presenta el uso que se dará (escritorio, servidor, etc), desmarcar todas las opciones y continuar normalmente.

Paso 2

Una vez instalado y hecho el primer arranque, luego de iniciar sesión lo que suelo hacer al toque es deshabilitar la opción de instalación de paquetes recomendados, puesto que pocas veces son necesarios y además engordan sobremanera el espacio ocupado por el sistema. Para ello basta con ejecutar la línea siguiente para que las próximas instalaciones eviten instalarlos.

echo "APT::Install-Recommends \"false\";" > \
  /etc/apt/apt.conf.d/90-jessie-powerup-disable-recommends.conf

Paso 3

Luego, sólo si están detrás de un proxy, hay varias formas de configurarlo: puede ser globalmente mediante las variables de entorno http_proxy, https_proxy y ftp_proxy, o bien mediante la configuración de APT para aquellos casos donde dispongan de un servidor de caché como APT-Cacher. Por ejemplo:

PROXY="http://proxy.miorganizacion.com.ar:8080/"
export http_proxy=$PROXY
export https_proxy=$PROXY
export ftp_proxy=$PROXY
echo "Acquire::http::Proxy \"$PROXY\";" > /etc/apt/apt.conf.d/90-jessie-powerup-proxy.conf
echo "Acquire::ftp::Proxy \"$PROXY\";" > /etc/apt/apt.conf.d/90-jessie-powerup-proxy.conf

Paso 4

Verificar que están configurados los repositorios oficiales de la distribución, más el repositorio de backports. Para ello, el archivo /etc/apt/sources.list debería listar, al menos, los siguientes:

deb http://httpredir.debian.org/debian/ jessie main contrib non-free
deb http://security.debian.org/ jessie/updates main contrib non-free
deb http://httpredir.debian.org/debian/ jessie-backports main contrib non-free

Paso 5

Agregar algunos repositorios externos (no oficiales) que contienen software útil, por ejemplo mozilla-debian para la última versión de Firefox, el de Dropbox y el de Google Chrome. Se pueden agregar en un archivo denominado /etc/apt/sources.list.d/repos-externos.list

deb http://mozilla.debian.net/ jessie-backports firefox-release
deb [arch=i386,amd64] http://linux.dropbox.com/debian jessie main
deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main
deb http://repository.spotify.com testing non-free

Paso 6

Clásico: actualizar la lista de paquetes. Utilizaremos apt en vez de apt-get sólo por cuestión de gusto, y para ir probando qué tal funciona esta nueva interfaz de gestión de paquetes.

apt update

Paso 7

Instalar un entorno gráfico y los controladores de la placa de video. Para la interfaz gráfica hay varios metapaquetes que se corresponden a cada entorno de escritorio, los más conservadores son los siguientes: para Gnome, instalando gnome-core alcanza; para KDE, instalen kde-plasma-desktop; para XFCE instalen xfce4; para LXDE instalen lxde; incluso pueden instalar Mate o Cinnamon mediante los paquetes mate-desktop-environment o cinnamon-desktop-environment.

Eventualmente puede ser necesario instalar un driver privativo, por ejemplo para placas GPU AMD/ATI suele ser necesario el paquete fglrx-driver, mientras que para placas GPU nVidia el paquete a instalar es xserver-xorg-video-nvidia. También hay versiones para chipsets más antiguos (aparecen como paquetes con el nombre legacy). Si tienen un chipset Intel, con lo que viene por defecto suele alcanzar. Sobre el entorno gráfico, como comentaba al inicio del artículo, mi recomendación esta vez es utilizar KDE Plasma Desktop.

apt install xorg lightdm lightdm-kde-greeter \
    kde-plasma-desktop kde-l10n-es pinentry-qt4

Superpaso 8

Instalar paquetes desde los repositorios oficiales. Como en la línea anterior, cada paquete está enlazado a su descripción en el sitio de Debian.

Paso 8.1. Controladores y servicios útiles

apt install amd64-microcode dkms fail2ban intel-microcode \
    ntfs-3g ssh uptimed

Paso 8.2. Herramientas útiles de línea de comando

apt install alsa-utils aptitude bash-completion ccze \
    clamav colordiff colortail curl deborphan dialog file \
    flac hexedit highlight htop iotop imagemagick \
    irqbalance jmtpfs less lftp libav-tools markdown mc \
    mlocate nano netcat-openbsd nethogs nmap os-prober \
    p7zip p7zip-full pv pxz qemu-kvm screen sshfs trickle \
    tshark unattended-upgrades unrar unzip vbindiff w3m \
    wget zip

Paso 8.3. Lenguajes de programación, herramientas y documentación

apt install build-essential git git-doc idle ipython \
    pylint python python-doc sqlite3 sqlite3-doc

Paso 8.4. Programas gráficos para fines variados (editores, reproductores, etc)

apt install chromium chromium-l10n desktop-base filezilla \
    fslint gstreamer1.0-libav hardinfo icedove \
    icedove-l10n-es-ar keepassx mpv openbox \
    owncloud-client owncloud-client-l10n sqlitebrowser \
    synaptic vlc wireshark xdg-user-dirs xterm

apt install audex calligra-l10n-es filelight k3b k3b-i18n \
    kde-standard kdegraphics-thumbnailers kdiff3 \
    kio-audiocd kio-mtp kompare krita okteta plasma-nm \
    soundkonverter transmission-qt

Paso 8.5. Iconos y temas de escritorio

apt install dmz-cursor-theme faenza-icon-theme \
    tango-icon-theme

Paso 8.6. Versión más moderna del kernel (4.3 para 64 bits)

apt -t jessie-backports install firmware-linux \
    linux-headers-amd64 linux-image-amd64 linux-doc

Paso 8.7. Versión más moderna de VirtualBox (5.0.16)

apt -t jessie-backports install virtualbox \
    virtualbox-dkms virtualbox-qt

Paso 8.8. Versión más moderna de LibreOffice (5.1.1)

apt -t jessie-backports install libreoffice \
    libreoffice-kde libreoffice-help-es \
    libreoffice-l10n-es libreoffice-style-sifr \
    libreoffice-style-tango fonts-opensymbol

Paso 8.9. Versión más moderna de Firefox (45)

apt -t jessie-backports install firefox firefox-l10n-es-ar

Paso 8.10. Tipografías

apt install fonts-cantarell fonts-crosextra-caladea \
    fonts-crosextra-carlito fonts-dkg-handwriting \
    fonts-humor-sans fonts-droid fonts-font-awesome \
    fonts-liberation fonts-roboto ttf-dejavu \
    ttf-mscorefonts-installer

Paso 9

Instalar paquetes desde repositorios externos:

apt install dropbox google-chrome-stable

Además de estos paquetes, suelo instalar PyCharm, Netbeans y Skype, para programar cómodamente y hacer alguna videoconferencia cuando es necesario, pero aquí la instalación es particular para cada software.

Paso 10

Listo, con eso les queda un sistema operativo de unos 5 GB, a mi juicio, casi perfecto. Todo lo documentado aquí está disponible en un sencillo script que instala KDE y ejecuta estos pasos de un saque. Lo dejo disponible por si les sirve: jessie-powerup.sh

Algunos consejos adicionales:

  • Para tener la tipografía clásica en las terminales Fx, ejecuten dpkg-reconfigure console-setup y en "Tipo de letra para la consola" seleccionen "No cambie la tipografía del arranque".

Vuelvo a recomendar que se den una vuelta por el post de Tomás pues el da también una buena lista de software para instalar, y si me olvido de algo, o ven algo que sobra, abajo están los comentarios...

sábado, octubre 10, 2015

Abandonado

Este es un instrumental que ha quedado grabado en mí desde los tiempos sin memoria. La cadencia, la selección de notas y, particularmente, la selección de silencios.

Tiene cinco o seis minutos? Hágame caso:
baje la luz, ponga el video en pantalla completa, y suba el volumen del equipo de música.

Marooned, en The Division Bell, por Pink Floyd

En un buen equipo de audio, y con el video que lo acompaña, con imágenes de la ISS y de Pripyat, pone la piel de gallina. Para un tema que salió improvisado, es la definición de una obra de arte. Coincidimos, Andrea.

lunes, mayo 11, 2015

Kernels nuevos en Debian Jessie

Vengo siguiendo bastante de cerca la publicación de versiones estables del kernel de Linux. A fines de diagnóstico suelo compilar la última versión disponible e instalarla en varias de las máquinas sobre las que tengo acceso. Como quizás le sirva a más de uno, acá dejo disponible la última versión que compilé en casa.
Todas estas son directamente instalables sobre Debian GNU/Linux 8.0 Jessie de 64 bits sin quilombo de dependencias. Cada directorio contiene los paquetes con la imagen del kernel, los encabezados, el firmware y la configuración utilizada en la compilación.
Si les interesa saber qué hay de nuevo, les dejo un post de Phoronix donde se listan algunas de las mejoras e incorporaciones, y el clásico resumen hecho por la gente de KernelNewbies: Linux 4.8.
A medida que vayan saliendo nuevas versiones iré actualizando este pequeño "repositorio" para mantenerlo al día.