docs: create guides/nginx/nginx-installation
This commit is contained in:
parent
4271cbe72f
commit
28504e4974
1 changed files with 196 additions and 0 deletions
196
guides/nginx/nginx-installation.md
Normal file
196
guides/nginx/nginx-installation.md
Normal file
|
@ -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).
|
||||||
|
|
Loading…
Reference in a new issue