Thumbnail

Hello People! Ihr habt über Twitter das nächste Thema gewählt gehabt. Deswegen zeige ich euch in diesem Beitrag, wie ihr einen CS:GO Server einrichtet.

Dabei richtet sich dieser Beitrag nicht an die typischen Pay & Play Anbieter wie Nitrado, g-portal oder ckras. Wir installieren einen eigenen Server und richten diesen von A-Z als CS:GO Gameserver ein.

Anschließend wird der Server durch Plugins so umfunktioniert, dass er als Trainingsserver (Nades) fungiert.

Der Server

Normalerweise würde man jetzt zu einem Pay & Play Anbieter gehen, 10 EUR per Paypal überweisen und der Server ist innerhalb von wenigen Minuten online und bereits fertig eingerichtet.

Aus einem für mich nicht ersichtlichen Grund wollt ihr mir viel mehr Arbeit machen und einen Beitrag über die Einrichtung eines frischen Servers lesen – Ironie beabsichtigt 😉 . Dementsprechend denken wir jetzt erstmal über den Server nach.

Wir haben die Möglichkeit zwischen einem vServer und einem Root Server zu wählen. Da scheiden sich schon die Geister. Hier kann man nicht klar sagen, dass eine ist besser als das andere. Das hängt meiner Meinung nach von verschiedenen Faktoren ab.

Wie viel Geld möchte ich investieren? Was soll das für ein CS:GO Server werden? Möchte ich eventuell auch meinen Teamspeak Server und/oder die Website meiner Organisation auf dem Server laufen lassen?

Ein vServer (Virtuelle Server) ist ein Server, welcher über eine virtuelle Maschine läuft. Er besitzt dementsprechend keine eigene Hardware, sondern teilt sich die Rechenleistung mit anderen Kunden eines vServers. Allerdings besitzt er eine eigene IP, sodass er als eigener Server konfiguriert werden kann.

vServer werden auf Root Servern (Dedicated Server) installiert. Ich gebe mal ein kleines Beispiel. Die Zahlen sind fiktiv und sollen nur die Situation verdeutlichen.

1 Root Server (1 TB SSD Festplatte, 8 Cores CPU, 32 GB DDR4 RAM) -> VirtualBox/VMware = 4 vServer (á 200 GB SSD Festplatte, 2 Cores CPU, 8 GB DDR4 RAM). Ich hoffe, dass jeder weiß was damit gemeint ist. Alternativ kann man sich das nächste Bild auch einfach mal genauer anschauen.

vServer & Root Server Darstellung

Natürlich kommt es dabei auch darauf an, wie stark euer vServer ist. Ich sage mal, dass man durchaus eine Website, einen Teamspeak Server und einen CS:GO Server über einen vServer laufen lassen kann, sofern er stark genug dafür ist und die Anbindung gut genug ist.

Achtung! CS:GO verlangt laut der Website von Steam folgendes vom Server

  • Prozessor: 64-bit Dual core from Intel or AMD at 2.8 GHz
  • Arbeitsspeicher: 4 GB RAM
  • Speicherplatz: 15 GB

Je nachdem welche Linux-Distribution ihr für euren Server wählt, werden hier auch zwischen 500 MB bis 1 GB RAM und 5 GB – 10 GB Speicherplatz für das Betriebssystem empfohlen. Dementsprechend sollte unser Server mindestens 6 GB RAM und etwa 50 GB Speicherplatz haben.

Ich sag es mal so. Je besser der Server ausgestattet ist, desto besser ist das für das Spiel und selbstverständlich damit auch für euch und eure Gäste.

Ich habe mich für den vServer Linux V10 bei strato.de entschieden. Nicht weil ich unbedingt viel Erfahrung mit STRATO hätte oder sehr viel Gutes über den Anbieter gehört hätte (was natürlich nicht heißt, dass der Anbieter schlecht ist), sondern weil er ausreichend gute Server für einen guten Preis anbietet.

Außerdem wollte ich für diesen einen Beitrag logischerweise keinen Server für 12 Monate mieten müssen. Für 6 € pro Monat bekomme ich bei dem Server mit der Bezeichnung Linux V10 ganze 8 GB RAM, 4 Cores CPU und 100 GB SSD Speicherplatz. Das ist mehr als ausreichend.

Bereits nach etwa einer Stunde war mein Server einsatzbereit. Wichtig zu erwähnen ist, dass dieses Tutorial sich komplett an einen Ubuntu 18.04 LTS 64bit Server richtet. Für andere Linux-Distributionen müssen eventuell diverse Befehle oder Schritte anders gehandhabt werden.

Ebenfalls sollte ich erwähnen, dass ihr unabhängig davon, was ihr mit dem Server machen wollt, immer auf eine minimale Konfiguration setzen solltet. Also je weniger Software auf dem Server läuft, desto besser und sicherer. Kommen wir zur Konfiguration!

Die Konfiguration

Nachdem ihr sämtliche E-Mails erhalten und euch bereits im Administrationsbereich eures Servers eingeloggt habt (in meinem Fall von Strato), dann wäre es wichtig (sofern es geht) erst einmal über den Anbieter Backups erstellen zu lassen.

Bei Strato läuft das automatisch 1x am Tag. Sollte das bei euch nicht der Fall sein, empfehle ich euch das als Erstes einzurichten. Machen wir weiter. Was für Software brauchen wir um unseren Server zu verwalten?

Auf unseren Server greifen wir per Secure Shell (SSH) zu. Dementsprechend brauchen wir einen SSH-Client, da Windows von Haus aus keinen mitliefert. Bekannt ist PuTTY, allerdings empfehle ich euch Terminus.

Ich finde, das Programm sieht bei weitem viel moderner aus und bietet zeitgleich mindestens dieselben Funktionen. Es ist Cross-Plattform, sodass ihr eine Installation auf Windows, Linux und macOS vornehmen könnt und dadurch nur ein Programm verwenden müsst.

Eine klare Win-win-Situation. Wir bauen jetzt eine SSH Verbindung mit ssh root@85.214.237.2 als Root User zu unserem Server auf.  Logischerweise müsst ihr dort eure eigene Server IP einfügen. SSH Verbindung aufbauen

