wiki/guides/nginx/nginx-installation.md

197 lines
7.6 KiB
Markdown
Raw Normal View History

---
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).