Sie sind nicht angemeldet.

Lieber Besucher, herzlich willkommen bei: sourceserver.info. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.

Bubelbub

Anfänger

  • »Bubelbub« ist der Autor dieses Themas

Beiträge: 19

Wohnort: Niedersachsen

Beruf: Web-Entwickler

Rootserver vorhanden: Ja

  • Nachricht senden

1

Samstag, 4. Mai 2013, 22:44

[Linux (Debian/Ubuntu)] Sicherer Fastdownload Server in wenigen Minuten

Hallöchen liebe Leserinnen und Leser,

nach meinem ersten Tutorial habe ich mich nun dazu entschlossen, euch zu zeigen, wie ihr schnell und einfach einen sicheren Fastdownload (FastDL) Server erstellen könnt.

Schnell im Sinne von:

- Ihr habt die Anleitung schnell durch
- Downloads sind schneller da BZIP2

Und Sicher im Sinne von:
- Garantierter Map-Download (Ihr müsst nichts irgendwo uploaden)
- FastDL NUR für EUREN, definierten Server (Kein Fremdzugriff)

Ihr nutzt noch keinen Nginx Server?
Und auch keinen Apache Server?
Sprich Port 80 ist frei? (shell: lsof -i :80)

Dann geht's jetzt los :bestteam:

Schritt 1.) (root)
Installation von gebrauchten Paketen.

Quellcode

1
apt-get install bzip2 nginx

Ubuntu Tipp: sudo apt-get ....

Schritt 2.) (root)
Nun stellen wir den Server ein, sodass er alles richtig weiterleitet zum richtigen Ordner.

Quellcode

1
cd /etc/nginx/sites-available && vi default


Die Datei sollte zum Schluss so aussehen...

Spoiler Spoiler

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
server {

	listen   80; ## IPv4 anschalten
	listen   [::]:80 default ipv6only=on; ## IPv6 anschalten

	server_name {eure server ip}; ## beispiel: server_name 127.0.0.1; ######################################

	access_log  /var/log/nginx/fastdl.access.log;

	location /cstrike/maps {
		alias	"{euer maps verzeichnis}"; ## beispiel: alias "/home/gameserver/Steam/SteamApps/common/Counter-Strike Source Dedicated Server/cstrike/maps"; #################################
		if ($http_referer != "hl2://{eure game server ip}:{euer game server port}") ## beispiel: if ($http_referer != "hl2://127.0.0.1:27015") ###################################################
		{
			return 403;
		}
		if ($http_user_agent != "Half-Life 2")
		{
			return 403;
		}
		autoindex off;
	}

	location / {
		root   /var/www;
		index  index.html index.htm;
	}
}


Schritt 3.) (root)
Nginx ist fertig und darf die Einstellungen nun laden.

Quellcode

1
service nginx reload


Schritt 4.) (root)

Man könnte jetzt schon den Fastdl nutzen!
Wir wollen jetzt noch die Maps als bz2 packen, sodass uns das Vorhaben auch etwas bringt.
Also ab zum user mit dem wir unseren Server auch immer starten. (Mein o.g. Beispiel wäre gameserver)

Quellcode

1
su gameserver -s /bin/bash


Schritt 5.) (gameserver)
Ab in den Spiel-Ordner, der in der "default"-Datei als "alias" markiert wurde.
Sprich, in meinem Beispiel wieder: /home/gameserver/Steam/SteamApps/common/Counter-Strike Source Dedicated Server/cstrike/maps

Quellcode

1
cd "/home/gameserver/Steam/SteamApps/common/Counter-Strike Source Dedicated Server/cstrike/maps"


Schritt 6.) (gameserver)
Jetzt lassen wir absolut den ganzen Ordner als .bz2 packen.
=> Den Befehl kann man immer ausführen, wenn eine neue Map eingefügt wurde :!: (Fehler ignorieren)

Quellcode

1
bzip2 -9kf *

Für das spätere automatisieren von dem ganzen könntet ihr folgendes Script nutzen.

Spoiler Spoiler

Quellcode

1
2
3
4
5
6
7
8
#!/bin/bash
OIFS="$IFS" # fuer spezielle dateinamen
IFS=$'\n' # fuer spezielle dateinamen
for i in $(find ./cstrike -type f -iname *.bsp -o -iname *.res -o -iname *.nav -o -iname *.mp3 -o -iname *.wav -o -iname *.vmt -o -iname *.vtf); do
	if [ ! -f "${i}.bz2" ]; then
		bzip2 -9k "$i"
	fi
done


Passt noch euren cstrike Ordner an. Solltet ihr TF2 o.ä. nutzen wollen. (Zeile 4)


Schritt 6.1.) (gameserver) (Info)
Euer Maps Ordner sollte danach so aussehen...

Bzw. per

Quellcode

1
ls

Quellcode

1
cs_assault.bsp	cs_assault.bsp.bz2
und so weiter....

Schritt 7.) (gameserver)
Jetzt fehlt nur noch der Eintrag in unserer Server-Konfiguration.

Quellcode

1
../cfg/server.cfg

Dort fügt ihr nun die folgende Zeile an das Ende an bzw. ersetzt eine bereits vorhandene.
Notfalls einfach ans Ende einfügen :)

Quellcode

1
sv_downloadurl "http://{eure server ip}/cstrike"

=> Bitte beachtet, dass das cstrike in dem Moment nichts aussagt! Ändert ihr es in z.B. tf2, müsst ihr es oben in der "default"-Datei auch anpassen.

So, wie gefällt euch mein zweites Tutorial?

Kritik, Meinungen, Wünsche, etc. bitte posten.
Ggf. folgt dann noch ein Tutorial für weitere Plugins 8)

Bei Fehlern bitte alles beschreiben und zusätzlich die /var/log/nginx/error.log Datei anfügen oder posten.

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Bubelbub« (11. Mai 2013, 12:10) aus folgendem Grund: 11.05.13 - Script für automatisiertes BZIPPEN eingefügt.


2

Samstag, 4. Mai 2013, 23:01

Der Ordner wo die Maps etc. drin sind muss nicht cstrike heißen, denn kann man so nennen wie man will.

@Für die ohne Root/vServer:

Damit keiner euern FastDL mit benutzt solltet ihr das Fake sv_downloadurl to players Plugin nutzen, das zeigt den Usern einfach ein andern Link an, diesen Link kann man in einer Cvar festlegen.

Lg
LeXx

Bubelbub

Anfänger

  • »Bubelbub« ist der Autor dieses Themas

Beiträge: 19

Wohnort: Niedersachsen

Beruf: Web-Entwickler

Rootserver vorhanden: Ja

  • Nachricht senden

3

Sonntag, 5. Mai 2013, 00:05

Der Ordner wo die Maps etc. drin sind muss nicht cstrike heißen, denn kann man so nennen wie man will.

Genau.
Man könnte es in dem Sinne auch weglassen.
Kommt eben auf die Konfiguration an.
Ich denke weiter an zukünftige Tutorials, die ggf. auch models o.ä. mit einbeziehen oder eben auf andere Seiten verlaufen.

Damit keiner euern FastDL mit benutzt solltet ihr das Fake sv_downloadurl to players Plugin nutzen, das zeigt den Usern einfach ein andern Link an, diesen Link kann man in einer Cvar festlegen.

Ich schreibe oben Sicher...

nginx fragt extra ab, ob der passende Source Server auf den Space zugreift oder eben ein Fremdserver.
Sprich: Nur die eigenen Spieler kommen drauf, andere werden abgeblockt.
So übrigens auch alle lokalen Zugriffe o.ä.
=> Testen schwer ;)

Hauwech

unregistriert

4

Sonntag, 5. Mai 2013, 00:35

Moin,
nette Anleitung. Ich würde den Zugriff auf den Webserver über iptables lösen um diesen nerst gar nicht mit der Anfrage zu belasten.
Ansonsten sollte ein "allow 127.0.0.1;" ebenfalls das Ziel erreichen oder? Ich stell mir die Abfrage bei >5 Gameserver unübersichtlich vor. Somit eine Zeile und gut ist.

Quellcode

1
2
listen   80; ## IPv4 anschalten
listen   [::]:80 default ipv6only=on; ## IPv6 anschalten


Eigentlich sollte die Zeile so ausreichen:

Quellcode

1
listen   [::]:80;


Welche Ubuntu- und ngixversion setzt du ein?

5

Sonntag, 5. Mai 2013, 01:24

Das ganze geht auch via Apache2 allerdings sieht es dann mit dem absichern bzw. einstellen anders aus. Wenn ich mal Zeit habe werde ich auch mal eine Anleitung für einen Apache2 Webserver machen.

Lg
LeXx

Hauwech

unregistriert

6

Sonntag, 5. Mai 2013, 01:29

Ich denke, er hat sich dabei etwas gedacht. Der Apache ist was die Ressourcen angeht sehr hungrig und zu mächtig für einen Fastdownload-Server. Nginx ist schneller, kleiner und performanter als ein Apache. Das sieht man ganz gut an den Benchmarktests. Was würde in diesem Fall für Apache sprechen?

7

Sonntag, 5. Mai 2013, 01:34

