HAProxy und CrowdSec
Stichpunkte
Auf der PFSense
Pakete auf der pfsense:
acme, cron, haproxy
Schnittstellen:
Wan, Lan, DMZ (opt1)
Verfahren:
Zertifikat
Dienste -> Acme Certificates -> Account Key
Name: Webserver-Key
ACME-Server: Let's Encrypt Production ACME v2
E-Mail: youre@email.de
-> Create new account key
-> Register ACME account key
-> Speichern
Zum Verifizieren der Domaininhaber gibt es unterschiedliche Methoden, wie z.B. Standalone Webserver.
Ich werde hier DNS mit OVH verwenden, dazu habe ich bei OVH
- Application Key
- Application Secret
- Consumer Key
erstellt. Endpoint ist bei mir OVH Europe.
Damit erstellt dann ACME einen DNS Eintrag zu deiner Domäne bei OVH, den Lets Encrypt dann abfragen und verifizieren kann.
Dienste -> Acme Certificates -> Certificates
Name: Webserver-Cert
Acme Account: Webserver-Key
Private Key: 2048-bit RSA
Domain SAN list:
Mode: Enable, Domainname=deine.domain.de, Methode= DNS-OVH
(Optional weiterer Eintrag für Wildcard)
Mode: Enable, Domainname=*.deine.domain.de, Methode= DNS-OVH
-> Speichern
HAProxy
Dienste -> HAProxy -> Settings
Enable HAProxy, Maximum Connection = 5000, -> Speichern
Dienste -> HAProxy -> Backend
->Hinzufügen
Name=Webservers, Serverlist Hinzufügen, Mode=Active, Name=Webserver1, ForwardTo=Address+Port, Address=IP des Backendserver, Port=443, Encrypt (SSL)=true, SSL Check=false
Advanced settings
Backend pass thru = option forwardfor
Wichtig für Crowdsec:
die Option Backend pass thru=option forwardfor, damit das Backend die IP des echten Clients erhält.
->Speichern
Dienste -> HAProxy -> Frontend
Erstmal die http-to-https Weiterleitung
->Hinzufügen
Name=http-to-https,External Address; Listen Adress=WAN, Port=80, Typ=http/https (offloading)
ACL bleibt leer
Aktionen: Action= http-request redirect, rule= scheme https
-> Speichern
Dann das eigentliche Frontend
-> Hinzufügen
Name=Frei wählbar, External Address; Listen Adress=WAN, Port=443, SSL Offloading=true, Typ=http/https (offloading)
ACL:
Name: WebACL1, Expression= Host Matches, Value=deine.domain.de
Aktionen:
Use Backend, Condition acl names=WebACL1, Backend=Webservers
SSL offloading:
Zertifikat=Webserver-Cert
->Speichern
Auf dem Webserver
Apache Config
sudo echo "RemoteIPHeader X-Forwarded-For" >> /etc/apache2/apache2.conf
sudo sed -i 's,LogFormat "%h %l %u %t \\"%r\\" %>s %O \\"%{Referer}i\\" \\"%{User-Agent}i\\"" combined,LogFormat "%a %l %u %t \\"%r\\" %>s %O \\"%{Referer}i\\" \\"%{User-Agent}i\\"" combined,g' /etc/apache2/apache2.conf
sudo a2enmod remoteip
sudo systemctl restart apache2
CrowdSec Installation
curl -s https://packagecloud.io/install/repositories/crowdsec/crowdsec/script.deb.sh | sudo bash
sudo apt install crowdsec crowdsec-blocklist-mirror crowdsec-firewall-bouncer-iptables
# Der Configuration unter db_config "use_wal: true" hinzufügen
sudo vi /etc/crowdsec/config.yaml
db_config:
log_level: info
type: sqlite
db_path: /var/lib/crowdsec/data/crowdsec.db
use_wal: true
Für die Blockliste die listen_uri: anassen;
vi
sudo service crowdsec start
Optional für das Dashboard auf https://www.crowdsec.net/ Kostenlos Registrieren um die ID zu erhalten.
sudo cscli console enroll <id>