Servicios de red en Linux: introducción a ss

Cuando en un equipo se necesite ejecutar una serie de servicios de red es importante tener abiertos los puertos necesarios y solamente esos. Ese es uno de los puntos fundamentales para asegurar el sistema contra intrusiones externas. En este post explicaremos cómo utilizar ss, el nuevo estándar para ayudarnos en esta tarea.

Los comandos ss e ip son el reemplazo de netstat, que ya se considera obsoleto. El primero se utiliza para inspeccionar puertos de escucha correspondientes a los servicios de red. Por otra parte, el segundo se emplea para realizar tareas relacionadas con la manipulación de interfaces de red y tablas de enrutamiento.

Servicios de red

Por ejemplo, cuando instalamos un stack LAMP debemos considerar el nivel de acceso desde el exterior y de manera local. Si nuestro objetivo es servir un sitio web dinámico, es probable que se necesite acceder solamente a Apache desde el exterior. Bajo ese escenario, podremos configurar a MySQL / MariaDB para escuchar únicamente en la interfaz de loopback (IP 127.0.0.1), equivalente a localhost. Por supuesto, tendremos que configurar la conexión a la base de datos en los archivos PHP locales que la requieran. A continuación mostramos cómo realizar esta última tarea (notar el valor asignado a la variable $nombreServidor):

 <?php
$nombreServidor = "localhost";
$usuario = "fulano";
$contra = "fulano01";

// Crear conexion
$con = new mysqli($nombreServidor , $usuario, $contra);

// Chequear el estado de la conexion, hacer la consulta...
?>

Introducción a ss

Por último, veamos cómo utilizar ss para ver todos los sockets TCP (combinaciones de nombre de equipo o dirección IP junto con puerto de escucha) abiertos dentro del equipo:

ss --all --tcp

En la Fig. 1 podemos ver la salida del comando anterior. Debajo de la primera columna se puede ver el estado TCP de cada socket, mientras que en la segunda y tercera columna veremos la cantidad de datos recibidos y enviados, respectivamente. La cuarta columna nos muestra la interfaz de escucha y a continuación el nombre del servicio (si el mismo coincide con su puerto asignado por defecto según se ve en /etc/services) o el puerto involucrado en último caso. Finalmente, en la quinta columna podemos ver la misma información, pero del cliente con el que se mantiene la conexión.

Inspección de sockets y servicios de red utilizando ss
Figura 1 – Inspección de sockets y servicios de red utilizando ss

También podemos observar en la Fig. 1 el hecho de que el servicio mysql se encuentra escuchando en TODAS las interfaces disponibles (simbolizadas por *). Esto representa algo que deberíamos arreglar, pero que no trataremos en este post ya que se refiere a la configuración del servicio propiamente dicho.

En nuestro próximo post explicaremos cómo sacarle más jugo a ss. ¡No se lo pierdan!