angle-uparrow-clockwisearrow-counterclockwisearrow-down-uparrow-leftatcalendarcard-listchatcheckenvelopefolderhouseinfo-circlepencilpeoplepersonperson-fillperson-plusphoneplusquestion-circlesearchtagtrashx

Docker auf Debian / Ubuntu nicht respektiert ufw firewall Einstellungen, die Ports freigeben.

Docker umgeht ufw firewall Einstellungen und stellt Ports der Außenwelt zur Verfügung, ein sehr schwerwiegendes Sicherheitsloch.

9 Dezember 2019
In Docker
post main image
https://unsplash.com/@andrewtneel

Wieder ein unerwartetes Docker Problem. In einem früheren Beitrag habe ich beschrieben, warum und wie Sie Docker zwingen müssen, einen subnet zu verwenden, um plötzliche unerwartete Änderungen im Netzwerk mit Folgen wie nicht mehr funktionierende E-Mails zu verhindern.

In diesem Beitrag geht es um Docker , das die Einstellungen von firewall nicht respektiert, zumindest wenn Debian / Ubuntu und ufw (Uncomplicated Firewall) laufen. Docker sagt dir das nicht und stellt Ports zur Verfügung, so dass dieses Verhalten völlig unerwartet ist.

Auf meinem ISPConfig -Server läuft Debian Stretch. Ich verwende ufw als firewall, unten sind die wichtigsten Einstellungen.

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

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW IN    Anywhere                  
80/tcp                     ALLOW IN    Anywhere                  
443/tcp                    ALLOW IN    Anywhere                  
8080/tcp                   ALLOW IN    Anywhere                  
25                         ALLOW IN    Anywhere       

Wie du sehen kannst, sind alle eingehenden Verbindungen blockiert, mit Ausnahme einiger weniger erlaubter Verbindungen.

Meine Webanwendungen Docker Python verwenden den Gunicorn WSGI HTTP-Server, um die Python Flask App zu bedienen. Nginx läuft auf dem Host und ist für diese Anwendungen als umgekehrtes proxy konfiguriert. Funktioniert wie ein Charme. In der Datei docker-compose.yml werden die Ports aus der .env-Datei geladen:

services:
  web:
    ...
    env_file:
      - ./.env

    ports:
      - "${SERVER_PORT_HOST}:${SERVER_PORT_CONTAINER}"

Für eine Anwendung enthält die Datei.env diese Zeilen:

SERVER_PORT_HOST=8001
SERVER_PORT_CONTAINER=8001

Somit ist die verwendete Zeile docker-compose :

    ports:
      - "8001:8001"

Das Problem: Docker Port 8001 ist dem externen Netzwerk ausgesetzt, auch wenn ufw konfiguriert ist, um eingehende Verbindungen zu blockieren.

Das bedeutet, dass die Applikation/Service Docker auch unter <SERVER-IP>:8001 sichtbar ist. Das ist nicht nur sehr schlecht, sondern auch völlig unerwartet, da ufw konfiguriert wurde, um alle eingehenden Verbindungen zu blockieren.

Lösungen

Es gibt mehrere Lösungen dafür, hier habe ich mich entschieden, den Port an den Hostcomputer zu binden. Die Zeilen docker-compose.yml werden dann zu:

    ports:
      - "127.0.0.1:8001:8001"

Das funktioniert bei mir.

Andere Möglichkeiten, dies zu lösen, sind, um zu verhindern, dass Docker mit dem firewall verwechselt wird, Regeln zur ufw -Datei /etc/ufw/after.rules hinzufügen, etc. Siehe Links unten.

Zusammenfassung

Einige Leute betrachten dieses Docker Verhalten als Fehler, und ich kann dem nur zustimmen. Ufw ist ein firewall, ein sehr wichtiges Programm zur Kontrolle der Sicherheit. Ufw ist sehr weit verbreitet und wenn ein anderes Programm sein Verhalten umgeht, muss der Benutzer informiert werden. Bis dies behoben ist, sollte mindestens Docker beim Start einer Anwendung eine große Warnmeldung ausgeben.

Links / Impressum

Be careful with Docker ports!
https://dev.to/kovah/be-careful-with-docker-ports-3pih

Docker service exposed publicly though made to expose ports to localhost only
https://stackoverflow.com/questions/50621936/docker-service-exposed-publicly-though-made-to-expose-ports-to-localhost-only

Docker services only available to the local host
https://stackoverflow.com/questions/54261105/docker-services-only-available-to-the-local-host

How to fix the Docker and UFW security flaw
https://www.techrepublic.com/article/how-to-fix-the-docker-and-ufw-security-flaw/

The dangers of UFW + Docker
https://blog.viktorpetersson.com/2014/11/03/the-dangers-of-ufw-docker.html

What is the best practice of docker + ufw under Ubuntu
https://stackoverflow.com/questions/30383845/what-is-the-best-practice-of-docker-ufw-under-ubuntu

Mehr erfahren

Docker

Einen Kommentar hinterlassen

Kommentieren Sie anonym oder melden Sie sich zum Kommentieren an.

Kommentare (1)

Eine Antwort hinterlassen

Antworten Sie anonym oder melden Sie sich an, um zu antworten.

avatar

Ein wirklich schweres und immer noch aktuelles Sicherheitsproblem. Danke für die schnelle Lösung für Docker Compose.