Hur du installerar och konfigurerar en webbserver
Publicerat 7 oktober 2009 av Christian
En kortfattad guide som visar hur du ställer in en helt ny webbserver eller VPS med Debian 5.0. Jag antar att du vill ha Apache, PHP, MySQL, SFTP mm. Dessutom antar jag att det bara behövs ett användarkonto och ett domännamn som pekar på den här servern.
Obs! Jag lär bara ut grunderna här, och jag är inte en certifierad eller utbildad sysadmin. Dock har jag använt och administrerat Linux-servrar i flera år. Vill du veta mer, rekommenderar jag boken Linux Administration: A Beginner’s Guide.
Logga in och kom igång
Logga in på webbservern via SSH. Från Windows kan du göra det med PuTTY eller OpenSSH. (Detaljerade instruktioner för PuTTY finns exempelvis på The Electric Toolbox.)
Byt lösenord på användaren root (eftersom du förmodligen har fått ditt lösenord skickat via okrypterad e-post):
passwd
Ge servern ett namn (exempelvis namn.dindomän.se) genom att skriva det i den här filen:
nano /etc/hostname
Och lägg till samma namn sist på första raden i filen hosts:
nano /etc/hosts
Så att raden ser ut så här:
127.0.0.1 localhost.localdomain localhost namn.dindomän.se
Låt servern sedan läsa in namnet direkt, utan omstart:
/etc/init.d/hostname.sh start
Uppdatera apt:s information om de senaste versionerna av program/paket och uppgradera redan installerade paket:
apt-get update apt-get upgrade
Gör landsinställningar för att få stöd för exempelvis åäö via SSH:
apt-get install locales dpkg-reconfigure locales
Markera sv_SE och sv_SE.UTF-8 i listan och välj i nästa steg sv_SE.UTF-8 som standard.
Konfigurera brandväggen
Brandväggen IPTables är redan installerad, men vi vill aktivera den med några regler:
iptables -A INPUT -i lo -j ACCEPT iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -A INPUT -p tcp -m tcp --dport ssh -j ACCEPT iptables -A INPUT -p tcp -m tcp --dport www -j ACCEPT
Detta accepterar alla inkommande anslutningar på det lokala gränssnittet (”lo” eller ”localhost”), alla redan etablerade anslutningar, samt inkommande anslutningar på port 22 (”ssh”) och 80 (”www”). Notera att vi inte tillåter ftp-anslutningar — vi använder SFTP eller SCP istället. Det ger krypterad överföring, vilket är säkrare. Jag har skrivit om det tidigare.
(Om du exempelvis vill ta emot e-post eller använda säker https-anslutning på den här servern, måste du öppna fler portar.)
Vi vill att alla inkommande anslutningar och vidarebefordringar som inte matchar reglerna ovan ska blockeras. Dessutom vill vi acceptera alla utgående anslutningar. Skriv:
iptables –P INPUT DROP iptables –P FORWARD DROP iptables –P OUTPUT ACCEPT
Spara reglerna och se till att de aktiveras igen när du startar om servern:
iptables-save > /etc/iptables.rules nano /etc/network/interfaces
Hitta den sektion ”iface” som har serverns publika IP-adress och lägg till en rad på slutet:
post-up iptables-restore < /etc/iptables.rules
Installera Apache, PHP och MySQL
Det här är det enklaste steget. Kör:
apt-get install apache2-mpm-prefork libapache2-mod-php5 apt-get install php5-mysql mysql-server
Detta installerar det mesta som du behöver, men inte alla PHP-moduler som finns.
Nu kan du skriva in serverns IP-adress i en webbläsare och få meddelandet ”It works!” från Apache.
Skapa användare
Det är säkrare att logga in med en annan användare än root, och du minskar risken att någon hackar ditt root-lösenord om du inte ens tillåter root att logga in. Hitta på ett användarnamn, exempelvis ditt förnamn eller liknande. Jag kallar användaren NN här.
(Läs mer om varför det är säkrare att inte logga in som root på Server Fault.)
Vi skapar också gruppen www-pub, som vi sedan ger skrivrättigheter till katalogen /var/www, som är Apaches startkatalog. Din användare ska tillhöra denna grupp.
groupadd www-pub adduser –ingroup www-pub NN chown –R root:www-pub /var/www chmod 0775 /var/www chmod 0664 /var/www/*
Apache (användaren www-data) har nu bara läsrättigheter, och om du exempelvis ska installera WordPress måste du ändra ägare och rättigheter på filer och kataloger som Apache ska skriva till. Detta är ett säkert sätt att köra Apache på, eftersom ett trasigt eller hackat skript inte kan förstöra någonting i katalogen /var/www.
(Läs mer om varför vi skapar användaren www-pub och inte ger Apache skrivrättigheter på Server Fault.)
För att du ska kunna logga in som NN och köra kommandon som root, lägger vi till användaren i sudoers. Det gör att du kan logga in som NN och köra kommandon som root genom att skriva ”sudo” först på kommandoraden. (Läs mer om sudo på Wikipedia.)
apt-get install sudo visudo
Ta bort kommentarstecknet ”#” framför den här raden:
%sudo ALL=NOPASSWD: ALL
Lägg sedan till NN i gruppen sudo:
usermod –G sudo NN
Var noga med att använda stort G i detta kommando, ”-g” byter huvudgrupp för användaren istället för att lägga till en ny grupp.
Säker inloggning och filöverföring med SSH och SFTP
SSH är redan konfigurerat, men vi ska begränsa inloggning, så att bara NN får logga in (inte root eller någon annan användare).
nano /etc/ssh/sshd_config
Ändra värdet för PermitRootLogin till no.
Lägg till sist i filen:
AllowUsers NN
Starta om SSH när du är säker på att du har angett samma användarnamn här som användaren du skapade nyss (annars kommer du inte kunna logga in):
/etc/init.d/ssh restart
Konfigurera Apache med ditt domännamn
Hos webbhotellet eller din DNS-tjänst, ange IP-adressen till din webbserver i DNS typ A för subdomänerna @ och www.
Öppna Apaches konfigurationsfil:
nano /etc/apache2/apache2.conf
Lägg till sist i filen:
ServerName dindomän.se
Starta om Apache:
/etc/init.d/apache2 restart
Logga in med SFTP och testa PHP
Starta en SFTP-klient på din dator. I Windows rekommenderar jag programmet WinSCP.
Ange serverns IP-adress, användarnamn och det lösenord du satte tidigare. Du kan också sätta standardkatalog (”fjärrkatalog”) till ”/var/www”. Logga in.
I mappen /var/www, skapa en fil index.php med valfritt innehåll. Öppna adressen i webbläsaren och se att det fungerar.
Grattis!




Mycket förklarande och bra post. Gillar speciellt sektionen om IpTables
Bra guide. Skall precis till och preppa vår VPS på GleSYS så skall checka av dina instruktioner.
Kommer också sätta upp rails miljö för vår del! Daniel i vårt team har skrivit ett najs script om man skall hosta en Rails app som fixar väldigt mkt av configuration etc åt en!
Kolla in http://github.com/buffpojken/Sprinkle-Configuration
Har inte hundra koll på om det sätter upp iptables-regeler eller inte. Har bara kört det en gång innan men det vore ju ett rätt enkelt tillägg. Men bra att du tar med firewall conf.
Gällande IPtables så rekommenderar jag även följande:
iptables -t raw -A OUTPUT -o lo -s 127.0.0.1 -d 127.0.0.1 -j NOTRACK
iptables -t raw -A PREROUTING -i lo -s 127.0.0.1 -d 127.0.0.1 -j NOTRACK
Då slipper du ta minne för att hålla kolla på states som ändå bara går på mot localhost.
Tack för tipset, Jonas!
Hej Christian,
Ett stort tack till detta. Nu har jag fått tummen loss och skaffade VPS hos Glesys. Följde dina ovan steg och det funkar galant. Du kanske även ska nämna kommandot a2enmod för att aktivera moduler? Och hur man lägger till olika virtuella domäner i olika mappar (jag löste det).
Tack
Hej
Jag har fastnat på raden:post-up iptables-restore < /etc/iptables.rules
Det går tydligen inte att ändra i filen. Hur gör man nu?
# This configuration file is auto-generated. # WARNING: Do not edit this file, otherwise your changes will be lost. # Please edit template /etc/network/interfaces.template instead.
/Tack
obs! jag menade denna rad:
nano /etc/network/interfaces
Ska jag ändra i filen fast det står att ändringar inte kommer att sparas?
/tack
Tack för bra guide! fått allt att funka med ett litet problem..
Vill ändra i /etc/php5/apache2/php.ini men har inte rättigheter varken som root lr med mitt NN konto.
Lösning på de? (målet är att ändra raden upload_max_filesize = 2M till = 20M.)