Anschließend müsst ihr euch mit dem von eurem Anbieter vergebenen Passwort für den Root User verifizieren. Nun müsst ihr euer Passwort  ändern.

Nun sind wir eingeloggt und bereit unseren Server Schritt für Schritt sicherer zu machen und für das nächste Major vorzubereiten. Wir arbeiten die nächsten Schritte so detailliert wie möglich durch.

Updates & Nano

Als Erstes sollten wir unseren Server updaten und dann Nano als Texteditor installieren. Über den Nano Editor können wir wichtige Dokumente bequem über das Terminal editieren, ohne eine aufwendige Software mit grafischer Oberfläche zu installieren.

Tun wir dies mit sudo apt update und sudo apt upgrade. Mit sudo apt install nano installieren wir den Texteditor. Nun sind wir bereit andere Programme zu installieren und einzurichten.

SSH Port ändern

Der nächste Schritt sollte sein, dass wir unseren SSH Port abändern. Standardmäßig ist dieser auf Port 22 eingestellt, was natürlich mit der Zeit eine gewisse Anzahl an nicht erwünschten Verbindungen zu unserem Server garantiert.

Zwar ist es für Hacker ein leichtes mit Nmap oder anderen Programmen die Ports abzuklopfen, allerdings kann man damit schonmal die Kiddies und Leute abwimmeln, die mal nur eine „kurze Nummer“ schieben wollen.

Deswegen ändern wir jetzt unseren Port 22 auf eine beliebige andere Zahl. Bitte denkt aber an die von anderen Programmen benutzten Ports. So fallen mir direkt die Ports 21 (FTP), 25 (SMTP), 53 (DNS), 80 (HTTP) und 443 (HTTPS) ein, welche wir auf keinen Fall vergeben sollten.

Eine komplette Portliste kann man sich über Wikipedia angucken. Auch dürfen wir nicht vergessen, was wir alles installieren wollen. Es soll ein Counter Strike Server sein, also müssen wir Steam installieren.

Steam bietet netterweise eine übersichtliche Portliste auf ihrer Website an. Die dort gelisteten Ports sollten wir auch nicht verwenden.

Ich lege jetzt einfach mal fest, dass wir den Port 1206 verwenden. Da das mein Geburtstag ist, kann ich mir den super merken (kleiner Scherz). Um unseren Port zu ändern, müssen wir über das Terminal die Konfigurationsdatei abändern.

SSH Port abändernDas lässt sich mit sudo nano /etc/ssh/sshd_config relativ leicht erledigen. Anschließend sehen wir das uns nano das Dokument direkt im Terminal geöffnet hat.

Wie wir klar im Bild auf der linken Seite sehen können, ist dort der Standardport 22 noch auskommentiert. Wir müssen das Rautezeichen entfernen und unseren Port (1206) dort eintragen. Anschließend speichern wir die Datei (STRG+O / Enter), schließen sie (STRG+X) und starten mit sudo service sshd restart den SSH Service neu.

Wenn man jetzt versucht sich mit ssh IP zu verbinden, bekommt man eine Fehlermeldung, da der Standardport nicht mehr vergeben ist.

Um euch jetzt auf euren Server zu verbinden, müsst ihr also beim Verbinden den neuen Port spezifizieren. Das funktioniert so.

ssh -p Portnummer root@ServerIP. Portnummer sowie ServerIP müsst ihr dann nur noch mit euren eigenen Daten abändern. Fertig!

Public-Key-Authentifizierung

Im nächsten Schritt sollten wir endlich von den gewohnten Passwörtern wegkommen. Ein Passwort wird immer auf dem Server in Klartext oder als Hash gespeichert. Ebenfalls kann dieses Passwort bei der Eingabe durch einen MITM-Angriff abgefangen werden.

Bei der Public-Key-Authentifizierung handelt es sich um ein Schlüsselpaar, welches aus einem Public Key und einem Private Key besteht. Im Gegensatz zum herkömmlichen Passwort wird nur der Public Key auf dem Server gespeichert.

Der Private Key bleibt auf dem Rechner des Nutzers und kann bei Bedarf sogar nochmal extra mit einer passphrase gesichert werden.

Zusätzlich zur extra Sicherheit bietet die Public-Key-Authentifizierung auch den Vorteil des automatischen Anmeldens, ohne die Notwendigkeit einer Passworteingabe.

Dabei wird beim Nutzer anhand des Private Keys eine Signatur erzeugt, welche vom Server und dessen Public Key verifiziert wird. Dadurch kann man sich ohne Passwort einfach anmelden, was einem wie bereits erwähnt nicht nur mehr Sicherheit gibt, sondern auch noch Zeit spart.

Um diese beiden Keys zu generieren öffnen wir ein neues Terminal und tippen ssh-keygen -t rsa -b 4096 ein. Mit -t rsa legen wir RSA (Rivest–Shamir–Adleman) als kryptographisches Verfahren fest. Mit -b 4096 erzwingen wir eine Schlüssellänge von 4096 Bits.

Anschließend bestätigen wir einfach das Verzeichnis in dem unser Schlüssel abgelegt werden soll. Für eine (wie oben bereits erwähnte) doppelte Absicherung per passphrase, kannst du jetzt eine bestimmen.

Da wir zusammen später eine noch bessere Absicherung anlegen wollen, kannst du das hier aber freilassen und einfach 2x Enter drücken. Anschließend wird dein Key generiert.

SSH Key generiert

Du bekommst zusätzlich dazu auch ein aus deinem Key per randomart generiertes Bild.  Dieses Bild ist dazu da, auf einem anderen Weg den Key zu verifizieren. Bilder sind für Menschen einfacher zu vergleichen und damit zu verifizieren, als endlos lange Strings.

Allerdings wird diese Art und Weise der Verifikation kaum genutzt und ist nur nützlich, wenn man sich über längere Zeit auf ein und derselben Maschine einloggt. Daher werde ich jetzt nicht weiter darauf eingehen.

