Usar PowerShell para comprobar si un puerto responde a una conexión.

Tenéis que disculparme por desaparecer un par de meses, pero se me ha juntado una sobrecarga de trabajo con intentar acabar un curso de informática forense. La buena noticia es que ahora os podré contar más cosas sobre más temas, que de algo sirve estudiar xDDD.

La última vez que os escribí por aquí os contaba cómo podíamos comprobar que un servidor de correo respondía en un puerto concreto. Hoy vamos a ver cómo podemos comprobar de forma muy sencilla desde PowerShell si un puerto está respondiendo.

El comando tnc, abreviatura de Test-NetworkConnection, nos permite comprobar si un puerto responde. Requiere dos parámetros dicho comando, el primero es obligatorio y sería la IP o el nombre del host, el segundo es opcional y sería el puerto concreto que queremos comprobar (precedido del parámetro -port). La sintaxis básica sería:

tnc eldominiooip.com -port ElPuertoQueSea

Si no especificamos puerto simplemente sabremos si dicha IP o nombre de red tiene conexión, si lo especificamos sabremos además si el puerto está abierto o a la escucha. Esta mañana tenía que comprobar si un servidor web respondía en el puerto 8080, así que mandé el siguiente comando:

tnc dominio.ejemplo.com -port 8080

La respuesta que obtuve fue que la conexión TCP había fallado. Tras llamar al cliente confirmamos que le habían cambiado el router y no habían abierto el puerto. En este ejemplo fue el puerto 8080 de un servidor web, pero también podéis probar cualquier otro puerto, ya sea para un servicio web, ftp, smtp, etc.

Crear un certificado autofirmado con OpenSSL

Ya habíamos hablado anteriormente de OpenSSL, vamos a ver hoy cómo podríamos generar un certificado autofirmado. Vamos a generarlo con cifrado SHA512 y con clave RSA de 4096 bits, que se llamarán micerautofirm.key y micert.pem (el nombre lo podeís poner vosotros).

openssl req -x509 -sha512 -nodes -newkey rsa: 4096 -keyout micerautofirm.key -out micert.pem

Este certificado autofirmado tiene validez por un mes. Si queréis uno para más tiempo podéis utilizar el parámetro -days y pasarle un entero con el número de días. Por ejemplo, para un año:

openssl req -x509 -sha512 -nodes -days 365 -newkey rsa: 4096 -keyout micerautofirm.key -out micert.pem

Diferencia entre TLS y SSL

Me pregunta un cliente, que estaba configurando un cliente de correo, la diferencia entre TLS y SSL. Supongo que más gente tendará interés así que lo cuento por aquí:

Tanto TLS como SSL son protocolos de cifrado de datos que se aplican en la capa de transporte en internet (protocolos TCP/IP).

Ejemplo de código fuente ofuscado.
Photo by Markus Spiske on Pexels.com

SSL son las siglas de Secure Socket Layer, apareció originalmente en 1995 y tuvo varias revisiones (2.0 y 3.0) que corregían diversos problemas de seguridad. La versión 2.0 fue considerada obsoleta en 2011, mientras que la versión 3.0 fue marcada como tal en junio de 2015 tras encontrarse vulnerabilidades graves que facilitaban ataques man-in-the-middle.

TLS, abreviatura de Transport Layer Security, fue publicado originalmente en 1999 y también ha tenido varias revisiones, siendo la última de agosto de 2018, que nos trajo la versión 1.3 del protocolo. Las versiones 1.0 y 1.1 se consideran obsoletas, mientras que la versión 1.2 del protocolo (de 2008) todavía se permite bajo ciertas condiciones.

Entonces ¿Qué debo usar? Pues hoy por hoy lo recomendable es TLS 1.3, es la versión más actualizada y más segura. En algunos casos todavía encontraremos algunos servidores que utilizan TLS 1.2 por cuestiones de compatibilidad con alguna aplicación antigua. Cualquier versión anterior a la 1.2 debería ser considerada insegura y obsoleta.

