Antons blogg om elektronik och Linux

4 februari, 2011

Nybörjarguide till CentOS: Minecraft-server och seedbox

Filed under: Linux,Terminal — Anton @ 22:38
Tags: , , , , , ,

Jag och ett par bekanta har på senare tid blivit smått beroende av spelet Minecraft. Därför tyckte jag att det kunde vara spännande att sätta upp en egen server för oss att spela på. Eftersom mitt eget bredband skulle haverera om jag ens försökte köra en server här hemma så fick det bli någon form av inhyrd server. Dessutom kommer jag eventuellt få möjlighet att komma över en inbjudan till ett privat Bittorrent-nätverk, och då gäller det att ha något ordentligt att seeda med för att inte bli utkastad på direkten. Efter att ha läst lite på diyseedbox.com bestämde jag mig för att försöka komma över en billig så kallad VPS som kommer att köra min Minecraft-server samt en Bittorrentklient.

Efter lite prisjämförelser landade valet på City Cloud. De har en månadskostnad på cirka 180 kr vilket inte är det billigaste alternativet, men fördelen är att servern bara kostar pengar när den används. Avstängd kostar den bara runt 50 kr per månad för själva lagringsutrymmet på servern och ungefär 20 öre i timmen då den är påslagen. Jag räknar därför med att få betala cirka 70-90 kr per månad med min nuvarande användning.

Som operativsystem valde jag CentOS 5.5 eftersom det har ryktet att vara både stabilt och säkert och även är ett av de vanligaste operativsystemen för just servrar. Dessutom ville jag lära mig något nytt efter att nästan uteslutande sysslat med Ubuntu de senaste åren. Nedan följer guider för hur själva operativsystemet konfigurerades och hur Minecraft-servern och Bittorrent-klienten installerades. De båda tjänsterna fungerar oberoende av varandra och du behöver givetvis inte installera båda om du inte vill.

Inledande konfiguration

Det första jag gjorde var att logga in via VNC som root för att ändra lösenord (passwd) och ta reda på serverns IP-adress (ifconfig) för att senare kunna ansluta via SSH. Inledande SSH-anslutningar var dock extremt långsamma på grund av att klienten först försöker logga in med GSSAPI, ett protokoll som servern inte stödjer. Jag löste det genom att enligt detta blogginlägg stänga av det i klientens SSH-konfiguration:

anton@atrus:~$ echo GSSAPIAuthentication no >> ~/.ssh/config

Därefter gick det betydligt fortare att ansluta via SSH:

anton@atrus:~$ ssh root@serverns-ip

Om du använder en annan klient, exempelvis PuTTY, är det inte säkert att du har detta problem.

localhost är inget fint namn, så jag ändrade det till något finare i /etc/hosts:

[root@localhost ~] # vi /etc/hosts
# Do not remove the following line, or various programs
# that require network functionality will fail.
#127.0.0.1              localhost.localdomain localhost
127.0.0.1               localhost.localdomain monolith
::1             localhost6.localdomain6 localhost6

Jag använde vim som texteditor för att det skulle gå lite fortare, men om du inte är van vid vim kanske du vill använda nano istället, som också följer med CentOS vid installation. Jag minns inte riktigt om det räckte med att starta om nätverket (service networking restart) för att det nya namnet skulle gälla, eller om det gör det först efter omstart. Prova dig fram :)

Konfigurera brandväggen för att blockera allt utom de specificerade portar som servrarna använder med det inbyggda konfigurationsverktyget:

[root@monolith ~]# system-config-securitylevel-tui

Ändra security level till enabled och tryck på customize. Låt SSH vara ikryssat och lägg till de portar du kommer änvända under other ports. Hos mig är det 25565:tcp för Minecraft-servern respektive 51513:tcp och 51413:udp för Bittorrentklienten. Portarna avgränsas med mellanslag. När du är klar trycker du OK två gånger. Inställningarna börjar gälla direkt.

Du bör säkra upp inloggningen till root genom att använda RSA-nycklar och stänga av lösenordsautentisering för root i /etc/ssh/sshd_config. Läs mer om detta i Hunds utmärkta guide.
Generera nya RSA-nycklar på klientdatorn och ladda upp via SSH:

anton@atrus:~$ ssh-keygen -t rsa -b 4096
anton@atrus:~$ scp .ssh/monolith_rsa.pub root@serverns-ip:.ssh/authorized_keys

Ändra sedan följande i serverns /etc/ssh/sshd_config:

PermitRootLogin without-password
StrictModes yes

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile      .ssh/authorized_keys

PasswordAuthentication yes

Ändra filrättigheter för nyckeln och starta om SSH:

[root@monolith ~]# chmod 600 .ssh/authorized_keys
# service sshd restart

Nu går det inte att logga in som root via SSH om man inte har den privata nyckeln som endast ska finnas på din egen klientdator. Andra användare kan dock logga in med enbart lösenord.

Nästa steg är att installera fail2ban, ett program som automatiskt bannar ip-adresser efter ett antal felaktiga inloggningar. Hunds tidigare omnämnda guide täcker i stort sett även detta så jag nöjer mig med en sammanfattning av mina inställningar:

[root@monolith ~]# tar xjf fail2ban-0.8.4.tar.bz2
# cd fail2ban-0.8.4
# python setup.py install
# vi /etc/fail2ban/jail.conf

Ändra där följande:

# "bantime" is the number of seconds that a host is banned.
bantime  = 600

---

[ssh-iptables]

enabled  = true
filter   = sshd
action   = iptables[name=SSH, port=ssh, protocol=tcp]
logpath  = /var/log/secure
maxretry = 3

---

[vsftpd-iptables]

enabled  = true
filter   = vsftpd
action   = iptables[name=VSFTPD, port=ftp, protocol=tcp]
logpath  = /var/log/vsftpd.log
maxretry = 3
bantime  = 1800

Och lägg till i autostart:

[root@monolith ~]# cp /root/src/fail2ban-0.8.4/files/redhat-initd /etc/init.d/fail2ban
# chkconfig --add fail2ban
# chkconfig fail2ban on
# service fail2ban start

Fail2ban kommer sedan banna IP-adresser i bantime sekunder (600 som standard) efter tre misslyckade inloggningsförsök via SSH. Det räcker förmodligen för att stoppa de flesta brute-force-attacker samtidigt som livet inte bli alltför jobbigt för en om man skulle råka låsa ute sig själv vid något tillfälle. SFTP-servern bannar däremot i en halvtimme efter tre misslyckade inloggningsförsök. Det går bra eftersom det i värsta fall går att logga in i ett SSH-skal för att ta bort banlysningen ifall man råkat skriva in fel lösenord själv.
Man kan lägga till sin egen IP-adress som ett undantag i fail2ban om man vill, men om man som jag har dynamisk IP-adress hemma finns det ingen anledning att göra detta, eftersom den ändå skulle behöva bytas om några timmar.

Minecraft-server

Installera Java. Finns i förråden men jag ville ha senaste och laddade därför ner det 64-bitars RPM-paketet från Java.com och installerade:

[root@monolith ~]# wget http://javadl.sun.com/webapps/download/AutoDL?BundleId=43874 -o jre-6u23-linux-x64-rpm.bin
# chmod +x jre-6u23-linux-x64-rpm.bin
# ./jre-6u23-linux-x64-rpm.bin

Kontrollera att Java är korrekt installerat:

[root@monolith ~]# java -version

Installera screen som används för att köra servern som en demon:

[root@monolith ~]# yum install screen

Skapa nu en ny användare som kommer att köra Minecraft-servern. Jag kallade den just minecraft:

[root@monolith ~]# adduser minecraft
# passwd minecraft

Logga in som den nya användaren och installera servern:

anton@atrus:~$ ssh minecraft@serverns-IP
[minecraft@monolith ~]$ mkdir MCServer
$ cd MCServer
$ wget http://minecraft.net/download/minecraft_server.jar

Lägg till ett skript i /etc/init.d/ som autostartar servern (som root). Jag kopierade in koden på denna sidan och gjorde några mindre ändringar.

[root@monolith ~]# vi /etc/init.d/minecraft