Nachdem wir die Keys erstellt haben, öffnen wir ein neues Terminal und verbinden uns wieder mit unserem Server per SSH. Anschließend erstellen wir im root Verzeichnis mit mkdir .ssh das Verzeichnis .ssh, welches wir nun brauchen.

Wenn wir wieder das Fenster wechseln und zu unserem normalen PC zurückkommen müssen wir diesen Key nun auf unseren Server kopieren. Das erledigen wir über Secure Copy (SCP), welches auf SSH aufbaut.

Dann transferieren wir mal unseren eben erstellen Key.

scp -P 1206 C:\\Users\\mauri\\.ssh\\id_rsa.pub root@85.214.237.2:/root/.ssh/authorized_keys

Mit scp am Anfang des Befehls legen wir die Übertragungsart fest. Danach sprechen wir wieder unseren selbst definierten Port an.

SSH Schlüssel transferiertDie 3. Angabe ist der Speicherort unseres RSA Keys, welchen wir eben erstellt haben. Kleiner Trick: Einfach die Datei aus dem Windows Explorer dort hinziehen! Als Nächstes folgt der Root User unseres Servers und das Verzeichnis+Datei wohin es kopiert werden soll.

Achtung! Die Datei muss unbedingt authorized_keys heißen. Sollte dort bereits eine Datei so heißen, müsst ihr diese Datei einfach nur abändern und den generierten Schlüssel per Hand eintragen.

Anschließend starten wir den SSH Service einmal neu und versuchen uns erneut per SSH zu verbinden. Fällt euch was auf? Ihr werdet nicht mehr nach dem Passwort gefragt!

Passwortauthentifizierung deaktivieren

Im nächsten Schritt sollten wir natürlich die Authentifizierung durch ein Passwort deaktivieren, da sonst die ganze Arbeit relativ sinnlos ist.

Aber pass bitte auf. Führe diesen Schritt nur aus, wenn wirklich ALLES funktioniert hat, was wir bei der Public-Key-Authentifizierung eingerichtet haben. Ansonsten sperrst du dich aus deinem eigenen Server aus und müsstest diesen zurücksetzen.

Um die Passwortauthentifizierung zu deaktivieren, müssen wir wieder die SSH-Konfigurations-Datei ändern. Das erledigen wir wieder mit sudo nano /etc/ssh/sshd_config.

In der Konfigurationsdatei müssen wir nun nach #PasswordAuthentication yes suchen. Die Raute entfernen wir und das yes ändern wir in ein no um. Die Datei bitte einmal speichern und schließen.

Anschließend müssen wir nur den SSH Service neu starten und schon haben wir das erledigt. Viele Tutorials weisen hier noch auf das Deaktivieren des Root Accounts per SSH hin. Das ist meiner Meinung nach für unseren CS:GO Server nicht notwendig.

Fail2ban

Jetzt wird es interessant. Alle Serveradministratoren freuen sich und alle „Datenschutzfreaks“ schütteln den Kopf.

Fail2ban ist meiner Meinung nach eines der wichtigsten Programme für Serveradministratoren. Fail2ban durchsucht die aktuellen Logfiles deines Servers nach Mustern, welche auf einen Angriff schließen lassen.

Anschließend werden die vom Programm als ich sage jetzt mal „böse“ gekennzeichneten IP’s für einen Zeitraum vom Server gebannt. Zum Beispiel kann durch das Programm eine Brute-Force-Attacke effizient unterbunden werden.

Das Tool installieren wir nun mit sudo apt install fail2ban. Durch den Installationsvorgang werden mehrere Standardkonfigurationsdateien (fail2ban.conf, jail.conf etc.) angelegt. Diese findest du unter /etc/fail2ban.

fail2ban SetupBevor wir irgendwelche Änderungen an der Konfigurationsdatei vornehmen, müssen wir die jail.conf Datei kopieren, damit wir die Änderungen in der Kopie durchführen können.

Die Hauptdatei wird nämlich bei jedem Fail2ban Update überschrieben, sodass unsere Einstellungen mit jedem Update verschwinden.

Mit cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local legen wir diese Datei an. Mit sudo nano /etc/fail2ban/jail.local bearbeiten wir nun die Datei.

Bitte denkt immer daran, dass sobald ihr irgendetwas bearbeiten, löschen oder ähnliches wollt, würde ich euch immer empfehlen mit sudo zu arbeiten, welches euch Adminrechte gewährt.

In diesem Dokument suchen wir zuerst nach bantime = 10m. Ich finde es ratsamer, wenn IP’s länger gesperrt werden. Ich wähle hier den Wert 2h.

findtime = 10m & maxretry = 5 definieren in dieser Situation, dass 5 Loginversuche innerhalb von 10 Minuten die magische Grenze sind. Meiner Meinung nach reicht das vollkommen aus, allerdings könnt ihr hier natürlich lascher oder strenger sein.

Was ich jetzt mit Absicht nicht einstelle ist, dass Fail2ban mir als Admin eine E-Mail schickt, sobald eine IP gebannt wurde. Dadurch würde man sehr schnell gewarnt werden, falls es einen Angriff auf unseren Server gibt.

Dafür müssten wir aber einen SMTP installiert und eingerichtet haben. Das frisst mir zusätzlich zu viele Ressourcen. Wir müssen immer daran denken, dass CS:GO unsere Priorität ist. Aber theoretisch und unter anderen Voraussetzungen ist das eine gute Idee.

Fail2ban arbeitet mit sogenannten „Jails“. Ein Jail ist dabei nicht unbedingt als Gefängnis zu bezeichnen wie man es annehmen würde. Ein Jail bei Fail2ban ist eher die Konsequenz (action) einer Aktion (filter) des betroffenen Services (service).

fail2ban Setup fertigDie Einstellungen für SSH finden sich ziemlich weit unten. Allerdings ist SSH auch der erste Eintrag unter „Jails“.

Als Erstes müssen wir unter den ganzen Kommentaren ein enabled = true nachtragen, da sämtliche Jails standardmäßig deaktiviert sind. Danach müssen wir unseren Port anpassen. Dazu einfach port = ssh zu port = 1206 ändern. Hier tragt ihr einfach euren custom Port ein.