Usar Powershell para cambiar configuración de red entre pública y privada

Cuando hice el curso de fundamentos de Powershell hace un año me quedó algún artículo pendiente de escribir, por ejemplo esta entrada ¿cómo puedo cambiar la configuración de red entre pública y privada? El funcionamiento del cortafuegos será distinto si usamos una configuración u otra.

Lo primero es ver qué comando podemos usar para ver la configuración de nuestra conexión. Este sería Get-NetConnectionProfile. Nos devolverá una serie de datos, entre los que aparece una línea que pone Network Category. Ahí nos dirá si la conexión es pública o privada. También nos dará el nombre, Name, del adaptador de red, dato que necesitaremos para conectarlo.

¿Cómo lo cambiamos? Pues de la siguiente forma:

  • Para ponerlo como privado: Set-NetConnectionProfile -Name «ElNombreDeNuestraRed» -NetworkCategory Private
  • Para ponerlo como público: Set-NetConnectionProfile -Name «ElNombreDeNuestraRed» -NetworkCategory Public

¿Qué es la paridad en una configuración de RAID?

Bueno, mi última entrada había sido explicar qué es un RAID y raíz de eso me han preguntado otra cosa ¿Qué es la paridad?

Bueno, la información de paridad es un tipo de redundancia que nos permite recuperar los datos al vuelo en caso de que falle algún disco. Esto también lo permite una copia en espejo (RAID 1), pero con una diferencia: En el artículo anterior veíaimos que en un RAID 1 tenemos todo un disco ocupado con los datos redundantes, en cambio en un RAID 5 decíamos que solo ocupábamos el equivalente a un disco para almacenar la paridad, si tenemos cuatro discos aprovechamos el espacio de 3 ¿Qué brujería es esta? Pues una brujería matemática.

La información de paridad es una informacion calculada operando con el resto de datos de la misma división. De esta forma si se rompe un disco podemos recuperarlos comparando los datos que tenemos con los de paridad. Por poner un ejemplo simplificado, pensemos en álgebra sencilla. Imagina que calculásemos la paridad sumando los valores de los sectores de una misma división: El valor del sector 1 sería 1, del sector 2 sería 2, del sector 3 sería 3 y la paridad sería su suma ( 1+2+3=6 ). Si se rompiese el disco que conteía el sector 2 tendríamos esto en nuestros discos: 1+X+3=6. Podemos resolver la ecuación para saber que X era 2 antes de tener que cambiar el disco. Aunque el cálculo de paridad es realmente más complejo, esencialmente sería algo así.

Los sistemas de paridad simple más sencillos suelen usar la operación XOR para hacer estos cálculos a nivel de bit. Los sistemas más complejos, por ejemplo la doble paridad del RAID 6, utilizan operaciones más complicadas como un código Reed-Solomon u operaciones sobre un campo de Galois concreto. El requerir operaciones más complejas para calcular la paridad provoca que la velocidad de escritura sea menor, a cambio de conseguir una mayor tolerancia a fallos ya que podrían fallar hasta dos discos sin que perdamos datos.

Configurando un extensor wifi Edimax EW-7438RPn

Cada vez que voy a casa de mis padres me quedo con las ganas de ver un partido de la NBA o alguna serie en el portátil, ya que la wifi no llega hasta el último piso. Así que hoy  (que Netflix estrena la segunda temporada de Daredevil) he decidido poner un repetidor en la escalera para amplificar la señal. El modelo elegido ha tenido que ser un Edimax EW-7438RPn sí o sí, era la única opción que tenía en la tienda.

Por un lado hay que decir que el escueto manual de instrucciones que trae está sólo en inglés, por lo que los no anglo-parlantes pueden sentirse durante un momento abrumados. El lado bueno es que su configuración es muy simple. Hay dos opciones:

  • En caso de tener un dispositivo iOS o Android en ambos stores hay una aplicación llamada EdiRange, proporcionada por el fabricante, que os permitirá acceder a la configuración. Tiene muy malas críticas en el store.
  • El extensor además puede ser configurado accediendo vía web a su menú de configuración.

