wiki/guides/nginx/nginx-installation.md

7.6 KiB
Raw Blame History

title description published date tags editor dateCreated
NGINX mit Fail2Ban Docker Compose-Anleitung true 2024-02-10T21:39:54.067Z markdown 2024-02-10T21:39:54.067Z

NGINX mit Fail2Ban Docker Compose-Anleitung

Diese Anleitung führt dich durch den Prozess der Erstellung einer Docker-Compose-Konfiguration, um NGINX mit Fail2Ban einzurichten. Diese Konfiguration schützt dein System vor Brute-Force-Angriffen und ermöglicht die Verwendung von NGINX als Reverse Proxy.

Schritt 1: Docker und Docker Compose installieren

Stelle sicher, dass Docker und Docker Compose auf deinem System installiert sind. Du kannst die folgenden Links für die Installation verwenden:

Schritt 2: Erstelle die .env Datei für die Umgebungsvariablen

Verwendung

Umgebungseinstellungen Ports Du solltest eine .env-Datei erstellen, die sich im Stammverzeichnis von nginx-proxy befindet, und die erforderlichen Variablen in der docker-compose.yml-Datei deklarieren.

Beispiel für die Produktion:

HTTP_PORT=80
HTTPS_PORT=443
DEFAULT_EMAIL=my@email.com
ENABLE_IPV6=true

Beispiel für die Entwicklung:

HTTP_PORT=8080
HTTPS_PORT=8443
DEFAULT_EMAIL=my@email.com
DEBUG=1
ACME_CA_URI=https://acme-staging-v02.api.letsencrypt.org/directory

no-www

Wenn die Variable WWW innerhalb deines proxied Services auf no-www gesetzt ist, erstellt nginx-proxy automatisch eine Umleitung von www.mydomain.com zu mydomain.com. Du solltest www.domain.com zur LETSENCRYPT_HOST-Variable hinzufügen, um ebenfalls ein SSL-Zertifikat zu erhalten.

Netzwerke

Es müssen 2 externe Netzwerke erstellt werden (eins ist optional, wenn du IPv6 ohne den Docker-Userland-Proxy nicht unterstützen möchtest).

Netzwerk: nginx-proxy

Es handelt sich um ein einfaches externes gebrücktes Netzwerk, das auf dem Host mit dem Befehl docker network create nginx-proxy erstellt werden kann.

Netzwerk: edge

Dies ist ein IPv6-fähiges Netzwerk, das aus der docker-compose.yml-Datei entfernt werden kann (sowohl aus der Netzwerkliste des nginx-Dienstes als auch aus der Netzwerkliste am Ende der Datei). Du solltest auch ENABLE_IPV6: true aus dem docker-gen-Block entfernen. Wenn du IPv6 wirklich unterstützen möchtest (ohne den IPv6-zu-IPv4-Userland-Proxy), um die echten IPv6-Adressen von Benutzern abzurufen, solltest du IPv6 in der daemon.json von dockerd zuerst aktivieren. Dieser Leitfaden (oder dieser, wenn du Swarm verwenden möchtest) beschreibt die erforderlichen Schritte.

Nachdem du IPv6 im Standard-Docker-Brücken-Netzwerk aktiviert hast, kannst du das edge-Netzwerk mit dem Befehl docker network create —ipv6 —subnet fd00:dead:beef::/48 edge erstellen.

Es ist möglicherweise erforderlich, sudo ip6tables -t nat -A POSTROUTING -s fd00:dead:beef::/48 ! -o docker0 -j MASQUERADE auszuführen (beachte, dass dies nicht gegen einen Neustart gesichert ist).

Schließlich musst du irgendeine Art von IPv6-NAT aktivieren. Du kannst dieses Repository schnell verwenden: docker run -d —restart=always -v /var/run/docker.sock:/var/run/docker.sock:ro —cap-drop=ALL —cap-add=NET_RAW —cap-add=NET_ADMIN —cap-add=SYS_MODULE —net=host —name ipv6nat robbertkl/ipv6nat, und es wird sich um alles kümmern (vergiss nicht, es gegen Neustarts abzusichern).

Du kannst auch die offizielle (und experimentelle) Unterstützung von Docker für ip6tables verwenden, indem du sie in der daemon.json von dockerd aktivierst. Vergiss nicht, auch die experimentelle Flagge zu aktivieren.

Je nach Anwendungsfall möchtest du möglicherweise den Docker-Userland-Proxy deaktivieren, indem du „userland-proxy“: false zu deiner daemon.json-Datei hinzufügst.

Deine daemon.json sollte etwa so aussehen:

{
  „experimental“: true,
  „ipv6“: true,
  „ip6tables“: true,
  „fixed-cidr-v6“: „fd00::/80“
}

Denke daran, dass jede Modifikation dieser Datei durch das Neustarten des Docker-Dienstes, nicht nur durch das Neuladen, gefolgt werden sollte.

Schritt 3: Erstelle die Docker-Compose-Konfiguration

Erstelle eine docker-compose.yml-Datei in deinem Projektverzeichnis und füge den folgenden Inhalt ein:

version: 3

services:
  fail2ban:
    build: builds/fail2ban/.
    container_name: app-nginxproxy-fail2ban
    restart: always
    network_mode: „host“
    volumes:
      - ./logs:/var/log/nginx:ro
      - ./fail2ban:/var/run/fail2ban:rw
    cap_add:
      - NET_ADMIN

  docker-gen:
    image: nginxproxy/docker-gen
    command: -notify-sighup app-nginxproxy-nginx -watch -wait 500ms:3s /etc/docker-gen/templates/nginx.tmpl /etc/nginx/conf.d/default.conf
    container_name: app-nginxproxy-dgen
    restart: always
    volumes:
      - ./volumes/nginx/conf.d:/etc/nginx/conf.d
      - ./volumes/nginx/vhost.d:/etc/nginx/vhost.d
      - ./volumes/nginx/certs:/etc/nginx/certs:ro
      - ./volumes/nginx/htpasswd:/etc/nginx/htpasswd:ro
      - /var/run/docker.sock:/tmp/docker.sock:ro
      - ./volumes/docker-gen/templates/nginx.tmpl:/etc/docker-gen/templates/nginx.tmpl:ro
    networks:
      - default
      - edge-tier
    environment:
      ENABLE_IPV6: ${ENABLE_IPV6:-false}

  nginx:
    image: nginx:alpine
    container_name: app-nginxproxy-nginx
    restart: always
    depends_on:
      - docker-gen
    ports:
      - ${HTTP_PORT:-80}:80
      - ${HTTPS_PORT:-443}:443
      - 8448:8448
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf:ro
      - ./volumes/nginx/conf.d:/etc/nginx/conf.d:ro
      - ./volumes/nginx/vhost.d:/etc/nginx/vhost.d:ro
      - ./volumes/nginx/certs:/etc/nginx/certs:ro
      - ./volumes/nginx/htpasswd:/etc/nginx/htpasswd:ro
      - ./volumes/nginx/html:/usr/share/nginx/html:ro
      - ./logs:/var/log/nginx/:rw
      - ./data:/data:ro
      - /etc/localtime:/etc/localtime:ro
    networks:
      - default
      - edge-tier

  acme-companion:
    image: nginxproxy/acme-companion
    container_name: app-nginxproxy-acme
    restart: always
    depends_on:
      - docker-gen
      - nginx
    volumes:
      - ./volumes/nginx/conf.d:/etc/nginx/conf.d:ro
      - ./volumes/nginx/vhost.d:/etc/nginx/vhost.d
      - ./volumes/nginx/html:/usr/share/nginx/html
      - ./volumes/nginx/certs:/etc/nginx/certs
      - ./volumes/nginx/acme:/etc/acme.sh
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - /opt/containers/mailu/certs:/etc/nginx/certs/mailu-certs
    networks:
      - default
      - edge-tier
    environment:
      NGINX_DOCKER_GEN_CONTAINER: app-nginxproxy-dgen
      NGINX_PROXY_CONTAINER: app-nginxproxy-nginx
      ACME_CA_URI: ${ACME_CA_URI:-}
      DEFAULT_EMAIL: ${DEFAULT_EMAIL}
      DEBUG: ${DEBUG:-0}

networks:
  default:
    name: nginx-proxy
    external: true
  edge-tier:
    name: edge
    external: true

Schritt 3: NGINX mit Fail2Ban starten

Navigiere zum Verzeichnis, in dem sich deine docker-compose.yml-Datei befindet, und führe den folgenden Befehl aus:

docker-compose up -d

Dieser Befehl startet NGINX mit Fail2Ban und den anderen Diensten im Hintergrund.

Anpassungen und Erweiterungen

  • Du kannst banaction mit einer Komma-separierten Liste verwenden, um mehrere Ban-Actions zu konfigurieren.
  • Überprüfe die Fail2Ban-Dokumentation für spezifischere Optionen und Aktionen.

Dockerfile-Anpassungen

Wenn du Fail2Ban mit einer anderen Konfiguration oder spezifischen Anpassungen verwenden möchtest, bearbeite das Dockerfile in path/to/fail2ban/Dockerfile. Stelle sicher, dass du die Konfigurationen und Aktionen entsprechend deinen Anforderungen anpasst.

Lizenz

Dieses Konfigurationsbeispiel steht unter der MIT Lizenz.