Anschließend speichern wir die Datei und schließen sie. Im Bild auf der linken Seite könnt ihr einmal nachschauen wie ich das konfiguriert habe. Ich habe hierbei die minimale Konfiguration durchgeführt.

Selbstverständlich lassen sich hier extra Regeln, extra Bantime usw. nochmals definieren.

Mit sudo systemctl restart fail2ban starten wir Fail2ban neu und mit sudo systemctl status fail2ban überprüfen wir den Status von Fail2ban.

Ich bekomme zum Beispiel die Ausgabe „Active: active (running) since Sat 2021-06-12 13:32:39 CEST; 1min 45s ago“.

Euren Status des SSH Jails könnt ihr jederzeit mit fail2ban-client status sshd überprüfen. Dadurch bekommt ihr eine Anzeige wie viele IPs gebannt sind, welche das sind usw.

Zwei-Faktor-Authentifizierung

Im vorletzten Schritt möchte ich noch die Möglichkeit einer Zwei-Faktor-Authentifizierung (2FA) durchsprechen. Durch 2FA muss ein Angreifer, selbst wenn er deinen Private Key hat, noch einen 6-stelligen Code eingeben, welcher nur über deine Google Authenticator App auf deinem Smartphone angezeigt wird.

Steam GuardZusätzlich dazu ändert sich der Code alle 30 Sekunden. Zwar gibt es in der Umsetzung der Google Authenticator App diverse Mängel, welche die Sicherheit betreffen, allerdings ist dies in der Praxis so gut wie ausgeschlossen, dass jemand beide Sicherheitsbarrieren umgehen kann.

Falls dir das Prinzip etwas bekannt vorkommt, liegt das daran, dass das im Prinzip nichts anderes ist, als Steam mit dem Steam Guard „eingeführt“ hat. Es wurde nur etwas anders umgesetzt.

Ich habe 2FA Codes für die meisten meiner Logins umgesetzt, wo das tatsächlich auch möglich ist. Diverse Zahlungsdienstleister, mein Amazon Konto, Twitch und aufgrund mehrerer CS:GO Projekte welche APIs beinhalten, auch diverse Trading Seiten.

Meiner Meinung ist diese Option nun eine gute Ergänzung, allerdings ist dies natürlich nicht zwingend notwendig. Wer diesen Schritt also überspringen möchte, kann das jetzt tun.

Die Einrichtung ist sehr simpel. Mit sudo apt install libpam-google-authenticator installieren wir die Software. Jetzt müssen wir diese nur noch einrichten.

Dazu tippt bitte google-authenticator ein und klickt auf Enter. Ihr werdet gefragt, ob eure Codes time-based sein sollen. Das ist inzwischen der Regelfall und wesentlich sicherer, allerdings gibt es neben den time-based Codes (laufen alle 30 Sekunden ab) auch die HOTP (HMAC-based one-time password) Variante.

Da die Variante der HOTP wesentlich unsicherer ist, werde ich hier nicht weiter darauf eingehen. Wir bestätigen die oben erwähnte Frage mit y und schon wird uns ein QR Code, ein Secret Key und ein einmal Code angezeigt.

Achtung! Hierbei kann es durchaus vorkommen, dass der QR-Code nicht korrekt dargestellt wird. Meiner Erfahrung ist das Programmabhängig. Euch wird aber ein Link mit einer Warnung über dem QR-Code angezeigt.

Warning: pasting the following URL into your browser exposes the OTP secret to Google:

Den Link dazu könnt ihr in einem Browser eurer Wahl posten und schon wird dort der korrekte QR-Code angezeigt. Nun müssen wir zu unserem Smartphone wechseln. Wir klicken in der App auf das Plus Icon und dann auf QR-Code scannen.

Anschließend scannt ihr diesen Code. Euer Telefon sollte den Scanvorgang automatisch beenden, einmal vibrieren und schon wird euch euer Code angezeigt. Der Name des Codes ist dabei automatisch euer Servername.

In meinem Fall wäre das also Kundennummer.stratoserver.net (root@IPAdresse). Anschließend werden wir gefragt, ob unser Secret Key in der Konfigurationsdatei aktualisiert werden soll. Dieses bestätigen wir selbstverständlich.

2FA Codes

Die nächsten Fragen bejahen wir logischerweise auch, da wir eine mehrfache Verwendung gleicher Tokens innerhalb der Zeitspanne von 30 Sekunden nicht dulden. Dadurch können wir uns „nur“ einmal innerhalb einer halben Minute anmelden, allerdings sinken damit die Chancen eines erfolgreichen MITM-Angriffs auf nahezu 0.

Die nächste Frage bejaht ihr bitte nur, sollte euer Server in Bora Bora stehen und ihr wollt euch mit eurem super schnellen Vodafone Internet einloggen.

Im Grunde geht es darum, nicht nur den aktuellen Code zuzulassen, sondern auch den Code zuzulassen, welcher vorher generiert und der, der nach dem aktuellen Code generiert wurde.

Dadurch können große Verbindungszeiten umgangen werden. Allerdings ist dies für 99 % der Fälle sinnlos und nur ein zusätzliches Sicherheitsrisiko. Unabhängig davon, dass wir unseren Server bereits gegen Brute-Force-Attacken abgesichert haben, aktivieren wir mit unserer Bestätigung rate-limiting.

Im nächsten Schritt müssen wir die pam ssh daemon Konfigurationsdatei leicht ändern. Mit sudo nano /etc/pam.d/sshd greifen wir darauf zu. Am Anfang des Dokumentes kommentieren wir mit einem # (Raute) Zeichen die Zeile nach # Standard Un*x authentication. aus.

Dementsprechend wird @include common-auth zu #@include common-auth. Am Ende des Dokumentes fügen wir die Zeile auth required pam_google_authenticator.so hinzu. Speichern und schließen bitte.

