Sätta up reverse proxy (nån som är villig att hjälpa)

Permalänk
Medlem

Sätta up reverse proxy (nån som är villig att hjälpa)

Hej alla

I flera veckor försökete jag hitta någon guide att sätta upp reveser proxy. Upplever att alla guider är dåligt skrivna, vilket betyder att efter installation, jag kommer ingenstans. Pratade med några vänner och kolleger på jobbet ingen av dom har erfarenhet av reverse proxy.
Därför just nu letar jag någon som kan dessa grejer och om någon är villig att hjälpa mig att få igång reverse proxy.

mvh
Njanja

Permalänk
Medlem
Skrivet av njanja:

Hej alla

I flera veckor försökete jag hitta någon guide att sätta upp reveser proxy. Upplever att alla guider är dåligt skrivna, vilket betyder att efter installation, jag kommer ingenstans. Pratade med några vänner och kolleger på jobbet ingen av dom har erfarenhet av reverse proxy.
Därför just nu letar jag någon som kan dessa grejer och om någon är villig att hjälpa mig att få igång reverse proxy.

mvh
Njanja

Vad är det du vill göra och/eller vad är problemet som sätter stopp för dig?

Permalänk
Medlem
Skrivet av evil penguin:

Vad är det du vill göra och/eller vad är problemet som sätter stopp för dig?

Hej och tack för svaret.

Jag är vill komma från internet åt min plex, unifi kontrller och nextcloud utan att jag behöver skriva port nummer.
När jag skriver cloud-noip.org ska gå till min cloud, när jag skriver plex-noip.org vill komma åt plex server o.s.v
Nextcloud är konfigurerat på port 80 och 443, unifi på 8443 och plex 32400. (Jag kör på VM-s)
När jag får igång nginx, när jag försöker ställa in nginx config filen, där kommer problemet.
Jag vill veta hur ska nginx config files ser ut för min konfiguration?
Behöver jag ändra nåt i router?
Jag kör med no-ip som freedns.

mvh
Njanja

Permalänk
Medlem

Jag skrev ner hur jag gjorde tidigare i en annan tråd, kanske hjälper något.

Skrivet av wille1101:

Jag gjorde nyligen detta med Nginx för min Nextcloud, Onlyoffice och Emby. Är inte nån expert så det kanske går att göra på ett enklare sätt men allt funkar med HTTPS och jag är nöjd. Vet heller inte om det är fullt applicerbart i din situation men det kanske hjälper något. Gjorde följande:

Skapa först en VM i Proxmox som är din reverse-proxy och portforwarda 80 och 443 till den. Min har 1GB Ram, en CPU-kärna och jag kör Ubuntu Server 18.04 på den.

Sen är det bara att ssha till den och installera Nginx:
sudo apt-get install nginx

Starta Nginx:
sudo service nginx start

Sen efter det kan du köra status istället start för att kolla att den faktiskt gick igång. När du ser att Nginx är igång ska du ladda hem Certbot med Nginx-tillägget.

Lägg först till Certbots egna repository:
sudo add-apt-repository ppa:certbot/certbot

Ladda hem Certbot med Nginx-tillägget:
sudo apt install python-certbot-nginx

Nu behöver du konfa Nginx så att den skickar alla requests till rätt ip för rätt subdomän.

Gå till configmappen för Nginxs sidor:
cd /etc/nginx/sites-available

Gör en configfil för varje subdomän du vill skicka vidare med valfri textredigerare, tex nano eller vim:
nano subdomän1.dindomän.se

I varje configfil klistrar du in detta och ändrar domän under server_name och ip under proxy_pass:

server {
listen 80;
listen [::]:80;

server_name subdomän1.dindomän.se;

location / {
proxy_pass http://10.ip.till.din.vm/;
proxy_buffering off;
proxy_set_header X-Real-IP $remote_addr;
}
}

Symlinka configfilerna i sites-available till sites-enabled, först configfil 1 och sen 2:
sudo ln -s /etc/nginx/sites-available/subdomän1.dindomän.se /etc/nginx/sites-enabled/subdomän1.dindomän.se

sudo ln -s /etc/nginx/sites-available/subdomän2.dindomän.se /etc/nginx/sites-enabled/subdomän2.dindomän.se

När du gjort dina två configfiler så ska du starta om Nginx:
sudo service nginx reload