Yo como soy así de complicado pasé del app y me metí a la configuración web. En un primer momento, con el punto sin configurar, el tema es simple: lo enchufas y lo primero que hace es crear una red wifi abierta. Te conectas a esta wifi, miras la dirección del punto de enlace y accedes a él  a través del navegador (en mi caso se creó en la 192.168.9.2, pero no se si será siempre la misma). El caso es que una vez entras en el menú te pedirá que elijas cómo vas a usar el aparato, dándote tres opciones:

  1. Repetidor WIFI: este es nuestro caso, y lo que hace es recibir la señal de la wifi y replicarla, de forma que aumenta la cobertura.
  2. Puente WIFI: en este caso lo que haríamos sería conectar mediante cable de ethernet nuestro dispositivo a un equipo sin wifi para que este pueda conectarse a la red.
  3. Punto de acceso WIFI: Al revés, en ese caso conectamos por cable al router para que emita wifi.

edimax ew-7438rpn

En mi caso elegí el primero, así que el dispositivo lo que hace es buscar todas las redes a su alcance y mostrar una lista con ellas. En dicha lista seleccionamos la que queremos replicar, le damos un nombre (por defecto le dará el nombre de la wifi que replicamos seguida de _2) e introducimos su contraseña. Nos dará la opción de dejar que el punto de acceso obtenga la configuración de red por DHCP o de configurarlo manualmente, yo he recurrido a lo segundo. Tras eso empieza el proceso de configuración automático. Una vez terminado podremos conectarnos a dicha wifi usando en principio la misma contraseña que en la wifi original. Es recomendable después de esto acceder al punto de acceso mediante su IP para poder configurarlo. Por defecto se accede al menú con el usuario Admin y la contraseña 1234, así que es recomendable cambiar esto (sobre todo porque el propio producto te dice estos datos en la ventana de conexión). El resto ya vosotros podéis trastear y ver todas las opciones de las que dispone el dispositivo.

Edimax administración

En resumen, por su precio ya supongo que no esperaréis un AP Cisco con posibilidad de crear media docena de redes independientes… se trata de un cacharrito para casa, pequeño, y que como repetidor cumple debidamente su función. De momento la experiencia es satisfactoria.

Abrir el escritorio remoto de Windows como administrador desde línea de comandos

Esta mañana me topaba con un problemilla técnico al intentar conectar remotamente con un servidor: me decía que dicho servidor no podía servir más licencias de escritorio remoto. ¡Cáspita, qué contrariedad! (eso último ha sido muy Roberto Alcázar) ¿cómo lo solucionamos?

Si lanzamos una consola de comandos podemos utilizar el comando mstsc para abrir el servicio de escritorio remoto y pasarle determinadas opciones. La clave para lo que tenía que hacer era usar el parámetro /admin.

La sintaxis de mstsc es la siguiente: mstsc [<connection file>] [/v:<server[:port]>] [/admin] [/f[ullscreen]] [/w:<width>] [/h:<height>] [/public] | [/span] [/edit «connection file»] [/migrate] [/?]

En la web de Microsoft podéis mirar más información sobre todas las opciones comentadas arriba.

Vamos con un ejemplo práctico basado en el caso que os decía antes. Vamos a suponer que la dirección del servidor al que hay que conectarse sería la 192.168.100.7 ¿cómo lo haríamos con mstsc?

mstsc /v:192.168.100.7 /admin

De esta forma ya entraríais al servidor con credenciales de administrador, desbloqueando el problema del servicio de licencias.

Configurar puerta de enlace en Windows por línea de comandos