Als Nächstes öffnen wir mit sudo nano /etc/ssh/sshd_config erneut unsere SSH Konfigurationsdatei. Hier suchen (STRG+W) nach dem String ChallengeResponseAuthentication. Den Wert no ändern wir hier zu yes.

Danach suchen wir nach dem String UsePAM. Dort fügen wir mit AuthenticationMethods publickey,password publickey,keyboard-interactive eine Zeile nach dem String ein. Speichert das Dokument bitte und startet den SSH Daemon neu.

Kleine Übung! Weißt du noch wie das ging? Ohne spicken bitte! Falls du es nicht mehr weißt, ist es auch nicht schlimm. Der Code ist: sudo service sshd restart

Nun beenden wir die SSH Verbindung (exit) und versuchen uns erneut einzuloggen. Siehe da! Wir werden nach einem Verification Code gefragt. Nichts einfacher als das!

Troubleshooting: Sollte die 2FA Authentifizierung funktionieren, ihr aber euer Passwort eingeben müssen, ist wahrscheinlich eine der beiden Konfigurationsdateien falsch eingerichtet. Bitte stelle sicher, dass du @include common-auth auch wirklich auskommentiert hast!

FTP

Als letzten Schritt vor der Installation des CS:GO Servers installieren wir jetzt noch einen FTP Server und richten diesen ein. Das ist wichtig, weil ich euch später sogar noch eine Anleitung schreibe, wie ihr diesen Server zu einem Practice-Server umfunktioniert.

Ich werde allerdings auf den FTP Server nur kurz eingehen. Ich würde diesen sogar direkt nach der Benutzung wieder deinstallieren, da man diesen wahrscheinlich (sobald der Server läuft) eh nicht wieder braucht. Daher werde ich den jetzt auch nicht extra sicher konfigurieren.

Als Erstes installieren wir mit sudo apt install proftpd den FTP Server „proftpd„. Es wird automatisch das Paket proftpd-basic installiert, welche alle notwendigen Funktionen bietet.

FTP KonfigAnschließend ändern wir ein wenig die Konfiguration des Servers. Mit nano /etc/proftpd/proftpd.conf rufen wir die zu editierende Datei auf. Hier können wir unter anderem den Server Namen ändern.

Viele Anleitungen würden jetzt wieder (wie bei SSH) auf eine Portänderung hinweisen. Da wir den Service allerdings nach der Benutzung eh deinstallieren, ist das unwichtig. Solltet ihr den FTP Server gerne behalten wollen, so empfehle ich euch ein anderes Tutorial für SFTP.

Für uns ist allerdings die Zeile „RequireValidShell“ wichtig. Diese müssen wir gültig machen, indem wir das Rautezeichen entfernen, welches ein Kommentar beginnt. Anschließend können wir das Dokument bereits mit STRG+O und STRG+X speichern und schließen.

Anschließend starten wir mit /etc/init.d/proftpd restart den FTP Service von proftpd neu! Jetzt ist unser FTP Server fertig konfiguriert und einsatzbereit.

Nun müssen wir nur noch einen User anlegen und die Rechte ordentlich verteilen.

adduser -home /home -shell /bin/false csgoftp

Mit adduser legen wir einen Benutzer an. Dank -home weisen wir dem Benutzer ein home directory, also ein Stammverzeichnis zu. Da ich möchte, dass der User auf den sämtlichen Server Zugang hat, nehme ich hier direkt das Homeverzeichnis.

Sollte man die Bewegungsfreiheit auf dem FTP Server einschränken wollen, so kann man hinter /home noch weitere Verzeichnisse anhängen. Das sieht dann so aus /home/Beispielordner.

Dank -shell sagen wir, dass dieser User sich nicht per SSH verbinden darf, was eh irrelevant ist, da wir den FTP Server eh wieder deinstallieren. Als Letztes folgt nur noch der Name des Users.

Anschließend folgen Textausgaben darüber, dass ihr einen neuen Nutzer anlegt, dieser Nutzer seiner Gruppe zugeordnet wird, dass der „persönliche“ Ordner /home bereits existiert und das dieser Ordner nicht ihm „gehört“.

Vergebt hier bitte ein Passwort, welches ihr für den FTP Login braucht. Anschließend die Angaben über Name, Zimmernummer etc. einfach mit Enter bestätigen. Ihr habt nun einen Nutzer angelegt.

Im letzten Schritt kümmern wir uns noch um die Rechtevergabe. Dank chown -R csgoftp /home bekommt der Nutzer csgoftp rekursive Rechte für das Homeverzeichnis.  Er besitzt nun also die Rechte sämtliche Dateien in diesen Verzeichnissen zu ändern, hinzuzufügen oder zu löschen.

Wir haben die Installation des FTP Servers erfolgreich abgeschlossen und können dies mit FileZilla oder einem anderen FTP Programm eurer Wahl testen. Dazu einfach die ServerIP, den Nutzernamen und das Passwort sowie Port 21 eintippen und verbinden!

FTP Server

CS:GO installieren & einrichten

Kommen wir zum interessanteren Teil der Geschichte. Ich hoffe, euch geht diese Anleitung nicht zu lange. Weit über 3000 Wörter habe ich für euch bereits geschrieben und wir sind gerade erst bei der Installation des CS:GO Servers angekommen.

Wir müssen nun abwägen was sinnvoller für uns ist. Solltet ihr nur einen Server installieren und ohne extra Software auskommen wollen, könnt ihr eine Installation des Games nach Anleitung der offiziellen Steam Dokumentation über SteamCMD vollziehen.

Achtung! Bei der Installation über den LinuxGSM ist mir aufgefallen, dass die Steam Dokumentation fehlerhaft ist und man das Programm nicht ohne weiteres installieren kann.

Ihr könnt weiterhin einen Server per SteamCMD installieren, allerdings solltet ihr euch nach meiner Anleitung richten. Ihr überspringt dann einfach die Teile, welche sich nur auf den LinuxGSM beziehen.

Es gibt mit dem LinuxGSM eine wesentlich einfachere und klasse Alternative! LinuxGSM oder auch Linux Game Server Manager ist eine Open-Source-Software, welche die Installation und das Verwalten von Game Servern unter Linux vereinfachen soll.