Ändra variablerna USERNAME, MCPATH och BACKUPPATH för att passa din installation. Jag ändrade dessutom funktionen mc_backup() till följande:

mc_backup() {
  if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
  then
    echo "Backing up minecraft data"
    if [ -f $BACKUPPATH/world-$(date "+%F_%H.%M.%S").tar.gz ]
    then
      echo "Backup data already exists in $BACKUPPATH! No backup done."
    else
      as_user "cd $MCPATH && tar czf $BACKUPPATH/world-$(date +%F_%H.%M.%S).tar.gz world"
    fi
    echo "Backing up the minecraft server executable"
    if [ -f "$BACKUPPATH/minecraft_server-$(date "+%F_%H.%M.%S").jar" ]
    then
      echo "Minecraft executable already exists in $BACKUPPATH! No backup done."
    else
      as_user "cd $MCPATH && cp minecraft_server.jar \"$BACKUPPATH/minecraft_server-$(date "+%F_%H.%M.%S").jar\""
    fi
  fi
  echo "Backup complete"
}

Lägg till i autostarten:

[root@monolith ~]# chkconfig --add minecraft
# chkconfig minecraft on

Du startar sedan Minecraft genom att som root köra service minecraft start. För att ta manuell kontroll över sessionen kan du logga in som användaren minecraft och köra screen -r. När du är klar lämnar du ifrån dig kontrollen över sessionen genom att trycka Ctrl-A och sedan Ctrl-D. För att skapa en backup av Minecraft-servern kör du service minecraft backup som root. En tar.gz-fil skapas då i mappen du angivit som BACKUPPATH. Eventuellt uppdaterar jag guiden för att ställa in schemaläggning av säkerhetskopieringen med hjälp av cron i ett senare skede.

Seedbox

Jag installerade Bittorrent-klienten Transmission från källkod enligt denna guiden. För att kunna bygga saker behövs ett antal verktyg och bibliotek först installeras:

[root@monolith ~]# yum install gcc gcc-c++ m4 make automake libtool gettext openssl-devel pkgconfig perl-libwww-perl perl-XML-Parser curl curl-devel libevent-devel libevent libidn-devel zlib-devel which
# yum upgrade

Enligt guiden bör man tydligen installera intltool från källkod för att få nyaste versionen. Jag vet inte riktigt varför, men det fungerar hur som helst. Ändra länken och filnamnen till senaste versionen som du hittar här.

[root@monolith ~]# mkdir src
# cd src
# wget http://ftp.gnome.org/pub/gnome/sources/intltool/0.40/intltool-0.40.6.tar.gz
# tar xzf intltool-0.40.6.tar.gz
# cd intltool-0.40.6
# ./configure --prefix=/usr
# make
# make install

Installera därefter Transmission. Senaste versionen hittar du här.

[root@monolith ~]# cd ~/src
# wget http://download.m0k.org/transmission/files/transmission-2.13.tar.bz2
# tar xjf transmission-2.13.tar.bz2
# cd transmission-2.13
# ./configure --prefix=/usr
# make
# make install

Nu är Transmission installerat men måste först konfigureras innan det kan användas. Vi skapar först en ny användare som kommer att köra Transmission-demonen. Det är också denna användaren du kommer att logga in som via SFTP senare:

[root@monolith ~]# adduser transmission
# passwd transmission

Ladda ner och installera skriptet som startar Transmission automatiskt:

[root@monolith ~]# wget -O /etc/init.d/transmissiond http://pastie.org/pastes/962731/download
# chmod 755 /etc/init.d/transmissiond
# chkconfig --add transmissiond
# chkconfig --level 345 transmissiond on

Du kan sedan kontrollera Transmission genom kommandot service precis som med Minecraft-servern. För att generera ett par standardkonfigurationsfiler måste vi starta tjänsten en gång, och sedan stoppa den igen:

[root@monolith ~]# service transmissiond start
# service transmissiond stop

Nu ska vi ändra ett par inställningar i den nya konfigurationsfilen /home/transmission/.config/transmission/settings.json. Det går utmärkt att göra med kommandot sed som den ursprungliga guiden beskriver, men för att du ska få lite förståelse för hur konfigurationsfilen ser ut rekommenderar jag att du gör det manuellt i en texteditor (vi eller nano exempelvis):

