Nginx, Windows, SSL, Reverse Proxy, Cloudflare, HTTP Auth, gratis domän med mera – full guide!
Hej alla, har länge funderat på och göra en fullständig och detaljerad guide för hur man får SSL via Let's Encrypt på Windows att fungera, samt härda nginx, och sätta den i Reverse Proxy med Cloudflare som CDN.
Bestämde mig idag för att göra detta och lägga ut den på sweclockers.
Har gått över till unRaid från windows, då jag ville köra mina diskar i en Array istället för JBOD.
Och då passar det bra och skriva ner allt detta utifall jag skulle glömma bort det =P
Samt att jag känner att jag vill dela med mig av min kunskap, och hjälpa andra som inte lyckats få till sin nginx server
Och eftersom de finns folk som använder sig av windows som OS för sin webserver så hoppas jag att folk kommer ha nytta av min guide.
Jag har inte hittat någon online som har i detailj gått igenom hur man gör för att härda sin nginx,
sätta den i reverse proxy å förbättra säkerhet i windows versionen av nginx.
Utan det jag hittade online var, massor av människor som blandar ihop linux och windows config's,
skriver felaktig information, utdaterade video's, och en massa svammel online.
Folk blir förvirrade och kommer inte vidare utan ger upp, eller så får dom inga svar på frågor dom har ang sitt problem :S
Guiden kommer att bestå av.
- Vad för mjukvara ni bör använda er av.
- Färdig konfiguration för reverse proxy till nginx.
- Färdig konfiguration för SSL & auto redirect till https://
- Hur man får tag i och genererar SSL Cert via Let's Encrypt på Windows.
- Hur man registrerar gratis domän, som kopplas till cloudflare CDN.
- Plus lite till
Guide Start:
Har ni dessa program, bra!
Har ni inte det? ladda så fall ner dom.
Ladda ner 7-zip kommer att användas för uppackning. ( välj 64bit )
Ladda ner Notepad++ kommer att användas för config. ( välj 64bit )
Ladda ner Nginx <-- Välj Legacy version nginx/Windows-1.14.2
Ladda ner Let's Encrypt ( PKISharp/win-acme ) (Högre version finns ute, jag föredrar v1.9.12.1)
Ladda ner .NETframworks senaste <--- Direkt länk
Ladda ner Nssm ni ska ha nssm 2.24 (2014-08-31) <--- Direkt länk
Ladda ner Php Här kan ni välja mellan ett par stycken, t.ex Non Thread Safe eller Thread Safe
( ni kan själva läsa vad för skillnad det är mellan dom )
men det jag valde var VC15 x64 Thread Safe (2019-Feb-06 02:14:58)
Ladda ner VC CRT 14 (Visual Studio 2015) om ni inte redan har det. ( krävs för att php 7.x ska fungera )
**Se till att erat Windows är uppdaterat och ni har dom senaste uppdateringarna!**
Mappar i C:
Gå in i C:\
och skapa två mappar där, döp den ena till
nginx, den andra till Letsencrypt
Packa upp nginx-1.14.2.zip och skicka allt innehåll till C:\nginx
Ska se ut så här.

När ni ändå är här inne se till och skapa en mapp som heter php och packa upp allt innehåll från
php-7.3.2-Win32-VC15-x64.zip till php mappen.
Skapa även en mapp som heter www
Det är här ni kommer att ha eran hemsida, istället för html som är default för nginx.
Navigera in till C:\nginx\conf och,
öppna upp nginx.conf i notepad++ och gå ner till rad 44, ändra om från html till www > spara.
Gå tillbaka till C:\
Packa upp win-acme.v1.9.12.1.zip och skicka allt innehåll till C:\Letsencrypt
Ska se ut så här

Packa nu upp nssm-2.24.zip zippa upp antingen win64 eller win32
Navigera sedan till C:\Windows och lägg nssm.exe i C:\Windows
(Jag använde win64 då min VM är 64bit OS)
Ska se ut så här

Tjänster i windows.
Efter att ni lagt nssm.exe i C:\Windows ska vi skapa 2 stycken nya tjänster ( services ) En för nginx och den andra för php
Skriv detta i cmd & sedan i själva nssm som jag gjort

Skriv detta i cmd & sedan i själva nssm som jag gjort

När ni gjort klart och inte fått något fel så ser det ut så här när tjänsterna är klara och fungerar felfritt!

Konfigurera PHP.
Navigera nu in till C:\nginx\php och leta upp filen som heter " php.ini-development " kopiera denna fil, och döp sedan om den till php.ini, windows kommer att fråga om vill ändra om själva filtillägg, svara ja ( file extension på engelska )
Öppna sedan php.ini med notepad++ navigera ner till rad 905 ta bort ; från de rader jag har gjort på bilden nedan.
( ignorera den blå bollen jag la på sidan, jag la till den där så ni inte missar vart ni ska ändra! )

Spara erat php.ini efter ni gjort dessa ändringar.
Det finns mer man kan göra i php.ini men inget ni behöver göra nu.
Alternativt kan ni använda min php.ini file jag laddade upp på min github,
(Den är lite annorlunda än standard, men båda fungerar, upp till er!)
https://github.com/Zidichy/Server/blob/master/nginx/php.ini
Navigera nu till 127.0.0.1 i webläsaren
Fungerar allt så ser de ut så här

Öppna upp portar. (Krävs även att ni har ett publikt IP!)
För att öppna upp port 80 & 443 logga in i eran router och gå port sektionen. (Port Forwarding)
För att hitta vilken adress eran router har, navigera till
Control Panel\Network and Internet\Network and Sharing Center > change adapter settings > Network Connection Details > högerklicka erat nätverk > status > Details > IPv4 Default Gateway
Detta är den adress ni skriver för att komma åt erat router interface.
Jag valde och använda 10.0.0.1 då jag gillar A klass nätverks adress
Men dom flesta brukar ha C klass, 192.168.0.1 / 192.168.1.1

Ni kan även ta fram Cmd och skriva ipconfig.

Lyckas ni ändå inte komma åt router interface så skriv vilken router ni har i kommentarerna så hjälper jag er.
Eller om ni vill ha hjälp med att ställa in port config i router så är det bara och säga till
P.g.a. att de finns så många olika routrar så blir det svårt och visa exakt hur ni skall göra,
men ni kan få se hur min port konfig ser ut.
Jag länkar även till https://portchecker.co/ som kollar om eran port är öppen efter att ni öppnat upp dom i routern.

Nu till domän & SSL.
Gå till dot.tk och skapa domän, ni kan få ha domänen helt gratis mellan 1-12 månader.
Det går bra och förlänga tiden efter att den gått ut om ni så önskar.

Jag registrerade just min temporära domän jasmyn.tk,
den kommer vara inaktiv efter 30 dagar då jag bara valde 1 månad.
Varför jasmyn? Random Name Generator ^^
När ni valt namn och sedan gått vidare kommer ni till checkout, fyll i era uppgifter som jag gjort & klicka på complete order.

Fyll ip de publika IP ni har, klicka sen på continue.

Gå till Cloudflare.com skapa konto och logga in.
Lägg till eran nyskapade domän från .tk > add site > välj sedan " Free " under Select a plan > Confirm plan.

Klicka sedan på DNS efter att cloudflare gjort klart sin scan. Fyll i din domän och ditt IP nummer som jag gjort i bilden nedan.

Vill ni ha www. så lägg till det som en A post ( A Type ) i cloudflare's DNS, jag valde och inte använda www. då det är en subdomän och dom börjar fasas bort från dom flesta site:r då flera hellre vill änvända sig av sin apex

Längre ner under DNS står det Cloudflare Nameservers
kopiera båda NS från cloudflare och gå sedan tillbaka till freenom.com
Navigera sedan till > Services > My Domains > Manage Domain > Management Tools > Nameservers
och lägg till dom som jag gjort i bilden nedan.

Tillbaka till freenom | Navigera till > Services > My Domains > Manage Domain > Manage Freenom DNS | och ta bort IP:t som vi la till i början

När cloudflare är klar så kommer du få mail som ser ut så här