117 verschiedene Spiele unterstützt der LinuxGSM dabei und bietet für jedes einzelne dieser Games einen einfachen Installer, Updater, Monitor, Alerts und Backups.

Kommen wir zur Installation. Bevor wir den LinuxGSM sowie den Server installieren, müssen wir sicherstellen, dass wir sämtliche Dependencies installiert haben. Das hört sich erstmal schwierig an, ist es aber nicht.

Eine Dependency ist im Prinzip nichts anderes, als eine weitere Software oder Bibliothek, welche von dem Programm gebraucht wird, welches wir installieren wollen. Ohne diese Dependency würde das Programm nicht funktionieren.

Unter Ubuntu machen wir das mit sudo dpkg --add-architecture i386; sudo apt update; sudo apt install curl wget file tar bzip2 gzip unzip bsdmainutils python util-linux ca-certificates binutils bc jq tmux netcat lib32gcc1 lib32stdc++6 libsdl2-2.0-0:i386.

Da LinuxGSM nicht ohne die SteamCMD funktionieren würde, müssen wir diese jetzt noch installieren. Ich habe diesen Beitrag inzwischen mehrmals umgeschrieben, weil ich mehrere Versuche durchgeführt habe die SteamCMD zu installieren und kein einziger Versuch funktioniert hat.

Das ging sogar so weit, dass ich den Server neu aufsetzen musste, weil sich beide Programme in irgendeiner Form blockiert und behindert haben. Ich hatte nämlich erst LinuxGSM installiert und dann erst die SteamCMD zum Laufen bekommen.

Das lag daran, dass es durch eine fehlerhafte Abfrage (nehme ich an) der LinuxGSM mir signalisiert hat, dass er den SteamCMD von selbst installiert, was er offensichtlich nicht getan hatte.

Eine Lösung habe ich auf askubuntu.com gefunden. Seit der Version 16.04 von Ubuntu scheinen nämlich sehr viele Personen das Problem zu haben, dass die offizielle Anleitung von Steam, wie man die SteamCMD installiert, nicht korrekt ist.

Die Lösung funktioniert so: Zuerst habe ich per Hand die sources.list Datei editiert, welche die Repositories einer jeden Ubuntu Installation beinhaltet.

sudo nano /etc/apt/sources.list

Anschließend habe ich 3 Zeilen (Repositories) hinzugefügt, das Dokument gespeichert und geschlossen.

deb http://archive.ubuntu.com/ubuntu xenial main universe multiverse
deb http://archive.ubuntu.com/ubuntu xenial-updates main universe multiverse
deb http://archive.ubuntu.com/ubuntu xenial-security main universe multiverse

Einschließend folgt mit sudo dpkg --add-architecture i386 eine Änderung der Architektur.

Durch sudo apt update lese ich die Paketlisten, welche wir im letzten Schritt hinzugefügt haben neu ein. Anschließend habe ich mit sudo apt install steamcmd die Installation des Programmes vollzogen.

Steam Lizenz

Ich könnte feiern! Eine Installation von SteamCMD wird vollzogen. Wir bekommen die Lizenz der Software angezeigt, welche wir mit Enter bestätigen. Das war also meine aufwendige Lösung für das SteamCMD Problem. Machen wir mit der Installation der LinuxGSM Software weiter!

Nun fügen wir mit adduser csgoserver einen neuen Nutzer hinzu. Installieren des linuxgsm ScriptsWählt einfach ein neues Passwort aus und bestätigt die Adresse & Co. einfach ohne Angaben.

Nun wechseln wir mit su - csgoserver den Nutzer. Downloaden wir nun das Shell-Script von LinuxGSM. wget -O linuxgsm.sh https://linuxgsm.sh && chmod +x linuxgsm.sh && bash linuxgsm.sh csgoserver

Was nun folgt, ist ein langer Installationsprozess. Es werden zuerst diverse Serverfiles sowie Logverzeichnisse angelegt, welche später für das Programm relevant sind.

Anschließend werden die Dependencies gecheckt und das Programm eingerichtet.

LinuxGSM Installationsvorgang

Der Installationsvorgang des Spiels kann hierbei sehr unterschiedlich lange gehen. Je nachdem ob du einen Homeserver mit einer 50 Mbit/s Leitung, einen vServer mit einer 100 Mbit/s Leitung (wie meiner bei Strato) oder einen vServer bei Netcup (dort habe ich fast alle meine Projekte gehostet) mit einer 1000 Mbit/s gewählt hast.

Denk einfach daran, dass du hier 15 GB Daten downloaden musst. Bei mir hat dies etwa 20 Minuten gedauert. Anschließend solltet ihr die Meldung „Success! App ‚740‘ fully installed bekommen. Ihr werdet um eine Bestätigung gebeten, was ihr mit Y auch tut.

Nun lädt der LinuxGSM uns die CS:GO Configs herunter. Wir werden nach einem GSLT Token gefragt. Diese Token kannst du in der Steam-Spielserver-Accountverwaltung erstellen.

Server Token

Den Servertoken fügen wir hinzu und geben keine anonymen Nutzungsstatistiken an den LinuxGSM weiter. Sorry Jungs, aber das bedeutet nur mehr Traffic und Auslastung für den Server. Schon sind wir mit der Installation des Games durch!

Ich versuche anschließend meinen Server mit ./csgoserver start zu starten. Boooom! Es funktioniert und unser Server startet.

Bitte denkt daran, dass das Starten des Servers etwas Zeit in Anspruch nehmen kann. Wie bereits erwähnt, kann man über den LinuxGSM seinen Server perfekt überwachen, was ich euch jetzt einmal demonstrieren möchte.

Mit ./csgoserver details bekommen wir diverse Informationen zu unserem Server selbst. Dazu zählen unter anderem die Ressourcenauslastung (CPU, RAM, Speicherplatz). Außerdem bekommen wir detaillierte Informationen zu unserem CS:GO Server.