[root@monolith ~]# vi /home/transmission/.config/transmission/settings.json

Ändra där rpc-whitelist-enabled till true, rpc-authentication-required till true, samt rpc-username och rpc-password till ett valfritt användarnamn och lösenord som kommer att användas för att logga in i webbgränssnittet. Lösenordet kommer att hashas vid första uppstarten och står därmed inte i klartext särskilt länge. Standardmappen för nerladdningar är /home/transmission/Downloads och anges av inställningarna download-dir och incomplete-dir i settings.json. Du kan ändra det till valfri plats där din transmission-användare har skrivrättigheter. Skapa mappen om den inte finns:

[root@monolith ~]# mkdir /home/transmission/Downloads
# chown -R transmission:transmission /home/transmission/Downloads

Nu är vi redo att starta Transmission-demonen skarpt:

[root@monolith ~]# service transmission start

Webbservern bör komma upp direkt och vara tillgänglig på port 9091. Exempel: http://din-ip-adress:9091.

Nu är konfigurationen i princip klar. Jag nöjde mig med den inbyggda brandväggen som vi ställde in i avsnittet inledande konfiguration. För att hämta dina nerladdade filer kan du använda protokollet SFTP som körs av SSH-servern som redan är installerad. Använder du klienten Filezilla ansluter du genom att gå in i Arkiv -> Platshanteraren och skapar en ny plats. Servertypen är SFTP och inloggningstypen är ”normal”. Ange sedan din IP-adress, ditt användarnamn och ditt lösenord och klicka sedan på ”anslut”. Vanliga UNIX-rättigheter gäller, så du kan även ladda upp filer till de mappar där användaren transmission har skrivrättigheter.

Vill du hellre använda det mindre säkra men mer tillgängliga protokollet FTP kan du installera servern vsftpd med hjälp av yum. Dess konfigurationsfil hittar du sedan i /etc/vsftpd/vsftpd.conf.

Övrigt

Jag ville ge användaren minecraft möjlighet att stänga av systemet för att slippa logga in som root varje gång. Användaren ska dock inte få köra några andra kommandon som root. Jag löste det genom att lägga till följande rader i sudoers:

[root@monolith ~] # visudo
## Allows members of the users group to shutdown this system
%users ALL= NOPASSWD: /usr/bin/halt

Sudoers redigerar du med kommandot ”visudo”, alternativt ”EDITOR=nano visudo” om du föredrar texteditorn nano. Lägg sedan till användaren minecraft i gruppen users:

[root@monolith ~]# usermod -a -G users minecraft

Systemet kan sedan enkelt stängas av genom att köra sudo halt. Inget lösenord behöver då anges. En möjlig säkerhetsrisk, men det värsta som kan hända är trots allt bara att systemet stängs av.

Det var det hela. Lycka till!

About these ads

2 kommentarer »

  1. Do you mind if I quote a couple of your articles as long as I provide credit and sources back to your webpage?
    My blog is in the very same niche as yours and
    my visitors would really benefit from some of the
    information you provide here. Please let me know if this ok with you.
    Thanks!

    Kommentar av Minecraft 1.6 Horse Update Magic Launcher — 24 juni, 2013 @ 08:19

  2. Sure, go right ahead.

    Kommentar av Anton — 25 juni, 2013 @ 20:08


RSS-flöde för kommentarer till det här inlägget. TrackBack URI

Kommentera

Fyll i dina uppgifter nedan eller klicka på en ikon för att logga in:

WordPress.com Logo

Du kommenterar med ditt WordPress.com-konto. Logga ut / Ändra )

Twitter-bild

Du kommenterar med ditt Twitter-konto. Logga ut / Ändra )

Facebook-foto

Du kommenterar med ditt Facebook-konto. Logga ut / Ändra )

Google+ photo

Du kommenterar med ditt Google+-konto. Logga ut / Ändra )

Ansluter till %s

Rubric-temat. Blogga med WordPress.com.

Följ

Få meddelanden om nya inlägg via e-post.

%d bloggare gillar detta: