Publi

  • Conectividad de instancias en AWS. Instancias NAT y puertas de enlace

    Instancias NAT en AWS
    Uno de los puntos fuertes de Amazon Web Services es que podemos configurar la arquitectura de red a nuestro gusto entre instancias EC2, o incluso entre varios servicios que tengamos contratados. La clave de esto, es que nos permite conectar servicios entre ellos de forma privada. Porque hay veces que nos interesa que un servicio esté conectado a Internet y todo el mundo pueda acceder a él, pero otras veces queremos que sea un servicio oculto al que sólo algunas personas puedan acceder.… Leer artículo completo

  • Lanzando servidores TCP/IP en puertos libres aleatorios haciendo bind al puerto 0

    Servidores TCP en el puerto 0
    ¿Cómo? ¡Que los puertos TCP empiezan en el 1! Aunque algo sospechaba, porque en informática, el cero siempre ha valido para algo. Por eso se dice que los humanos empiezan a contar desde el uno y los informáticos desde el cero. Con esta cara me quedé cuando vi que puedes lanzar un servidor y que éste escuche en el puerto 0. Pero si el 0 no es un puerto válido, ¿para qué vale?… Leer artículo completo

  • Haciendo SSH a través de SSH. Rápido y fácil con ProxyCommand.

    SSH a través de SSH
    Como vemos en las películas de hackers. ¡Alguien ha conectado con el servidor y no podemos averiguar su IP porque ha estado rebotando a través de varios servidores! Bueno, yo me quejaría un poco de la velocidad de la conexión entre mi ordenador y el ordenador destino cuando paso por dos servidores intermedios. Pero puede ser un buen ejercicio. A la vez que útil cuando queremos ocultar el acceso a nuestro servidor o tenemos que acceder a un ordenador que está en una red privada.… Leer artículo completo

  • ¿Cómo funcionan los WebSockets? Comunicación bidireccional en tiempo real con el navegador web

    photo-1434396505260-9ec0d6491795

    Internet poco a poco va haciéndose más y más grande. A medida que crecen sus usuarios y dispositivos conectados lo hacen las necesidades de los mismos, y de los servicios que ofrece. Hoy vamos a meternos con los WebSockets. Este sistema se utiliza para hacer una comunicación bidireccional y persistente entre un cliente y un servidor web. Pero, ¿para qué queremos esto?

    Un poco de background

    Para realizar una comunicación entre un cliente web (navegador) y un servidor web (cualquier programa que sea capaz de enviar información coherente a un navegador) se utiliza el protocolo HTTP (por debajo utiliza TCP/IP y muchas más cosas, pero no profundizaremos tanto).… Leer artículo completo

  • Crea tus propias webs dinámicas en C++ de forma fácil y usando plantillas para no compilar a cada cambio

    Screenshot 12-08-2016-020848
    Esto forma parte de un pequeño proyecto que mantengo desde hace algo más de un año. El objetivo es crear un sistema con el que servir webs desde C++, que sea más o menos fácil de mantener y generar, flexible, que soporte enrutadores, plantillas, hosts virtuales con el fin de poder utilizarlo para diferentes tipos de aplicaciones a modo de panel de control web.

    Sobre todo está pensado para aplicaciones internas y no para desarrollos web públicos, por temas de seguridad y rendimiento cuando la carga aumenta considerablemente, aunque sí que podría ser utilizado sin problemas en segundo plano por nuestras aplicaciones web por eso de que en ciertas operaciones, un programa hecho en C++ rendirá mucho mejor que cualquier Javascript, Java, PHP, etc.… Leer artículo completo

  • Consejos para endurecer un servidor SSH y hacerlo más seguro

    openssh
    Hoy toca hablar de OpenSSH, y es que la semana pasada se descubrió una vulnerabilidad grave que podría comprometer las claves privadas de los usuarios que se conectan a un servidor. Y como son claves privadas, nadie debería conocerlas, sólo nosotros. Así que, hoy es un buen día para compartir algunas medidas que podemos tomar para endurecer nuestros servidores y hacer nuestro SSH más seguro.

    Actualizado el 22/11/2016 con técnicas avanzadas para detectar y mitigar vulnerabilidades en algoritmos de intercambio de claves, autentificación y cifrado.Leer artículo completo

  • Cómo especificar puerto y clave privada para SSH desde rsync

    reducida

    Si trabajamos a menudo con rsync para copiar archivos entre ordenadores, estaremos acostumbrados a una sintaxis parecida a esta:

    $ rsync -avh origen usuario@servidor:destino

    En realidad, para transmitir los archivos estaremos utilizando una conexión segura a través de ssh. Pero claro, en ocasiones, sería necesario utilizar algún argumento especial para ssh. En este ejemplo, imaginemos que queremos conectar al servidor por un puerto diferente del 22.

    Podemos hacerlo así:

    $ rsync -avh -e ‘ssh -p1234’ origen usuario@servidor:destino

    y si accedemos por par de claves pública-privada, en el caso de que queramos especificar un archivo de clave privada específico para esta conexión (a mí me ha sucedido que he necesitado utilizar rsync como root para poder acceder a algunos archivos y las claves las tenía en el usuario actual), lo podemos hacer así:

    $ rsync -avh -e ‘ssh -i archivo_identidad’ origen usuario@servidor:destino

    Ahora, un ejemplo completo y concreto de todo, en el que queremos acceder a nuestro servidor SSH por el puerto 28, además, el archivo de identidad o clave privada es id_rsa_webserver dentro del directorio .ssh de nuestro usuario (muy útil si ejecutamos rsync como root) luego el origen serían todos los archivos que encontramos en www/ y los copiaremos en un directorio remoto de nuestro servidor (tenemos que tener permiso para escribir ahí)

    $ rsync -avh -e ‘ssh -p28 -i /home/gaspar/.ssh/id_rsa_webserver’ www/* gaspar@miservidorweb.com:/home/web/externo/htdocs/

    Configuración local de ssh

    Otra posibilidad sería crear un archivo de configuración de ssh en nuestro ordenador, en el que podamos especificar los hosts a los que conectamos, el usuario que queremos utilizar, el archivo de identidad y el puerto.… Leer artículo completo

  • Formateando la salida en el Serial para Arduino [ parte II ]

    El lunes pasado empecé contando formas para formatear la salida en el Serial para Arduino y me dejé dos métodos en el tintero, relacionados con codificar a mano nuestra propia función tipo printf():

    printf() usando como salida el Serial

    Es fácil de programar, sólo necesitamos un rato para tenerla lista, recae por completo en la biblioteca HardwareSerial, y específicamente en el objeto Serial (aunque podremos cambiarlo cuando queramos si vamos a utilizar otro puerto serie); de primeras, si necesitamos otro puerto, tendremos que cambiar todo el código, con lo que no es demasiado reutilizable.… Leer artículo completo