LinuxGSM DetailsUnter Counter-Strike: Global Offensive Server Details findest du unter anderem auch deine Connect-Daten, falls du sie vergessen haben solltest. Das ist im Prinzip deine Server IP + Port 27015.

Standardmäßig ist kein Serverpasswort gesetzt, de_mirage als Karte für 16 Slots auf 64 tick eingestellt. Das können und werden wir definitiv jetzt ändern. Aber vorher kannst du ja versuchen dich auf deinen Server zu verbinden? Das sollte jetzt wunderbar funktionieren!

Glückwunsch! Du hast soeben deinen eigenen CS:GO Server aufgesetzt. Vollziehen wir jetzt noch kleinere Änderungen.

Als Erstes möchte ich, dass der Server auf 128 tick läuft. Dazu loggen wir uns mit su - root wieder auf den Administrationsaccount um.

Anschließend gehen wir mit cd /home/csgoserver/serverfiles/csgo/cfg in das Verzeichnis, indem alle Configs die das Game betreffen liegen. Mit ls lassen wir uns kurz das Verzeichnis anzeigen.

Anschließend müssen wir mit sudo nano csgoserver.cfg die Game Config anpassen.  Hier könnt ihr jetzt (wenn ihr wollt) wichtige Änderungen vornehmen. Dazu zählen unter anderem:

  • RCON Passwort ändern
  • Server Passwort ändern/hinzufügen
  • Hostname ändern

Wir gehen nach ganz unten in dem Dokument und fügen nach writeip eine weitere Zeile ein. Mit // starten wir einen Kommentar. Ich schreibe da jetzt einfach kurz Benutzerdefinierte Eintragung – 128 tick update rein.

Anschließend folgen die CS:GO Commands sv_mincmdrate 128 und sv_minupdaterate 128. Wie das jetzt aussehen sollte, siehst du im nächsten Bild. Speichern und schließen nicht vergessen.

csgoserver.cfg

Jetzt folgt noch eine kleine Änderung. Wir ändern mit sudo nano /home/csgoserver/lgsm/config-lgsm/csgoserver/csgoserver.cfg die Instanzenconfig des LinuxGSM Servers. Du denkst dir jetzt bestimmt: Maurice, was zur Hölle ist eine Instanzenconfig?!

Erkläre ich kurz. Konfigurationsdateien sind über den LinuxGSM in verschiedenen Instanzen geordnet. Jeder Gameserver bekommt seine eigene Instanzconfig. Also csgoserver1 -> csgoserver1.cfg, csgoserver2 -> csgoserver2.cfg usw.

Änderungen die in diesen Instanzenconfigs getätigt werden, sind nur für den einen Server angewendet. Dann gibt es eine Default Config. Eine Änderung in dieser Datei wird bei allen Servern angewendet. Ich hoffe, ich konnte das halbwegs gut erklären.

In dieser Datei ist unser GSLT Token eingetragen. Unter den Token schreiben wir tickrate="128", speichern das Dokument und schließen es wieder.

csgoservercfg tickrate

Übrigens… wenn ihr mal eine Datei sucht oder sich der Dokumentenstamm des Programmes ändern sollte, könnt ihr mit locate/find Datei/Verzeichnis nach Dateien oder Verzeichnissen suchen lassen. Das sich etwas ändert, kann durchaus normal sein.

Das Tutorial wird in ein paar Jahren immer noch online sein, aber bis dahin werden die Configs eventuell woanders zu finden sein.

locate updatedbAchtung Troubleshooting! Es kann vorkommen, dass man die ein oder andere Fehlermeldung bei der Benutzung des locate oder auch find Befehls bekommt.

Außerdem kann es sein, dass die ein oder andere Datei sowie ein Ordner fehlen, obwohl diese da sein müssten. Das kann verschiedene Ursachen haben.

Meistens reicht es allerdings aus mit sudo updatedb eine durchsuchbare Version einer Datenbank, bestehend aus euren Dateien zu generieren (siehe Foto).

Da wir nun alle erforderlichen Veränderungen in unseren Dateien vorgenommen haben, sollten wir unseren CS:GO Server neu starten, oder?

Zuerst loggen wir uns mit su - csgoserver wieder um. Anschließend führen wir mit ./csgoserver restart einen Neustart des Servers durch. Wir warten kurz und schauen uns mit ./csgoserver details die Konfiguration des Servers an.

Sofern ich richtig lesen kann, steht dort nicht mehr Tick rate: 64, sondern Tick rate: 128! Das könnt ihr selbstverständlich auch prüfen, indem ihr euch mit dem Server verbindet.

Mods, Plugins und Add-ons

Eigentlich wollte ich nach der Umstellung auf 128 Tick Schluss machen. Allerdings dachte ich mir, ein paar Hundert Wörter mehr schaden nicht und ihr müsst euch nicht rumquälen um herauszufinden, wie man jetzt daraus einen sagen wir Nade-Trainingsserver macht.

In diesem Beispiel installieren wir jetzt noch den csgo-practice-mode! Dank dem LinuxGSM ist es uns möglich, sehr simpel und schnell diverse Mods auf unserem Server zu installieren.

Für sämtliche (eventuellen) Plugins auf unserem Server, brauchen wir den Metamod:Source oder den SourceMod. Normalerweise müsste man hier relativ umständlich ein ZIP Archiv downloaden, per FTP hochladen in verschiedenen Verzeichnissen entpacken etc. Das ist hier aber nicht vonnöten!

Mods AddonsÜber ./csgoserver mods-install rufen wir das Installationsmenü des LinuxGSM’s auf. Anschließend müssen wir nur noch auswählen, welchen Mod wir installieren wollen. Ihr habt dort unter anderem die Auswahl zwischen Metamod:Source, SourceMod und get5!

Ich installiere über diesen Vorgang jetzt den Metamod:Source und den SourceMod. Jetzt solltet ihr mit ./gameserver mods-update ein Update der Mods installieren.

Jetzt legen wir uns als Admins fest, sodass wir unseren Server über !admin verwalten können. Das ist relativ simpel und geht sehr schnell. Wechseln wir einmal in das richtige Verzeichnis.

