From 28504e497474cfb102ad443930520527774bbbf4 Mon Sep 17 00:00:00 2001 From: simon Date: Sat, 10 Feb 2024 21:39:58 +0000 Subject: [PATCH] docs: create guides/nginx/nginx-installation --- guides/nginx/nginx-installation.md | 196 +++++++++++++++++++++++++++++ 1 file changed, 196 insertions(+) create mode 100644 guides/nginx/nginx-installation.md diff --git a/guides/nginx/nginx-installation.md b/guides/nginx/nginx-installation.md new file mode 100644 index 0000000..6e71e8e --- /dev/null +++ b/guides/nginx/nginx-installation.md @@ -0,0 +1,196 @@ +--- +title: NGINX mit Fail2Ban Docker Compose-Anleitung +description: +published: true +date: 2024-02-10T21:39:54.067Z +tags: +editor: markdown +dateCreated: 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: + +- [Docker Installationsanleitung](https://docs.docker.com/get-docker/) +- [Docker Compose Installationsanleitung](https://docs.docker.com/compose/install/) + +## 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: +```env +HTTP_PORT=80 +HTTPS_PORT=443 +DEFAULT_EMAIL=my@email.com +ENABLE_IPV6=true +``` + +Beispiel für die Entwicklung: +```env +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: +```json +{ + „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: + +```yaml +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: + +```bash +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](LICENSE). +