Om det går åt helvete och Nginx inte startar så har du något fel i nån av dina configfiler. Om Nginx däremot startar utan problem så kan du köra vidare med att fixa certifikaten så att du har HTTPS på dina sidor.

Kör certbot:
sudo certbot --nginx

Certbot kommer fråga dig om du accepterar villkor och ber dig även skriva in din mailaddress. Efter det frågar den vilka domäner du vill ha certifikat till, du vill ha till båda så bara att klicka enter. Sen kommer frågan om du vill uppgradera alla HTTP-förfrågningar till HTTPS, och det vill du.

Efter detta borde det stå att du nu har två certifikat. Jag tror det kan bli problem om du tex kör en proxy för subdomänerna med cloudflare, så stäng av det om det inte funkar och kör igen.

Nu borde allt vara klart och du kan testa komma åt sidorna med subdomän1.dindomän.se och subdomän2.dindomän.se.

En annan viktig sak att fixa för just Nextcloud: Nginx kommer sätta en max filstorlek på 100MB och den vill du ändra för att kunna ladda upp större filer.

Öppna nginx.conf
nano /etc/nginx/nginx.conf

I "http"-taggen ska du på en ny rad skriva in
client_max_body_size 5000M;

Detta sätter max till 5000MB, du kan ändra till vilken storlek som helst.

Permalänk
Medlem
Skrivet av wille1101:

Jag skrev ner hur jag gjorde tidigare i en annan tråd, kanske hjälper något.

Hej

Stor tack, nu fungera men inte 100%. Installation gick bra, till och med certifikatet fungerar.
När jag kör i min lokal nätverk då fungerar, men när jag kör från internet, då händer ingenting.
En annan fråga är måste jag skriva port. Jag skickar config filer på båda två.
Första filen som ligger under etc/nginx/sites-enabled/test1.mydns.org
server {

server_name test1.mydns.org;

location / {
proxy_pass http://192.168.3.63;
proxy_buffering off;
proxy_set_header X-Real-IP $remote_addr;
}

listen [::]:443 ssl ipv6only=on; # managed by Certbot
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/test1.mydns.org/fullchain.pem; # managed by $
ssl_certificate_key /etc/letsencrypt/live/test1.mydns.org/privkey.pem; # managed b$
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

}
server {
if ($host = test1.mydns.org) {
return 301 https://$host$request_uri;
} # managed by Certbot

listen 80;
listen [::]:80;

server_name test1.mydns.org;
return 404; # managed by Certbot

Den andra filen ser ut så här och den är för min Unifi Controller:
server {
listen 80;
listen [::]:80;

server_name test2.mydns.org;

location / {
proxy_pass http://192.168.3.13:8443;
proxy_buffering off;
proxy_set_header X-Real-IP $remote_addr;
}
}

mvh
Njanja

Permalänk
Medlem

Rent logiskt så ska väl en reverse proxy/lastbalanserare(applikation) kolla hostnamnet, och utifrån det vidarebefordra till intern ip och port
Kan inte mycket om linuxvärlden. Men reagerar på dessa rader hos dig

if ($host = test1.mydns.org) {
server_name test1.mydns.org;
server_name test2.mydns.org;

Jag hade förväntat mig de domäner du skrev i första inlägget. Eller så har du bara anonymiserat det å jag är helt ute å cyklar.

Permalänk
Medlem

Hur kör du dina applikationer? I olika VMs? Docker? Bare metal?
Hur har du ställt in trafiken i routern?

Permalänk
Medlem
Skrivet av Chuck:

Rent logiskt så ska väl en reverse proxy/lastbalanserare(applikation) kolla hostnamnet, och utifrån det vidarebefordra till intern ip och port
Kan inte mycket om linuxvärlden. Men reagerar på dessa rader hos dig

if ($host = test1.mydns.org) {
server_name test1.mydns.org;
server_name test2.mydns.org;

Jag hade förväntat mig de domäner du skrev i första inlägget. Eller så har du bara anonymiserat det å jag är helt ute å cyklar.

Hej

Du har rätt , det är bara för anonymitet.

Permalänk
Medlem
Skrivet av LicKeN:

Hur kör du dina applikationer? I olika VMs? Docker? Bare metal?
Hur har du ställt in trafiken i routern?

Hej

Allt körs i VMs.
När det gäller router. jag tror att jag gjorde rätt. På VM som har IP 192.168.3.70 både port 80 och 443 är öppet.

mvh
Njanja

Permalänk
Medlem

När du försöker nå nån av dem externt (från internet), kan du se någon inkommande trafik alls på proxyservern?

Jag hade testat att kolla med tcpdump på proxyservern där du kör nginx, på port 80/443, för att utesluta ev. problem med portforward på routern osv.

Jag kör också nginx reverse proxy för diverse tjänster, bland annat plex, såhär ser min nginx config ut där:

upstream plexserver { server 192.168.1.109:32400; } server { listen 80; listen [::]:80; server_name plex.domain.se; return 301 https://plex.domain.se$request_uri; } server { # SSL configuration listen 443 ssl; listen [::]:443 ssl; server_name plex.domain.se; ssl_certificate /opt/letsencrypt/certs/domain.se/cert.chained.pem; ssl_certificate_key /opt/letsencrypt/certs/domain.se/privkey.pem; location / { proxy_pass https://plexserver; proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504; proxy_redirect off; proxy_buffering off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location /:/websockets { proxy_pass https://plexserver; proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504; proxy_redirect off; proxy_buffering off; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }

Permalänk
Medlem

@crille631

Hej

Tack för hjälpen, nu fungerar. Eftersom jag kör den gratis versionen, då kan jag har bara tre i taget.
Funderar att köpa en domän, måste bara kolla att den fungerar med min USG Pro 4 router.

mvh
Njanja

Permalänk
Medlem
Skrivet av njanja:

@crille631

Hej

Tack för hjälpen, nu fungerar. Eftersom jag kör den gratis versionen, då kan jag har bara tre i taget.
Funderar att köpa en domän, måste bara kolla att den fungerar med min USG Pro 4 router.

mvh
Njanja

Domännamn har ingenting med routing att göra, så din USG Pro kommer duga fortsatt fint.

För egen del har jag automatiserat domänkoppling mot två dynamiska DNS-pekare som pekar mot respektive av mina två publika IP-adresser (A3 ger ut två) och så kör jag Dehydrated ACME-klienten med nedan listat Loopia script som sköter DNS-validering för att hålla wildcard-certifikat aktuella för min domäner. Med tanke på att jag har typ 150 olika docker-tjänster aktiva så skulle jag övertrassera Let's Encrypt om jag begärde ut individuella certifikat för varje subdomän jag har.
https://github.com/aaff-se/dehydrated-loopia-api-hook

Sen kör jag detta skript via cronjob var 10:e minut för att säkerställa att IP-adress för domänerna pekar mot aktuella utifall jag t.ex. skulle få en ny IP-adress vid strömavbrott eller dylikt. Det har fungerat helt klockrent i flera år nu så jag kan starkt rekommendera dig att registrera domännamn därigenom med LoopiaDNS om inte tänker gå all-in och sätta upp egna PowerDNS DNS-servrar eller dylikt.
https://www.loopia.se/kdbfiler/loopiadns.sh.zip

Permalänk
Medlem

Hej Alla

Fick den här meddelande när jag försöker logga in i min unifi controller via reverse proxy:
Googlade lite och testade några alternativ, men utan någon resultat.

https://njanja.myftp.org/index.php/s/wbzis7or6icCzGx

mvh
Njanja

Permalänk
Medlem

Vilken plattform kör du på? Dbtech (youtube) har flera guider på nginx, traefik intregrerat med Cloudflare. Baserat på Docker. Fungerar utmärkt för mig. Ett alternativ att öppna upp mot internet är att köra pivpn på servern och koppla upp sig via det. Då kan du enkelt streama och göra konfigurering på servern över VPN som är krypterat. Hade itne öppnat upp mot internet annat än för t.ex Wordpress. Är alltid en säkerhetsrisk.

Permalänk
Medlem

@njanja
Nextcloud och plex är skapade för att vara publika applikationer, men det är inte Unifi.
Att ha din unifi router öppen för hela internet är definitivt inte en smart lösning.
Men om du nu är inställd på att ha den tillgänglig så sätt den iaf bakom http auth, f2b, 2fa.
Så som du har det satt nu via ditt cloud-njanja..... så är det i stort sätt fritt fram för vilken illa sinnad person som helst och göra vad dom vill.
Såg även att din nc är felkonfigurerad, direkt länkar ska inte gå till en intern adress som 10.101.115.30

Permalänk
Medlem

Vill du nå din unifi-router utifrån så är mitt tips att konfigurera en ssh-server inuti nätverket som du sedan tunnlar till när du vill komma åt din unifi-router (Eller andra enheter på nätverket, fungerar för vilken enhet som helst. Då slipper du ha den vidöppen mot internet vilket innebär massor av onödig risk.

Snabbguide för ssh-tunnel:
1. Sätt upp en ssh server som du kan komma åt utifrån och kontrollera att den fungerar (Har du en redan så kan du använda den).
2. Öppna en tunnel till ssh-servern: ssh -D 1080 -C din_ssh_användare@din_host_eller_ipaddress
3. Konfigurera din webbläsares nätverksinställningar för att gå genom tunneln. I firefox går du till Allmänt > Nätverksinställningar > Slå på "Manuell proxykonfiguration" och fyll i raden för SOCKS: Socks-värd: 127.0.0.1 (Din egen dator), Port: 1080 (Eller annan valfri port som du fyllde i i förra steget) samt Socks V5.
4. Klart!

Nu kan du surfa precis att du vore på nätverket där ssh-servern är, tills dess att du stänger ner ssh-tunneln. Är din ssh-server på ditt LAN så kan du komma åt alla dina enheter på LAN'et precis som du vore där, t.ex. 192.168.0.1 för att komma åt din router (Eller vad din routers interna IP-adress är).

Bonustips: Installera en separat webbläsare, t.ex. en annan version av firefox (Om du redan använder firefox) och använda den separata versionen med dessa inställningar. Då behöver du inte konfigurera dessa inställningar hela tiden, utan när du vill använda tunneln så öppnar du din separata webbläsare samt ansluter till ssh-servern med kommandot tidigare, så är du inne på en gång.

Permalänk
Medlem
Skrivet av davidhogberg:

Bonustips: Installera en separat webbläsare, t.ex. en annan version av firefox (Om du redan använder firefox) och använda den separata versionen med dessa inställningar. Då behöver du inte konfigurera dessa inställningar hela tiden, utan när du vill använda tunneln så öppnar du din separata webbläsare samt ansluter till ssh-servern med kommandot tidigare, så är du inne på en gång.

Alternativt installera tillägget FoxyProxy (flera liknande finns säkert), så kan man med regler styra vilken proxy som ska användas för specifika mål.

Permalänk
Medlem

@Zidichy

Citat:

Såg även att din nc är felkonfigurerad, direkt länkar ska inte gå till en intern adress som 10.101.115.30

Hej stor tack för att du påpekade på felet. Med vad menar att den är NC är felkonfigurerat? Vad ska jag göra att fixa det?
Och hur kan de se min ip adress?

mvh
njanja

Permalänk
Medlem
Skrivet av njanja:

@Zidichy

Hej stor tack för att du påpekade på felet. Med vad menar att den är NC är felkonfigurerat? Vad ska jag göra att fixa det?
Och hur kan de se min ip adress?

mvh
njanja

Här ser man din lokala address till nc.
Hur du installerat din nc, är det via docker i en container, är det i en vm, eller BareMetal?

Permalänk
Medlem

Att exponera sina hemmaprylar direkt mot internet är inget att sträva efter. Själv har jag gjort det enkelt för mig och låter routern vara openvpn-server som jag kan ansluta till (även via någon annans gratis snokande wifi) och kommer då åt allt över krypterad förbindelse - samt att min trafik ser ut att komma från hemmet trots att jag typ befinner mig i Vittangi. OVPN-config filen har jag i mobilen som kan kopieras över till vilken annan enhet som helst om det behövs.

Permalänk
Medlem
Skrivet av Zidichy:

Här ser man din lokala address till nc.
Hur du installerat din nc, är det via docker i en container, är det i en vm, eller BareMetal?
https://i.imgur.com/gwvyQV4.png

Hej

Installerat på en VM ubuntu server 20.10.
Kollade lite inställningar, ser ut att jag har
missat en del.

Mvh
Njanja

Permalänk
Medlem

https://pivpn.io/

Fungerar också på Linux med x86. Absolut det lättaste sättet att nå sin server över internet.

https://invidious.snopyta.org/search?q=pivpn

Permalänk
Medlem

Hej

Har en liten problem. När jag kör Nextcloud via reverse proxy då får jag fel meddelande:

Åtkomst genom obetrodd domän

Vänligen kontakta din administratör. Om du är en administratör, ändra "trusted_domains"-inställningen i config/config.php likt exemplet i config.sample.php.

Ytterligare information hur du konfigurerar detta finns i dokumentationen.

När jag lägger min nextcloud ip i trusted_domains då fungerar.
Vet nån hur man ska fixa problemet.

mvh
Njanja

Permalänk
Medlem

Unifi controller bakom nginx

Här är en exempelfil hur min controller fungerar bakom nginx:

server { listen 80; server_name unifi.sites.se; #index index.htm index.html index.nginx-debian.html; access_log /var/log/nginx/unifi.access.log; error_log /var/log/nginx/unifi.error.log; location / { rewrite ^/(.*)$ https://unifi.sites.se/$1 permanent; } location /inform { proxy_pass http://localhost:9080; } location /dl/ { proxy_pass http://localhost:9080; } location ~ /.well-known { root /var/www/html; allow all; } } server { listen 443 ssl http2; server_name unifi.sites.se; ssl_certificate /etc/letsencrypt/live/CERT/fullchain.pem; # managed by Certbot ssl_certificate_key /etc/letsencrypt/live/CERT/privkey.pem; # managed by Certbot ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on; ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384; ssl_ecdh_curve secp384r1; ssl_session_cache shared:SSL:10m; ssl_session_tickets off; ssl_stapling on; ssl_stapling_verify on; ssl_dhparam /etc/ssl/certs/dhparam.pem; resolver 8.8.8.8 8.8.4.4 valid=300s; resolver_timeout 5s; # Disable preloading HSTS for now. You can use the commented out header line that includes # the "preload" directive if you understand the implications. add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"; add_header Strict-Transport-Security "max-age=63072000; includeSubdomains"; add_header X-Frame-Options DENY; add_header X-Content-Type-Options nosniff; access_log /var/log/nginx/unifi.access.log; error_log /var/log/nginx/unifi.error.log; proxy_cache off; proxy_store off; #proxy_ssl_verify off; #proxy_ssl_protocols SSLv2 SSLv3 TLSv1 TLSv1.1 TLSv1.2; #add_header X-XSS-Protection "1; mode=block"; #add_header X-Frame-Options SAMEORIGIN; #add_header Strict-Transport-Security "max-age=31536000; includeSubdomains"; location /inform { proxy_pass http://localhost:9080; } location /wss/ { proxy_pass https://localhost:9443; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_read_timeout 86400; proxy_buffering off; proxy_set_header Origin ''; } location / { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_pass https://localhost:9443; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_read_timeout 86400; proxy_buffering off; } }

Notera att vissa tjänster inte fungerar på port 443 därför svarar jag på dem på port 80.
9080 är port 80 i docker containern för unifi
9443 är port 443 i docker containern.

Permalänk
Medlem
Skrivet av njanja:

Vet nån hur man ska fixa problemet.

Problemet är förmodligen att du försöker nå en tjänst via FQDN (A-record/CNAME) medans din NextCloud svarar med sitt egna ceritifikat selfsigned.intranet.local

Permalänk
Medlem
Skrivet av hasenfrasen:

Problemet är förmodligen att du försöker nå en tjänst via FQDN (A-record/CNAME) medans din NextCloud svarar med sitt egna ceritifikat selfsigned.intranet.local

Hej

Vet du vad behöver jag göra att fixa problemet? Ska jag ta bort certifikatet från Nextcloud server?

mvh
Njanja

Permalänk
Medlem
Skrivet av njanja:

Vet du vad behöver jag göra att fixa problemet? Ska jag ta bort certifikatet från Nextcloud server?

Du lär fixa ett giltigt certifikat från t.ex. https://letsencrypt.org/ som presenteras för web-klienten när den försöker ansluta till dina hemmasnickrade TLS/SSL-tjänster.

Permalänk
Medlem
Skrivet av hasenfrasen:

Du lär fixa ett giltigt certifikat från t.ex. https://letsencrypt.org/ som presenteras för web-klienten när den försöker ansluta till dina hemmasnickrade TLS/SSL-tjänster.

Hej

Har du någon guide för det?

mvh
Njanja

Permalänk
Medlem

Let's Encrypt har väldigt bra guider för hur man gör. Ca 240 miljoner andra websajter använder det så det kan inte vara så svårt. Det hela går ut på att letsencrypt måste hitta den speciella och unika fil på din sajt som bekräftar att du är du.

Permalänk
Medlem

Kolla DBtech på tuben. Det finnns guider för NGINX, Cloudflare samt även generella tips för att stärka säkerheten på server.