cd /home/csgoserver/serverfiles/csgo/addons/sourcemod/configs

Nun müssen wir die admins_simple.ini Datei editieren, welche wir mit nano admins_simple.ini aufrufen. Funktionieren tut das alles über deine SteamID, welche du hier rausfinden kannst.

Meine SteamID ist zum Beispiel STEAM_0:0:496455584. Anschließend schreibt ihr diese SteamID, sowie die Berechtigung (99:z) getrennt in Anführungszeichen ganz unten in das Dokument. Das sollte so wie im nächsten Bild aussehen.

Berichtigung

99:z gibt uns maximale Adminrechte. Genauere Informationen zur Rechtevergabe im SourceMod findet ihr hier. Speichert und schließt nun das Dokument. Wenn ihr nun auf den Server connected, dürfte nachdem ihr !admin in den Chat gepostet habt, das Adminmenu bei euch erscheinen.

Da wir nun die Mods eingerichtet haben, kümmern wir uns anschließend um die gewünschten Plugins. Ladet euch die letzte veröffentlichte Version des csgo-practice-mode herunter.

Jetzt kommen wir zur ersten Anwendung des FTP Servers, welchen wir weiter oben eingerichtet haben. Leider können wir hier nicht auf SCP setzen, da SCP dauerhaft überschreibt. Vorher aber eine kurze Verdeutlichung wie die Ordnerstruktur aufgebaut ist.

Wenn ihr das ZIP Archiv auf eurem PC extrahiert, seht ihr, dass ihr dort einen addons Ordner habt, der wichtig ist. Innerhalb des addons/sourcemod Ordners liegen sämtliche Dateien in eigenen Ordnern.

In unserem SSH Terminal sind wir ja noch in dem configs Ordner. Gehen wir mit cd ../ ein Verzeichnis zurück und lassen uns mit ls das Verzeichnis einmal anzeigen. Wie im nächsten Bild zu sehen, erkennt ihr, dass die Ordnerstruktur auf beiden PCs gleich ist.

Plugins installieren

FileZilla wie oben bereits kurz erwähnt das Programm meiner Wahl, wenn es zu einem Einsatz von FTP kommt. Wir müssen jetzt wie im obigen Bild zu sehen, die Plugin-Dateien in die richtigen Ordner verschieben.

Dazu loggen wir uns nochmals in unseren FTP Account ein, falls wir nicht immer noch angemeldet sind. Anschließend navigieren wir auf der linken und auf der rechten Seite in die richtige Ordnerstruktur.

Bei mir ist das auf meinem Heim-PC der Desktop wo ich den addons Ordner gespeichert habe und auf unserem Server haben wir mit /home/csgoserver/serverfiles/csgo/addons/sourcemod die gleiche Struktur.

Wir kopieren jetzt per Drag-and-Drop einfach alle Dateien in die richtigen Ordner. Früher hätte ich gesagt, holt euch in der Zwischenzeit einen Kaffee, heutzutage ist das in einer oder zwei Sekunden erledigt.

Damit ist die ganze Geschichte aber noch nicht abgeschlossen. Dadurch, dass ihr dem User csgoftp volle Rechte für sämtliche Verzeichnisse gewährt habt, funktioniert der LinuxGSM nicht wie gewohnt.

Zuerst solltet ihr den Nutzer csgoftp mit userdel csgoftp löschen. Anschließend vergeben wir mit chown -R csgoserver:csgoserver /home/csgoserver wieder rekursive Rechte an den Nutzer csgoserver für das csgoserver Verzeichnis.

Anschließend loggt ihr euch mit su - csgoserver wieder in den csgoserver Account ein und startet mit ./csgoserver restart den Server neu. Jetzt müsstet ihr mit .setup das Menü des csgo-practice-mode öffnen können.

Alles Weitere ist reine Einstellungsarbeit des Plugins. Eine detaillierte Dokumentation dazu findet ihr hier.

setup csgopracticemode

Ergänzung FTP

Da wir nun alles vollständig eingerichtet haben, können wir nun den FTP Server wieder deinstallieren. Das erledigen wir mit sudo remove proftpd. Fertig!

Fazit

Seinen eigenen CS:GO Server zu installieren erfordert einiges an Arbeit und Geduld. Dazu kommt das Einrichten des LinuxGSMs sowie sämtlicher Plugins.

Wichtige Links zum Einrichten deiner CS:GO Settings etc. findest du auf der Website des Metamod, des SourceMod, vom csgo-practice-mode und vom LinuxGSM.

Die Performance meines CS:GO Servers war okay, allerdings nicht perfekt. Man darf halt auch nicht vergessen, dass dies eine „schnelle“ Installation von CS:GO war, ohne Systemoptimierungen vorzunehmen, geschweige denn, dass ich die CS:GO Spieldateien angefasst habe.

Mit etwas Arbeit lässt sich hier sicherlich noch einiges an Performance herausholen.

Ich hoffe, euch hat dieser durchaus sehr umständliche Beitrag gefallen. Er hat mich einiges an Zeit, Arbeit und Nerven gekostet. Allerdings bin ich der Meinung, dass er es durchaus wert war.

Vielen Dank für eure Aufmerksamkeit, bis zum nächsten Mal. Maurice 🙂

Wie ist deine Meinung zu dem Artikel?

Aufgeregt
0
Glücklich
0
Verliebt
0
Geht so
0
Sehr gut
0
Maurice Woitzyk
Hallo! Ich bin Maurice. Ich komme aus dem wunderschönen Magdeburg und wenn ich nicht gerade in CS:GO verzweifle, vertreibe ich mir meine Zeit mit meinem Blog und Web Design/Web Development.

2 Comments

  1. So viel Arbeit und noch kein Lob? Super Anleitung, sehr viel Mühe gekostet. Riesen Daumen nach oben!

    1. Hallo VickaZz,

      vielen Dank für deinen Kommentar :). Tatsächlich steckt da echt eine Menge Arbeit drin. Vielen vielen Dank!

      LG
      Maurice

Leave a reply

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

You may also like