De finns massor av inställningar man behöver ställa in på cloudflare men jag tar det en annan gång
Se dock till att gå till Crypto > och sätt SSL i Full (strict)

Ni kan nu stänga ner freenom.com, då allt sköts från cloudflare.com
& nedan ser ni att cloudflare nu tar hand om ssl på jasmyn.tk

Om ni känner för att köpa en .se domän så rekommenderar jag one.com deras support är väldigt bra,
& jag har själv domän från dom
Men detta är ej reklam för one.com och jag inte är ute efter att ge ut min värvningslänk som man får via one.com för att tjäna pengar. Utan guiden är tänkt för att hjälpa folket med SSL, nginx ect.
Har ni redan domän och vill peeka den från erat webhotell till eran server, så kan jag hjälpa till med det också.
Nu till Let's Encrypt.
Varför generera eget SSL om nu vi har SSL från cloudflare?
Pga plex, tautulli, sonarr, ect dessa program kräver nämligen att man har ett eget SSL Certifikat om man ska få allt att fungera!
Samt att RP inte skulle fungera med SSL utan ett eget certifikat.
Varför inte ta LE innan CF ?
Det finns en anledning till varför.
Navigera till C:\Letsencrypt > starta letsencrypt.exe som administratör
och använd samma alternativ som jag gör i bilden nedan, byt självklart ut min temp domän mot eran FQDN.
Dyker en förfrågan upp ang mail, skriv då in en som ni vill använda. ( man brukar använda admin@xxxx.xx )
Det är upp till er om ni vill sätta in förnyelse som task, jag rekommenderar att ni gör det.
(Krävs dock att man har lösen på sitt windows, och inte direkt inloggning.)

Viktigt att nämna för er är att man behöver lägga till www. som en subdomän när man genererar sitt ssl certifikat om man vill ha www.mydomain.com fungerandes, inte bara i cf som de krävs en A /CNAME post.
När ni genererat erat SSL Cert från Let's Encrypt navigera så som jag gjort i bilden nedan, och verifera att filerna ligger där!

Nginx conf.
Efter att vi nu kommit så här långt, så behöver vi ändra om i configs för nginx.
Gå till zidichy.github
Hämta ner all .conf som finns där, klicka på den gröna knappen ( clone or download ) > välj download zip
När zippen är nere, dra ut allt på skrivbordet.
Mappen site-confs & proxy-confs ska läggas in i C:\nginx\conf
.conf filer från zippen i Server-master\nginx mappen ska ersätta de filer som redan finns i mappen C:\nginx\conf
Öppna > site-confs > domain.conf > editera i notepad++ ändra där det står domain.com till eran domän
Öppna > conf > strongSSL.conf > editera i notepad++ ändra där det står domain.com till eran domän,
ni behöver även # de headers som har " report " i strängen om ni inte går och registrerar er hos report-uri.com
När ni e klar så kan ni testa å köra en nginx -t i cmd, se bild nedan.
Och sedan en nssm restart nginx för att se till så nginx laddar om alla inställningar