Me acabo de encontrar con un problema en un equipo con Windows 7 Pro: cada vez que este se enciende o reinicia pierde la puerta de enlace y hay que configurársela. ¿Por qué? Ni idea, pero es un coñazo. ¿Solución? He probado con el comando route add a configurar la puerta de enlace y ha funcionado. ¿Cómo se hace? Muy sencillo, desde un terminal con el comando route add -p 0.0.0.0 mask 0.0.0.0 y la ip de la puerta de enlace:

#Ejemplo práctico
#Supongamos que la puerta de enlace
#es la ip 192.168.1.1
#que es una dirección típica

route add -p 0.0.0.0 mask 0.0.0.0 192.168.1.1

En la web de Microsoft hay más información sobre el uso de route add, aquí sólo os explicaré que para este caso le ponemos la ip 0.0.0.0 y la máscara 0.0.0.0 para especificar que todas las IP pasen por la puerta de enlace definida al final. El comando route add nos permitiría definir varias puertas de enlace para varios rangos de ip sirviéndonos de esos parámetros. Pero eso son temas que ya tocaremos en el futuro.

Incluir java en el PATH de Windows

Aunque no siempre es necesario, a veces nos tocará modificar la variable PATH de Windows y añadir la ubicación de Java para utilizar algún software concreto.

Todavía no he tenido que hacerlo en Windows 10, pero os comento cómo va la coas en Windows 8 y Windows 7. Voy a omitir XP porque al estar descontinuado no es cosa de darle soporte (de hecho la propia Oracle no asegura el funcionamiento de las últimas versiones de Java, aunque con el SP3 funciona de momento).

Vamos con las instrucciones para Windows 7:

  1. Abrimos el menú de inicio y hacemos click derecho sobre Equipo y, en el menú contextual seleccionamos Propiedades del Sistema.
  2. Hacemos click en Configuración avanzada del sistema -> Opciones avanzadas.
  3. Hacemos click en Variables de entorno, allí en Variables del sistema, buscamos PATH y hacemos click en él.
  4. En la ventana Editar, modificamos PATH agregando la ubicación de java en nuestro equipo al valor de PATH.

Y ahora las instrucciones para Windows 8:

  1. Hacemos click en Búsqueda y buscamos Panel de control
  2. Ahí hacemos click en Panel de control -> Sistema -> Opciones avanzadas
  3. Ahí vamos a Variables de entorno, y ahí en Variables del sistema, buscamos PATH y hacemos click en él.
  4. En la ventana Editar, modificamos PATH agregando la ubicación de java en nuestro equipo al valor de PATH.

En cuanto lo tenga que hacer en Windows 10 os lo agrego por aquí.

Utilizar .htaccess para protegerse de inyecciones SQL

Llevo unos días que no encuentro tiempo para escribir, pero vamos con un tip cortito que puede servir de ayuda para mejorar la seguridad de nuestra web.

La inyección SQL es un peligro para la integridad de nuestros datos y ya más de una vez hemos visto formas de protegernos. Como un plus de seguridad nunca está mal, vamos a ver cómo usar el fichero .htaccess de nuestro servidor para conseguir un plus de protección contra este tipo de ataques. El siguiente cojunto de reglas nos ayudará a mejorar la protección de nuestro sitio:

RewriteCond %{QUERY_STRING} (;|<|>|’|”|\)|%0A|%0D|%22|%27|%3C|%3E|%00).*(/\*|union|select|insert|cast|set|declare|drop|update|md5|benchmark) [NC,OR]
RewriteCond %{QUERY_STRING} \.\./\.\. [OR]
RewriteCond %{QUERY_STRING} (localhost|loopback|127\.0\.0\.1) [NC,OR]
RewriteCond %{QUERY_STRING} \.[a-z0-9] [NC,OR]
RewriteCond %{QUERY_STRING} (<|>|’|%0A|%0D|%27|%3C|%3E|%00) [NC]
RewriteRule .* - [F]

Recordad que hay que tener el servidor configurado para que .htaccess esté activo y permita el filtrado de URL.