Säker (och enkel) webserver hemma

Permalänk
Medlem

Säker (och enkel) webserver hemma

Jag håller på med lite "smarta hem" saker (styra belysning och motorvärmare, temperaturloggning, energiförbrukning, ...) och har nu behov av att ta emot http post anrop med lite data som skall in i min MySQL databas. Mina programsnuttar är alla skrivna i java och jag kör även en Tomcat installation som endast är tillgänglig på det interna nätverket.

I nuläget är inga portar i min router öppna från utsidan så jag måste implementera en hyfsat säker lösning för detta.

Lösning 1 (den jag för nuvarande funderar mest på):
Jag har skaffat en Raspberry Pi som jag kör internt och som jag konfigurerat enligt http://mattwilcox.net/archives/setting-up-a-secure-home-web-server-with-raspberry-pi/ fram till att jag installerat brandväggen.

Fråga 1 - Vad är säkrast av följande:
Alt a: Fortsätta guiden ovan och installera nginx med php samt öppna en port i brandväggen mot Pi:en och skriva ett php skript som lägger in data i databasen?
Alt b: Jag är mera komfortabel med java som programmeringsspråk och då installera och konfigurera java och Tomcat på Pi:en samt säkra upp enligt http://www.tomcatexpert.com/blog/2011/11/02/best-practices-securing-apache-tomcat-7?

I båda fallen så använder Pi:en användarnamn och lösenord som är helt unika, dvs används inte någon annanstans.

Lösning 2 (endast tanke):
Strunta i Pi:en och instället installera en virtuell maskin på min Hyper-V maskin och köra en webserver (under Windows eller Linux).
Fråga 2 - Är denna väg att säkerhetsmässigt föredra?
Fråga 3 - Vilket OS och finns det någon bra konfigureringsguide för ett säkert websystem?

Tacksam för era tankar och förslag på väg framåt.

Permalänk
Inaktiv

Det hade ju definitivt varit häftigast med Raspberryn Jag är inte sådär superduper bra på Java, men jag hade skrivit min egen backend server i antingen C++ eller Node.js, beroende på workload och hur snabbt servern måste prestera. Förstår att C++ troligtvis är överkurs för dig, så jag hade definitivt rekommenderat dig att göra en RESTful API server i node.js, då en RESTful API server är precis det du behöver.

Det är väldigt enkelt och stört roligt att göra en sånhär i node.js, och du får väldigt hög säkerhet om du kör med krypterad HTTP lina (HTTP med SSL/GnuTLS, HTTPS), samt om du implementerar den på rätt sätt (autentisering med anv. och lösen, som ger en unik session-token, samt alltid skickar en unik request token för varje request).

Hade BTW rekommenderat dig att köra på MariaDB istället för MySQL, APIn för MariaDB till javascript är helt underbara, och mariadb är bakåtkompatibel med mysql om jag inte missminner mig

Gör du detta kan du dessutom samla all backendfunktionalitet på ett och samma ställe, oavsett vilket frontend du vill utveckla/använda (android/webb/native app)

Permalänk
Medlem

Väcker min gamla tråd då frågan finns kvar, men nu funderar jag mera på lösning 2, dvs en virtuell maskin (under Hyper-V eftersom jag har det snurrande redan).

Vad skulle ni rekommendera idag för OS och webserver för att hantera enkla http-anrop utifrån det stora internätet som skall lägga saker i en databas (typ 1 anrop/min)?
Vad jag läst mig till så kanske nginx kan vara något, men då kvarstår ändå vilket OS.

Jag vill ha det enkelt och säkert så om ni kan ge mig länkar till konfigureringssidor (typ så här säkrar du OS:et och så här säkrar du webservern) så skulle det uppskattas.

Tack på förhand!

Permalänk
Medlem

Hej!

Ett tips är att låta http-anrop gå via ett CDN (Content Delivery Network). Detta har flera fördelar. Dels så kommer statisk information som bilder och css filer kunna skickas från en central server närmre slutanvändaren och slipper belasta din server samtidigt som det kommer gå snabbare för användaren.
Den största fördelen med ett CDN när man kör på en server hemma (vilket jag också gör på min Raspberry Pi) är nog ändå att den spärrar DDOS-attacker redan där och du slipper få en massa anrop till din router.

Cloudflare är ett CDN som funkat bra för mig och har gratisplaner man kan köra med.

I övrigt så är jag ingen expert på säkerheten, men genom att ha en egen användare för webbsidan som enbart har rättigheter till den mapp där sidan ligger och en egen användare för SQL-databasen som bara har tillgång till det den ska ha tillgång till så kommer du nog långt.

Jag kör Nginx och tycker det fungerar klockrent. Har testat det med både MySQL och MariaDB som funkar ungefär likadant.