De puertos y firewalls (básico)

Tras las inspiradoras entradas de Eugenia, se me ocurrió que sería buena idea continuar con la saga siguiendo la estructura de sus artículos: simplicidad, claridad de conceptos y temática a priori conocida pero sobre la cual siempre conviene refrescar conceptos.

Ahí va una de puertos y firewalls 😉


¿Qué es un puerto de red?

Un puerto de red es una interfaz no física mediante la cual dos máquinas intercambian datos a través de un servicio concreto. Según el modelo OSI (Open System Interconnection) su administración se corresponde con la capa 4 (transporte).

Cada puerto debe estar identificado por un número que lo hace único y permite asociarlo a un servicio determinado, de tal forma que las aplicaciones puedan saber qué tipo de información encontrarán en él. Gracias a esta identificación unívoca, es posible la multiplexación (en su acepción correspondiente a redes y modelo OSI), o lo que es lo mismo, la posibilidad de enviar información desde varias aplicaciones de forma simultánea a través de una conexión.

El número de puerto se indica mediante una palabra (cadena finita de bits) de 16 bits, por lo que existen 2¹⁶ = 65535 puertos diferentes. Aunque en principio podemos utilizar cualquiera de ellos para cualquier servicio, la IANA¹ (Internet Asigned Names Authority) establece una relación estándar puerto-servicio, en virtud de la cual clasificamos los puertos de red en:

  • Puertos bien conocidos: los inferiores al 1024. Suelen estar reservados para procesos del sistema y como su nombre indica son utilizados por protocolos «bien conocidos» como pueden ser https, ftp, ssh, etc. Su utilización requiere permisos de administrador. Suelen ir del lado del servidor.
  • Puertos registrados: Los comprendidos entre el 1024 y el 49151. Son de libre aplicación y además existe un listado en la IANA que especifica que protocolo usa cada uno de ellos.
  • Puertos dinámicos o privados: del 49152 al 65535. Son puertos efímeros o de uso temporal. Normalmente son utilizados por la máquina cliente.
¹ En Debian, podéis echar un vistazo al fichero /etc/services para ver una relación de los puertos y servicios a los que se encuentran asociados.

¿Cómo puedo saber qué puertos tengo abiertos en mi máquina?

A pesar de que existen diversas aplicaciones on-line que escanean los puertos más comunes de tu máquina para comprobar si están abiertos, la mejor opción es utilizar una herramienta propia. En sistemas GNU/linux contamos con netstat:

user@machine:~ $ netstat -tuna
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:46479 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN
tcp 0 0 192.168.1.162:32795 74.125.230.228:80 ESTABLISHED
tcp6 0 0 ::1:25 :::* LISTEN
tcp6 0 0 :::39940 :::* LISTEN
tcp6 0 0 :::111 :::* LISTEN
udp 0 0 0.0.0.0:51873 0.0.0.0:*
udp 0 0 0.0.0.0:800 0.0.0.0:*
udp6 0 0 :::800 :::*
udp6 0 0 :::111 :::*
udp6 0 0 :::5353 :::*
udp6 0 0 :::53554 :::*
udp6 0 0 :::54643 :::*

Los parámetros -t y -u indican a netstat que muestre las conexiones realizadas mediante los protocolos TCP y UDP respectivamente, podéis filtrar la salida a vuestro antojo (muy recomendable echar un ojo al man de netstat).

Gestión de puertos: iptables y ufw (uncomplicated firewall)

Como ya sabéis, netfilter es el framework encargado de manipular y procesar paquetes de red en el kernel linux. E iptables una de las herramientas más potentes construídas sobre dicho framework, un firewall que permite configurar las tablas, cadenas y reglas de netfilter. Por tanto, la mejor manera de gestionar el tráfico de paquetes desde y hacia nuestra máquina es hacer uso de la mencionada herramienta.

Sin embargo, la configuración de iptables se puede complicar más de la cuenta, así que optaremos por utilizar otra aplicación que nos permita hacerlo de forma más sencilla. Me refiero a ufw, un sencillo y completo firewall que nos ayudará en la tarea y que además dispone de interfaz gráfica (gufw). Podéis encontrarlo sin problema en los repositorios Debian.

root@machine:~ # aptitude install ufw

Como cada máquina es un mundo y además cumple una serie de funciones, es imposible dar una receta universal a seguir al pie de la letra. Sin embargo, una buena forma de proteger nuestras máquinas es cerrar de forma predeterminada todos los puertos y luego abrir tan sólo aquellos que necesitemos. Veamos cómo hacerlo:

1) Arrancamos el firewall
root@machine:~ # ufw enable

2) Cerramos todos los puertos de forma predeterminada

root@machine:~ # ufw default deny

3) Añadimos reglas para abrir los puertos que nos interesen. Se puede indicar el nombre del servicio o bien del puerto:
root@machine:~ # ufw allow ssh
root@machine:~ # ufw allow 21

Si en algún momento queremos eliminar alguna de las reglas creadas basta con teclear:
root@machine:~ # ufw delete allow ssh

Además, podemos ver el estado del firewall mediante:
root@machine:~ # ufw status

Y activar un registro de logs, que se almacenarán en /var/log/messages, tecleando:
root@machine:~ # ufw logging on

Por último decir que también se podría haber realizado el proceso inverso, esto es, abrir todos los puertos por defecto (idem que el punto 2, pero con el parámetro allow) e ir cerrando uno por uno (idem que el punto 3, pero indicando deny). Si echáis un ojo al manual veréis que también es posible permitir o denegar las conexiones desde una determinada IP o rango de IP’s, permitir el acceso a una IP a un sólo servicio y casi tantas combinaciones en forma de reglas como se os ocurran.

root@machine:~ # ufw allow from 192.168.1.0/24
root@machine:~ # ufw allow from 192.168.1.0/24 to any app ssh

Y eso es todo de momento, como veis ha sido una entrada bastante generalista en la que se ha tratado lo más básico de entre lo básico. A ver si con esta pequeña introducción se anima alguno de los que saben mucho más de esto que yo a presentar alguna herramienta molona o a profundizar más en el tema (sí, va por vosotros tres, canallas ;)).

¡Saludos!

16 ideas sobre “De puertos y firewalls (básico)”

Los comentarios están cerrados.

Sentimos molestarte con lo de las Cookies, pero es por imperativo legal. Puedes ver aquí la Política de Cookies, si continúas navegando te informo que la estás aceptando ;)    Ver
Privacidad