Ich mag Apache2 mehr nutze es seit Jahren, klar ist Nginx kleiner schneller etc. ich jedoch finde den Apache2 besser. Und ich denke im Forum gibt es bestimmt noch andere die auch diese Meinung haben :melo:

Lg
LeXx

Lacrimosa99

Fortgeschrittener

Beiträge: 275

Wohnort: Leipzig

Beruf: IT-Systemintegrator

Rootserver vorhanden: Ja

  • Nachricht senden

8

Sonntag, 5. Mai 2013, 01:36

noch System schonender würd ich zu Lighttpd tendieren... noch schlanker als NGinx und System schonender was die Prozesse angeht.. einzigst und allein, hatt Lighttpd keinen Proxy onboard ;)




9

Sonntag, 5. Mai 2013, 01:40


Infr@red

Fortgeschrittener

Beiträge: 378

Beruf: Management

Rootserver vorhanden: Ja

  • Nachricht senden

10

Sonntag, 5. Mai 2013, 02:40

Damit hab ich mich kürzlich auch befasst und aufgrund der regelmäßigen Updates hatte ich mich damals für Nginx entschieden, denn die Updatepolitik von Lighttpd ist eher dürftig und thttpd ist aus der Steinzeit, die letzte Stable ist von 2003, wenn dann würde ich den Fork einsetzen, der nennt sich sthttpd. Da ich an Nginx aber die einfache und schnelle Konfiguration mag, war es für mich damals die erste Wahl.

Und den Apache2 als reinen Downloadserver einzusetzen ist doch wie mit Kanonen auf Spatzen zu schießen 8)

Impact

Super Moderator

Beiträge: 1 276

Rootserver vorhanden: Nein

  • Nachricht senden

11

Sonntag, 5. Mai 2013, 03:13

@Bubelbub
Der Ansatz ist gut, allerdings fehlen einige Details (zB was die Werte in der Nginx Config machen, warum ich IPv6 anschalten sollte etc).
Ich würde den docroot central irgendwo außerhalb eines Gameserver anlegen und dann symlinks für jeden Gameserver benutzen.
Zum komprimieren der Maps wäre etwas wie (Code ist ungetestet und nur ein Beispiel)

Quellcode

1
2
3
4
5
for i in $(ls *.bsp); do
	if [ ! -f ${i}.bz2 ]; then
		bzip2 -9k "$i"
	fi
done

Besser geeignet.
Der Port des Webserver sollte irrelevant sein, ich weiß auch nicht wozu ein FastDL Server Ipv6 brauchen sollte.

@Hauwech
Man kann Dienste wie Nginx auch lokal binden, eine Regel benötigt man dann nicht mehr (Mach für einen FastDL wie hier aber keinen Sinn).

MfG
Impact

Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von »Impact« (5. Mai 2013, 16:01)


Hauwech

unregistriert

12

Sonntag, 5. Mai 2013, 10:55

@Impact
Localhost war nur ein Beispiel. :-) Wenn alle Gameserver auf dem gleichen Host laufen ist das am EInfachsten - hast du Recht. Jedoch soll es vorkommen, dass der FastDL ein kl. vServer ist auf den >5 Gameserver zugreifen.

Bubelbub

Anfänger

  • »Bubelbub« ist der Autor dieses Themas

Beiträge: 19

Wohnort: Niedersachsen

Beruf: Web-Entwickler

Rootserver vorhanden: Ja

  • Nachricht senden

13

Sonntag, 5. Mai 2013, 12:59

Ich würde den Zugriff auf den Webserver über iptables lösen um diesen nerst gar nicht mit der Anfrage zu belasten.

Ansonsten sollte ein "allow 127.0.0.1;"
Ist eben nicht das selbe.
Die Anfragen kommen nämlich nicht vom CS: S Server sondern vom Client.
Was bringt das sonst auch, wenn der CS: S Server sich die Datei downloaden muss um sie dem Client zu schicken!?
Das ganze geht auch via Apache2 allerdings sieht es dann mit dem absichern bzw. einstellen anders aus.
Ja wurde schon erklärt.
Apache2 = Unnötig für so etwas.

Nginx ist einfach schnell etc. und bietet die nötigen Sicherheiten, sage ich mal. (Siehe unten wegen thttpd)
Was würde in diesem Fall für Apache sprechen?
Eben... Nichts...
http://www.ulrich-block.de/klein-schnell-effizient/
Wegen thttpd:
Da wusste ich jetzt nicht ob dieser auch die Sicherheitseinstellungen hätte.
Sprich ob der Referer und der User-Agent stimmt...

