Horst_33
Lieutenant
- Registriert
- Dez. 2008
- Beiträge
- 684
Hi,
momentan betreibe ich auf einen Raspi 3 (192.168.178.131) folgende Dienste:
- SeaFile Server
- nginx als Webserver
- Shellinabox (erreichbar für nginx proxy)
- fail2ban (kommt noch)
Ein zweiter Pi (192.168.178.121) läuft im Netz und ist nur über den primären via Shell In a Box erreichbar.
Wichtig: Das haupt Merkmal liegt auf sicheren Diensten. HTTP wird via Lets Encrypt durchgesetzt und die sonstige Config vom nginx habe ich ziemlich restriktiv gesetzt. Kompatibilität zu alt Systemen sind dabei egal.
Nun habe ich aber folgendes Problem gehabt, wodurch mein ganzer Web Dienst nicht mehr erreichbar war: FI in der Wohnung gefallen -> FI wieder rein -> Raspi und FritzBox starten gleichzeitig hoch (FritzBox braucht mind. 1 Minute länger als der Pi) -> Fehler beim nginx (Details siehe später). Da kam meine Überlegung, dass die nginx config sicherlich optimiert werden könnte. Daher hier etliche Fragen zum nginx unter den genannten Gesichtspunkten
- Habt ihr Vorschläge zur Sicherheit
- Problem: Ist der andere raspi (192.168.178.121) nicht online, kann der andere pi (192.168.178.131 = der Pi mit den nginx) seinen webserver nicht starten -> Fail state, da der host nicht erreichbar ist/alternativ: dns-resolver nicht funktioniert hat -> Kann man das Problem abkoppeln?
- Sind mehrere einträge in /etc/nginx/sites-enabled sinnvoll?
- Wenn ja, wie teile ich diese auf?
- Sollte ich die Shell In a Box Sachen vom Seafile trennen?
- Kann ich mehrere Einträge in sites-enabeld verketten?
Hier die Config (einzige Datei):
momentan betreibe ich auf einen Raspi 3 (192.168.178.131) folgende Dienste:
- SeaFile Server
- nginx als Webserver
- Shellinabox (erreichbar für nginx proxy)
- fail2ban (kommt noch)
Ein zweiter Pi (192.168.178.121) läuft im Netz und ist nur über den primären via Shell In a Box erreichbar.
Wichtig: Das haupt Merkmal liegt auf sicheren Diensten. HTTP wird via Lets Encrypt durchgesetzt und die sonstige Config vom nginx habe ich ziemlich restriktiv gesetzt. Kompatibilität zu alt Systemen sind dabei egal.
Nun habe ich aber folgendes Problem gehabt, wodurch mein ganzer Web Dienst nicht mehr erreichbar war: FI in der Wohnung gefallen -> FI wieder rein -> Raspi und FritzBox starten gleichzeitig hoch (FritzBox braucht mind. 1 Minute länger als der Pi) -> Fehler beim nginx (Details siehe später). Da kam meine Überlegung, dass die nginx config sicherlich optimiert werden könnte. Daher hier etliche Fragen zum nginx unter den genannten Gesichtspunkten
- Habt ihr Vorschläge zur Sicherheit
- Problem: Ist der andere raspi (192.168.178.121) nicht online, kann der andere pi (192.168.178.131 = der Pi mit den nginx) seinen webserver nicht starten -> Fail state, da der host nicht erreichbar ist/alternativ: dns-resolver nicht funktioniert hat -> Kann man das Problem abkoppeln?
- Sind mehrere einträge in /etc/nginx/sites-enabled sinnvoll?
- Wenn ja, wie teile ich diese auf?
- Sollte ich die Shell In a Box Sachen vom Seafile trennen?
- Kann ich mehrere Einträge in sites-enabeld verketten?
Hier die Config (einzige Datei):
Code:
# Basic HTTP Port for easy access
server {
listen 80;
server_name foo.bar;
return 301 https://$host$request_uri; #Redirect to HTTPS
}
# For major security reason use SSL at all time
server {
listen 443;
ssl on;
ssl_certificate /etc/letsencrypt/live/foo.bar/fullchain.pem; # Pulbic Cert
ssl_certificate_key /etc/letsencrypt/live/foo.bar/privkey.pem; # Private Key
ssl_dhparam /etc/nginx/ssl/dhparam4096.pem; # DH-Exchange Key
ssl_session_cache builtin:1000 shared:SSL:10m;
ssl_protocols TLSv1.2; # TLSv1 TLSv1.1
# Only allow seucre cypher suites
ssl_ciphers 'kEECDH+ECDSA+AES128 kEECDH+ECDSA+AES256 kEECDH+AES128 kEECDH+AES256 kEDH+AES128 kEDH+AES256 HA !aNULL !eNUL
L !LOW !kECDH !DSS !MD5 !EXP !PSK !SRP !CAMELLIA !SEED';
ssl_stapling on;
ssl_prefer_server_ciphers on;
server_name foo.bar;
proxy_set_header X-Forwarded-For $remote_addr;
server_tokens off;
add_header Strict-Transport-Security
"max-age=31536000; includeSubDomains";
# Make Cookies Secure
proxy_cookie_domain ~(?P<secure_domain>([-0-9a-z]+\.)?[-0-9a-z]+\.[a-z]+)$ "$secure_domain; secure";
location / {
fastcgi_pass 127.0.0.1:8000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_script_name;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param HTTPS on;
fastcgi_param HTTP_SCHEME https;
access_log /var/log/nginx/seahub.access.log;
error_log /var/log/nginx/seahub.error.log;
fastcgi_read_timeout 36000;
}
# Redirect location for seafile
location /seafhttp {
rewrite ^/seafhttp(.*)$ $1 break;
proxy_pass http://127.0.0.1:8082;
client_max_body_size 0;
proxy_connect_timeout 36000s;
proxy_read_timeout 36000s;
proxy_send_timeout 36000s;
send_timeout 36000s;
}
# Location to data directory
location /media {
root /mnt/pidrive/seafile/seafile-server-latest/seahub;
}
# Securing Shell in A Box via SSL Proxy and HTPASSWD
location /shellinabox/31/ {
proxy_pass http://192.168.178.131:4200;
access_log /var/log/nginx/shellinabox31.access.log;
error_log /var/log/nginx/shellinabox31.error.log;
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/htpasswd;
}
location /shellinabox/21/ {
proxy_pass http://192.168.178.121:4200;
access_log /var/log/nginx/shellinabox21.access.log;
error_log /var/log/nginx/shellinabox21.error.log;
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/htpasswd;
}
# For Let´s encrypt acme challenge (renew)
location '/.well-known/acme-challenge' {
default_type "Text/plain";
root /var/www/webroot;
}
}