Done!
Övrig Info.
Så hur fungerar Reverse Proxy ?
En omvänd proxy tillåter er att komma åt lokala applikationer via internet fastän dom sitter bakom eran lokala brandvägg.
proxy:n vidareskickar själva begäran till den server som själva applikation är kopplad till, och ger er tillgång till applikation via internet. Vi kopplar sedan applikation till nginx som i sin tur använder sig av port 443 som är krypterad med RSA 2048 bit (SHA256withRSA).
Vilket gör att all trafik som går till och från applikation blir krypterad.
Mer info här https://www.cloudflare.com/learning/cdn/glossary/reverse-prox...
Navigera till C:\nginx\proxy-confs\ > här inne ligger färdiga .confs för många tjänster, plex, sonarr, tautulli osv
Eventuellt behöver ni öppna upp port 32400 för plex, om något strular.
Vill ni ha något annat i RP än det som finns i min proxy-confs så får ni skapa en .conf och lägga till korrekt kod.
Det kommer även att komma en video guide där jag gör allt som står i denna guide.
Detta för att underlätta ytterligare för alla som vill ha en grymt säker nginx server med ssl, reverse proxy & CDN!
Hoppas att denna guide hjälpt någon.
Denna guide tog tid å göra ^^ ett par timmar för att vara mer exakt
Vore kul å se vad ni tycker om min guide, tar emot all form av kritik
Vad kunde jag ha gjort bättre?
Var något i guiden otydligt ?
------------------------------------------------------>
Lite Q&A
Q1: Varför skapa guiden för windows och inte linux?
A1: För att det redan finns så många olika guider ute på nätet / youtube för just nginx på linux, samt att nginx fungerar väldigt bra på windows om man har allting korrekt inställt. Utöver det så, det är inte alla som känner sig bekväm i linux miljö,
och dom som väljer och stanna i en windows miljö, men ändå vill ha en väldigt säker site, borde få kunna ha det!
Q2: Varför använda Windows 7 istället för Win10 / Windows Server?
A2: Därför att Windows 7 är stabilt, simpelt att säkra, resurssnålt, väldigt likt windows server 2008,
och fler människor har windows 7 licenser, än vad det är folk som har windows server licenser,
utöver det, äldre maskiner har garanterat drivrutiner för windows 7, men kanske inte för windows 10.
Plus att denna guide fungerar klockrent på windows 7, windows server, windows 10 ( Alla versioner )
Q3: Varför så mycket säkerhet? Räcker det inte med vanligt ssl från LE?
A3: Först antar jag att det är upp till var och en och avgöra hur mycket säkerhet man vill ha.
Men för min del så kan jag inte få för mycket, juh mer säkerhet desto bättre.
Tyvärr räcker det inte enbart med vanligt SSL numera då jag vet hur mycket skada man kan göra genom att enbart få tag i serverns ip och sen kolla upp vilka subdomäner domänen har samt vilka headers som webservern tillåter.
Många site:r saknar t.ex. skydd mot att hamra login portaler. ( brute force )
Att ha klen säkerhet på webbservern är inget jag vill ha då den är kopplad till stor del data jag äger.
Q4: Varför ingen VPN ?
A4: Guiden är tänkt för att inte kosta något annat än kanske just tid, dom flesta bra VPN kostar.
Men självklart har jag VPN till min domän. Jag använder mig av AzireVPN.
Q5: Vart är Fail2Ban ?
A5: A5: Drygt å få funktionellt på windows ^^ och jag använder mig nu av unRaid så jag har f2b installerat
Men vill ni ändå ha det till windows så kan ni testa wail2ban som är en port av fail2ban för windows!
Jag hade 2FA ( Two-factor authentication ) på min site när allt låg på windows, väl inloggad så finns levels på users, så även om man lyckas ta sig in på site:n så kommer man ej åt något då allt är satt till minst poweruser med IP kontroll.

Q6: Varför sätta nginx i reverse proxy?
A6: P.g.a. högre säkerhet, Att enbart behöva öppna upp 2 portar i routern (80 & 443) och sedan skicka allt genom port 443 som är krypterad, ger er och alla tjänster ni vill ha tillgängligt utanför erat lokala lan väldigt hög säkerhet, och lägger man sedan till HTTP Authentication + Cloudflare CDN HTTP Proxy, så gör ni det överdrivet jobbigt för nån att ens försöka komma åt era tjänster ni har utanför erat lokala lan. Så vitt jag vet går det inte
Så här blir de om man ens försöker.

