Configurar un firewall para Discourse

It’s unclear if Linux distributions really “need” a firewall – but we have found that the following Uncomplicated Firewall rules work fine with a standard Docker based Discourse install:

ufw allow http
ufw allow https
ufw allow ssh
ufw enable

That is, allow HTTP (port 80), HTTPS (port 443), and SSH (port 22), and nothing else.

Check the current status of your firewall with

ufw status verbose

Sample output:

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

To                         Action      From
--                         ------      ----
80                         ALLOW IN    Anywhere
443                        ALLOW IN    Anywhere
22                         ALLOW IN    Anywhere
80 (v6)                    ALLOW IN    Anywhere (v6)
443 (v6)                   ALLOW IN    Anywhere (v6)
22 (v6)                    ALLOW IN    Anywhere (v6)

And if you ever want to turn it off

ufw disable

A firewall should not matter if you are using a default Docker install of Discourse, for the same reason almost no Linux distribution ships with a firewall enabled by default.

But if you have somehow installed extra services that talk to the outside world, adding a firewall gives you “belt and suspenders” security, if that is of interest to you.

33 Me gusta

Según entiendo, el contenedor de Docker tiene muy pocos puertos abiertos al sistema host, por lo que Discourse está efectivamente aislado por un firewall del servidor en el que se está ejecutando.

Por supuesto, si hay otras cosas ejecutándose en el sistema host, el Capitán Obvio dice que se deben tomar precauciones razonables.

He tenido un servidor que creíamos bastante bien asegurado y fue hackeado, no fue bonito.

1 me gusta

El tema no es totalmente preciso. Si UFW se usa fuera de docker, como “normalmente” en un VPS, no se aplica en sí mismo con Discourse. Puedo deshabilitar el puerto 80 y todavía está completamente abierto a Discourse/docker.

Claro, protege todo lo demás, pero si no hay otros servicios escuchando, es innecesario.

No sé cómo funcionan UFW o iptables si se usan después de enter app o si el firewall puede usarse de esa manera.

Me refiero a este tema:

3 Me gusta

Definitivamente estaría interesado en escuchar esta historia, ¿quizás en un hilo separado? :slight_smile:

A título informativo, las discusiones sobre la relación entre Docker y ufw / firewalls son casi tan antiguas como el propio Docker, aquí hay una bastante importante con mucha información interesante:

Los propios de Docker han mejorado en los últimos años en cuanto a la documentación de los detalles relevantes; Packet filtering and firewalls | Docker Docs

No quiero saturar demasiado el tema con enlaces, pero si estás interesado en el tema de los firewalls, estas parecen ser piezas realmente reveladoras para revisar, junto con una búsqueda general en Google para obtener más detalles.

Basándome en algunos de estos comentarios, y en el hilo súper útil enlazado por @Jagster, ¿parece que la configuración predeterminada de instalación de Discourse lista para usar con Docker es suficiente por sí sola? Después de todo, la mía se ve así;

$ docker ps
CONTAINER ID   IMAGE                 COMMAND        CREATED      STATUS        PORTS                                                                      NAMES
5dd4a572cd8e   local_discourse/app   \"/sbin/boot\"   6 days ago   Up 16 hours   0.0.0.0:80-\u003e80/tcp, :::80-\u003e80/tcp, 0.0.0.0:443-\u003e443/tcp, :::443-\u003e443/tcp   app

Así que, a menos que me equivoque, y a menos que haya algún otro puerto en uso por otro software en el servidor, creo que el único tráfico que debería conectarse entrante sería en estos puertos listados 80 y 443.

Si quieres hacer una comprobación de cordura, creo que deberías poder usar netstat para comprobar los puertos de escucha en tu servidor ( How to Install netstat on Ubuntu ; https://linuxize.com/post/check-listening-ports-linux/ )

netstat -tunlp

Para una comprobación de cordura aún más sólida, podrías considerar iniciar un segundo servidor Linux pequeño e intentar escanear los puertos abiertos de tu servidor Discourse; How To Use Nmap to Scan for Open Ports | DigitalOcean

# escanear todos los puertos ; inserta tu dirección IP aquí
sudo nmap -n -PN -sT -sU -p- 1.2.3.4
  • consulta el enlace incluido a la documentación de DigitalOcean para ver más comandos para escanear, etc.

Creo que si uno está preocupado por la seguridad del firewall del servidor para su servidor Discourse, estos recursos e información deberían ser de gran ayuda :slight_smile:

3 Me gusta

Algo pequeño, pero este enlace parece estar roto.

1 me gusta

La última versión LTS de Ubuntu ufw da ALLOW, no ALLOW IN.

Esto ha sido molesto para el administrador de mail-reciever, recibiendo “API preparation failed” en ./launcher logs mail-receiver incluso con el puerto 25 abierto en ufw.

Permitir todas las entradas y salidas y luego denegar los puertos deseados ha sido una solución.

Todavía no sé lo suficiente sobre iptables para ajustar más.