Ich denke aber eher nicht, deshalb Nginx.
zB was die Werte in der Nginx Config machen, warum ich IPv6 anschalten sollte etc
Ist erklärt, zumindest was die Werte machen.

IPv6 muss man nicht aktivieren...
Nur wieso sollte man es dann direkt deaktivieren?
Man kann der Technik doch folgen... Ich z.B. habe alle Roots auf IPv6 freigeschaltet. Sprich da könnten die CS: S Server auch per IPv6 laden, wenn CS: S das mal können sollte :P
Ich würde den docroot central irgendwo außerhalb eines Gameserver anlegen und dann symlinks für jeden Gameserver benutzen.
Kannst du gerne machen.
Für dein Vorhaben würde ich aber eher folgendes machen:

1.) Globales Map-Verzeichnis anlegen
2.) In jedem Gameserver einen Symlink von "cstrike/maps" (o.ä.) zu "/global/maps" anlegen.
3.) Nginx Location "alias" auf /global/maps verweisen.

Dann nutzen absolut alle Gameserver das selbe Map-Verzeichnis.
Wenn man mehrere getrennt möchte (sprich Jail Maps, CS Maps, AIM, etc.), dann ist das natürlich sinnlos.
Dann wäre das "einfache" Symlinken aber auch wieder sinnlos, weil du dann sagen müsstest:
sv_downloadurl "http://.../server1"
Zum komprimieren der Maps wäre etwas wie
Ja schön und gut.
Ich möchte es Anwender freundlich bzw. Anfänger-Freundlich halten.
Sprich du packst einfach alle Dateien in dem Ordner als bz2 und fertig.
Er ignoriert die bereits bz2 Dateien ja automatisch (mit Fehlern).

So kannst du die Maps immer aktuell gepackt halten ohne Script.
Der Port des Webserver sollte irrelevant sein, ich weiß auch nicht wozu ein FastDL Server Ipv6 brauchen sollte.
Ja klar.
Ich hab mein Nginx auch auf nem anderen Port laufen...
Nur müsste ich dann wiederum erklären wo man den Port überall eintragen muss.

Und wie gesagt, IPv6 ist in dem Fall egal.
Obs aktiviert ist oder nicht, was solls...
Jedoch soll es vorkommen, dass der FastDL ein kl. vServer ist auf den >5 Gameserver zugreifen.
Ist bei mir auch tatsächlich der Fall.
Wobei ich nur 2 Gameserver nutze.

In dem Fall erweitert man das ganze einfach um eine weitere Location.
Die kann man ja anstatt "cstrike" dann "server1" und "server2" nennen.
Oder wie auch gesagt: einfach weglassen, Symlink von den Maps Ordnern auf nen Globalen Ordner.

Wenn die Gameserver alle die selbe ip haben und nur im Port Unterschiede aufweisen, kann man auch einen kleinen Regex rein packen der nur abfragt ob der anfang des Referers so einer wäre... "hl2://ip:".

MadMakz

Super Moderator

Beiträge: 1 878

Wohnort: ~#

Rootserver vorhanden: Ja

  • Nachricht senden

14

Sonntag, 5. Mai 2013, 15:31

mh, IPv6 ist garnicht mal so "dumm" als optionale einstellung.

Die Telekom stellt schon seit längerer zeit, vor allem bei IP kunden, dual-stack anschlüsse (ipv6 und v4 nativ).

Je nachdem wie der Sourceclient domain-adressen behandelt und über das betriebsystem auflösen lässt, was sehr wahrscheinlich ist, kann es durchaus gut sein das auch über ipv6 geladen wird wenn der domain-record denn auch eine ipv6 beinhaltet.

Mit etwas glück kann ich das demnächst mal testen weil ein IP-anschluss bei mir in-der-mache ist. weiß aber nicht ob es dual-stack sein wird.

Bubelbub

Anfänger

  • »Bubelbub« ist der Autor dieses Themas

Beiträge: 19

Wohnort: Niedersachsen

Beruf: Web-Entwickler

Rootserver vorhanden: Ja

  • Nachricht senden

15

Samstag, 11. Mai 2013, 12:12

Zum komprimieren der Maps wäre etwas wie (Code ist ungetestet und nur ein Beispiel)

Quellcode

1
2
3
4
5
for i in $(ls *.bsp); do
	if [ ! -f ${i}.bz2 ]; then
bzip2 -9k "$i"
	fi
done
Besser geeignet.


Habe an Stelle 6. mal ein geeignetes Script eingefügt.
Dieses erkennt alle Dateien und packt diese.
-> Sollte man vielleicht noch ein altes System nutzen ohne SteamCMD oder so und Sounds etc. haben ;)

Ist recht nützlich zum automatisieren ;)