Ett par tjänster jag har tillgång till via min site som enbart går att komma åt om man är inloggad är:
Plex, Tautulli, Sonarr, Radarr, Grafana, Varken, Pihole
Då jag har väldigt stort biblotek av media, är det underbart och komma åt alla sin media vart man än befinner sig,
allt jag behöver är en uppkoppling & webbläsare =P
Att få igång HTTP Auth kräver dock att ni kör Organizr med min config.
Men det går att koda så Organizr använder sig av t.ex Wordpress som main template.
( Det går och använda HTTP Auth utanför Organizr, men krävs att ni ändrar i config samt hämtar hem andra filer.)
Så vart är HTTP Authentication?
Den ligger i C:\nginx\auth.conf och är kopplad till errorV2.conf som i sin tur är kopplad till Organizr
Allt ni behöver göra är att installera Organizr
Plex är för dom som inte känner till det som ett eget Netflix, fast bättre då det inte kostar mig något per månad,
samt att jag inte behöver gå efter det skräp utbud som netflix ger sverige.
*****
Kan tänka mig och göra guide på hur man ställer in allt på cloudflare.com så säkert det bara går under ett gratis konto
Kan även tänka mig och göra detaljerade guider på hur man installerar & korrekt konfigurerar
Plex, Tautulli, Sonarr, Radarr, Grafana, QbitTorrent, uTorrent, rTorrent/ruTorrent, Varken, Fillezilla både client och server.
Och mycket mera!
Vad sägs om att få en korrekt konfigurerad rtmp server, så när dom som streamar på t.ex twitch.tv, vill eller behöver gå ut så kan dom helt enkelt ta med sig streamen ^^
Kan även tänka mig att göra guider för att få en korrekt uppsatt DNSSEC.
Även för sPF, DKIM, DMARC, Så slipper ni all form av spoofing,
Eller den nya säkerhets standarden för epost servrar som är
MTA Strict Transport Security & SMTP TLS Reporting.
Jag planerar även att skapa guide för hur man säkrar sitt windows OS när man använder det som en server för sin site.
Dvs, Inget / ingen, kommer att kunna ta sig in och förstöra för er!
Extra info.
Så att jag inte glömmer det,
Min konfig är även konfigurerad på sätt att google och andra sökmotorer ej kan hitta site:n när man söker efter den.
Dvs crawlers & bots kan ej indexa siten, så det måste ni ändra om ni nu vill ha det tillgängligt för SEO.
Alla headers i min konfig är konfigurerade för hög säkerhet,
Dvs: Allow-Origin-Access-Control-Only ~> eran domän!
Scan Reports från securityheaders.com & immuniweb.com/websec (Detta är vad min nginx config ger när allt är klart!)




https://www.immuniweb.com/websec/?id=KjpVlv4P
*****
Nu slutligen, om nån ser något i min konfig som kan förbättras, skriv gärna och berätta vad du hittat, och hur de förbättrar själva konfigurationen
Snälla använd inte bildhost utan ssl i min tråd tack
Använd imagez eller imgur
Denna guide skrevs & skapades av mig Zidichy / xTL
All konfiguration skedde på min Windows 7 VM
Men skrevs på mitt primära system Win10 😋
Önskar ni skicka pm oavsätt plattform så går det utmärkt! 😊
Ni hittar mig nedan.
**Jo en sak till 😋😊 **
Jag antar att en del av er eller kanske alla? undrar varför jag visar IP:t jag använder mig av i min guide.
Och jag gör det p.g.a. det inte är mitt IP
Det är IP:t jag fick slumpmässigt från AzireVPN Så jag kan lugnt visa upp IP:t utan att det händer mig något
Detta är något som många som skapar guider på nätet undviker att visa upp, jag inser det + att jag förstår varför.
Men jag ville inte dölja IP:t utan jag löste det på ett annat sätt
https://check-host.net/ip-info?host=193.183.116.88
https://ipx.ac/193.183.116.88
Discord Info 😊

Guiden skrevs den 8 februari 2019 men publicerades inte förrens den 9 augusti 2019
~Fin
[ Fractal Design Define S Svart ] [ ASUS ProArt X670E-Creator WIFI ] [ Amd Ryzen 9 7950x3D ]
[ G.Skill Trident 64GB DDR5 6000MHz ] [ Noctua NH-D15 Chromax Black ]
[ Western Digital Black SN850X 1TB Gen4 ] [ Samsung 870 QVO 2TB MZ-77Q2T0BW ]
[ ASUS TUF GeForce RTX 3080 10GB Gaming OC ]
[ Corsair AX860 80 Plus Platinum ] [ Gigabyte 32" M32U IPS 4K 144 Hz HDMI 2.1 ]