Instala ufw firewall en tu servidor web Ubuntu Server 14.04

Bienvenid@s, ya veis que estamos en agosto y que tengo un poco más de tiempo para dedicar al blog y compartir cosas con vosotros. Espero poder seguir esta tendencia en los próximos meses, y seguir compartiendo con más frecuencia. Hoy vamos a activar y configurar el firewall ufw en Ubuntu Server.

Con esta pequeña guía cerraremos por fin todo lo que explicamos en esta guía y en este artículo, donde explicábamos algunas cosas de puesta en marcha de servidores, de redes, y de GNU/Linux, y decíamos que el paso siguiente consistía en instalar un firewall.

Por cierto si ves que explico alguna cosa demasiado avanzada o quieres profundizar en alguno de los aspectos que vamos a exponer siéntete libre por favor de dejar tu comentario, tus preguntas, tus dudas, etc.

Escudo de seguridad

Pues bien, hoy vamos a configurar ufw en un Ubuntu Server donde corren solo los servicios imprescindibles para servir páginas web dinámicas. Te invito a que leas los dos recursos anteriores para seguir la explicación de hoy.

Por si no lo sabes, ufw (Uncomplicated Firewall) es el firewall predeterminado de Ubuntu. Se trata de un sistema frontend de iptables que facilita mucho las cosas a los que quieren configurar rápidamente un firewall y no quieren complicarse programando reglas de filtrado de paquetes con iptables. ufw proporciona una capa de abstracción amigable que permite a los administradores tomar decisiones de filtrado más fácilmente que con iptables.

ufw ya viene instalado en Ubuntu, pero está desactivado de forma predeterminada. Para ver el estado del firewall:

ufw status

Si no lo activaste antes tiene que salirte un mensaje que indica que el firewall no está activo. Para activarlo:

ufw enable

Si activas ufw de forma remota, con ssh, te saldrá este mensaje:

Command may disrupt existing ssh connections. Proceed with operation (y|n)? 

Dile que sí (y), pero no antes de asegurarte que dispones de una copia de seguridad de lo que consideres importante en tu servidor.

Nada más activar ufw cerraremos todos los puertos:

ufw default deny

De este modo adoptamos una política de denegación por defecto para las comunicaciones entrantes, o sea, nuestro Ubuntu Server no aceptará ningún paquete que le entre.

Como alternativa, podemos elegir una política que acepte por defecto todo el tráfico entrante, de modo que el administrador tenga que establecer reglas para denegar comunicaciones determinadas.

Hombre con paraguas

En la política deny por defecto el administrador prefiere abrir a mano los puertos imprescindibles. Esto tiene la ventaja de que el servidor es más seguro, pero presenta el inconveniente de que exige al administrador un conocimiento de los servicios que maneja, y también puede resultar un poco más complicada de mantener.

Lo anterior es una regla general en seguridad informática: a más seguridad, menos usabilidad del sistema y un tanto más de trabajo en el mantenimiento de dicha política de seguridad.

Antes hemos cerrado todas las conexiones entrantes. Ahora vamos a abrir solo los puertos que necesita nuestro Ubuntu Server que, como decimos, solo sirve páginas web dinámicas.

Suponiendo que hemos cambiado el puerto del servicio ssh a 981, abrimos el puerto 981 para que acepte conexiones TCP:

ufw allow 981/tcp

Luego abrimos http:

ufw allow 80/tcp

Y abrimos https:

ufw allow 443/tcp

Por cierto, si en algún momento te equivocas con alguna regla, que sepas que así como las hemos puesto con los comandos de arriba, en cualquier momento también puedes quitarlas a mano así:

ufw delete allow 443/tcp

Una vez hecho todo esto tendrías que comprobar el nuevo estado de ufw y comprobar que todo está ok:

ufw status verbose

La salida es esta:

Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
80/tcp                     ALLOW IN    Anywhere
443/tcp                    ALLOW IN    Anywhere
981/tcp                    ALLOW IN    Anywhere
80/tcp (v6)                ALLOW IN    Anywhere (v6)
443/tcp (v6)               ALLOW IN    Anywhere (v6)
981/tcp (v6)               ALLOW IN    Anywhere (v6)

Es muy importante que te asegures de dejar abierto el puerto del servicio ssh (981 en nuestro caso porque lo cambiamos cuando hicimos el hardening correspondiente) porque si no lo haces no podrás entrar a administrar tu servidor de forma remota.

Luego, no está de más que te asegures que tu archivo /etc/ufw/ufw.conf tiene puesta a yes la entrada ENABLED:

# Set to yes to start on boot. If setting this remotely, be sure to add a rule
# to allow your remote connection before starting ufw. Eg: 'ufw allow 22/tcp'
ENABLED=yes

La configuración anterior ejecutará ufw al iniciar el sistema.

Algunos recursos recomendados sobre lo que hemos hecho hoy:

Pues bien amig@s, una vez asimilada la teoría que estamos manejando, y una vez entendido lo que explico en los 2 posts anteriores a que hacía referencia al principio, y este de hoy de ufw ya podemos levantar un Ubuntu Server seguro en pocos minutos. Por favor, si hay alguna cosa que ahora mismo no ves muy clara o tienes alguna duda siéntete libre de dejar tu comentario.