Jag har satt upp en omvänd proxy, med mina tjänster som går genom den. Finns det något sätt att filtrera anslutningar, så att den i princip blockerar en anslutning och bara returnerar sidan inte hittad, och ger mig någon sorts meddelande om att någon försökte koppla upp sig, så att jag kan tillåta framtida anslutningar från den IP-adressen eller enheten (helst det fungerar på mobiltelefoner via cellular, är dock osäker på hur det skulle fungera om det är via IP).
Varför inte bara ha ett VPN som bara tillåter betrodda enheter att få tillgång till ditt hemnätverk?
Det säkraste sättet (förutom att inte göra det alls) är att köra en omvänd proxy på en VPS och tunnla tillbaka till din nätverksrouter via ett VPN till dina självhostade tjänster.
Trafik får endast tillgång till vissa portar via din VPN-anslutning, du kan använda geo-blockeringslistor och IPS och annat om du vill.
För att returnera ”inte funnen”, pekar du bara inte URL:en till den tjänst du inte vill visa, så gör den precis det.
Jag använder certifikatbaserad autentisering för interna tjänster som är avsedda för eget bruk. Det kräver dock att du har din interna CA. Jag använder FreeIPA som IAM-verktyg, som även skriver ut användarcertifikat (gör PKI-livet enklare) som kontrolleras av den omvända proxyn. Om du kan visa ett giltigt certifikat från FreeIPA är du tillåten. Dessutom har jag nyligen lagt till att den kontrollerar om du tillhör en viss LDAP-grupp baserat på CN i certifikatet.
Vad du vill är nog inte inom nginx:s räckvidd, tror jag. Du behöver en riktig brandvägg framför den för att filtrera trafiken som du beskrev. Jag hostar hemifrån, så jag har satt PFSense framför min server. Jag har redan satt upp geo-blockering och håller på att lista ut Snort (IDS/IPS). Det finns många andra intressanta paket och själva PFSense… det är en liten rabbitarie
Om du använder VPS istället vet jag inte om det finns någon mjukvarulösning som kan ge den kontrollen. Jag skulle fortfarande använda PFSense i en separat VM, som rutterar all trafik genom den i så fall.
Du kan göra något så enkelt som att skapa en grundläggande inloggningssida, och inte dirigera din sida förrän användaren sätter en flagga när de loggar in. Eller kan du förstärka ovan setup genom att lägga till OAuth2 med JWT.
Filtrering efter IP är svårt när det gäller mobiltelefoner eftersom du får en annan IP när du ansluter, åtminstone med AT&T. Jag använder ett VPN för det, men din VPN-server måste vara tillgänglig på webben, och det innebär nog att betala för en molnserver. Digital Ocean är billigt, ca $5/mån.
Det är inte bara en konfiguration, men som andra sagt, verkar det som att ett VPN är det du letar efter. Jag har använt WireGuard ett tag, och även om det är lite omständigt att konfigurera initialt, fungerar det utmärkt och är mycket presterande. När du har konfigurerat det är det bara att klicka på en knapp för att aktivera.
Grundläggande lösenordsskyddad HTTP-autentisering skulle vara mycket enklare.
Använd Vouch Proxy, du kan lägga till OAuth och kräva att användare autentiserar sig via Google innan den omvända proxyn skickar dem till dina tjänster.
Jag vet inte om det redan föreslogs, men Cloudflares gratisplan gör det möjligt att aktivera e-post 2FA som landningssida för vilken webbplats som helst som använder Cloudflares DNS.
Menar du via IP?
Till exempel kör jag swag docket-bild från Linux-server.io.
Och några tjänster är endast tillgängliga med min interna IP.
Swag använder nginx.
Jag tror det är det du letar efter!
Anledningen till att jag inte gjorde det med ett VPN är för att jag har vissa saker jag vill att folk ska ha enkel tillgång till, då jag har några tjänster som jag vill att vänner ska kunna komma åt, och jag har några speltjänster som jag vill att alla ska kunna nå utan tillgång till mina andra tjänster.
Jag har en liknande setup. Tjänster som Airsonic, Nextcloud och Bitwarden är på min nginx-omvända proxy. Jag CNAME-använder för varje tjänst och använder nginx som omvänd proxy och för att hantera mina SSL-certifikat.
Jag har också ett VPN upprättat och undrar vilken setup jag bör använda mer. Använder VPN för att tunnla in och komma åt allt internt eller använder setupen ovan?
Det finns några nämnda om en VPS här, från min förståelse betyder det att jag måste betala en tjänst för att hosta den, eller är en VPS något jag kan hosta själv?
Jag försöker hålla mig till saker jag kan hosta helt själv så jag slipper hantera återkommande kostnader; jag är 15 och har egentligen ingen inkomst förutom att klippa gräsmattor.
Så jag har tittat på swag och det är vad jag letar efter, men jag använder för närvarande nginxproxymanager och jag gillar att ha webb-UI för att experimentera med inställningar. Jag är ny med mycket av detta nätverksarbete så mycket av det jag gör är trial and error, och att ha GUI gör det mycket snabbare att experimentera. Jag tror att jag kan byta till swag i framtiden, men jag tänker nog använda Cloudflares gratisplan för att proxy och sätta upp en brandvägg, som några andra har föreslagit.
För dina interna appar, är det inblandad autentisering? Räcker det? Du borde kunna lägga till autentisering framför din omvända proxy, och sedan ge dig själv och de du vill ska kunna få tillgång ett användarnamn/lösenord. För att göra det säkrare kan du också ha autentisering för dina interna tjänster.
Du behöver inte bara välja ett. Till exempel använder jag min omvända proxy för Nextcloud och andra saker jag behöver vara tillgängliga för världen. Jag har mitt VPN för Remote Desktop och annat som inte behöver vara tillgängligt för världen.
Jag tror att när folk föreslår ett VPN från en VPS, menar de bara en annan server och en brandvägg
När jag hostade själv brukade jag ha min lagring (NAS) på en lagringsvlan, mina interna tjänster på en ”server”-vlan, och mina externa tjänster på en DMZ-vlan. Servrarna åtkomst till lagringen via kerberiserad NFSv4 genom brandväggen, och för DMZ-nätverket var NFSv4 det enda trafiken som var tillåten inuti (förutom etablerade / relaterade).
Detta skapar en Router on a stick setup som kanske inte är perfekt för alla, men om trafiken är lågvolym eller ditt nätverk är tillräckligt snabbt, så är det inget problem. För mig har jag en 10G backbone och de flesta klienterna är 1G. För vanligt lågtrafik är 1G tillräckligt (förutsatt att din internetanslutning är snabbare än 1G förstås)
Och känn till att du inte behöver 2 fysiska maskiner. Jag körde min på Proxmox. När det gäller NFS-anslutningar kan inte LXC-containrar montera dem, och all lagring måste monteras utanför containern, vilket kan skapa behörighetsproblem, så jag körde det som virtuella maskiner.
Nu kan jag förstå varför du vill hosta själv, men du bör verkligen titta på alla gratisnivåer av olika tjänster och se om de passar dina behov. Internet är en fientlig plats.
Redigering:
Det finns få saker som är så attraktiva och dyra som att hosta själv. Flyttade allt till molnet runt nyår, och jag sparar pengar varje månad. Strömförbrukningen var ensam mer än vad mina molntjänster kostade. Allt är förstås krypterat.
Några snippar av kalkyl:
Self-hostad:
- Synology 4-bay NAS med 4 x 6TB-enheter : €1280
- Fjärrbackup av 1TB för 5 år : €375
- Proxmox-server : €847
- Lokalt backup 8 TB : €167
- Strömförbrukning : (NAS 45W, server 20W), 569 kWh / år @ €0.3 = €170 / år, eller €853.5 över 5 år.
Totalt kostar det €3522.5 för 5 år, eller €704/år om hårdvaran håller i 5 år. €58.5/mån.
Jämför det med min molnsetup:
- Jottacloud abonnemang : €80/år, €400 för 5 år.
- Microsoft Family 365-abonnemang : €59 / år, €295 för 5 år.
- Lokalt backup-server : €300
- 8 TB backup-enhet : €167
- Strömförbrukning: 15w, 131 kWh / år, €220 över 5 år.
Totalt €1382 för 5 års molntjänst, eller €276 / år. (€23/mån)
Så förutom att spara pengar varje dag, får jag företagsklassutrustning som hostar mina saker, och jag behöver inte längre oroa mig för att hårdvaran ska fallera. Jag oroar mig inte heller (allt för mycket) för att patcha sårbarheter eftersom jag har 0 öppna portar i min brandvägg. Jag patchar dock dagligen. Jag har en lokal backup av allt, och data i molnet är krypterad antingen med rclone eller Cryptomator.
Några av de pengar jag sparar går istället till att köpa tjänster från Microsoft Azure (det är vad jag kan, andra kanske föredrar Google eller aws). Framtiden rör sig till molnet, och behovet av lokala sysaditer minskar.
Titta på PiVPN. Du kan ställa in antingen WireGuard eller OpenVPN och det gör i princip allt åt dig. Det finns bra tutorials för att ställa in det på en Raspberry Pi på pimylifeup-webbplatsen.