Zanonimizowana wersja forum tylko do odczytu

Zabezpieczenie serwera nginx na token

Wszystko na temat innych serwerów streaming'u.
anonim
Weteran
Posts: 826
Joined: 2013-05-04, 15:44

Zabezpieczenie serwera nginx na token

Post by anonim »

W związku z częstymi pytaniami odnośnie dodania zabezpieczeń do serwera nginx-rtmp-module podaje przykład dodania tokenu i generowania linku na stronie:

nginx.conf

Code: Select all

#user  nobody;
worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
        listen       8080;
        server_name  localhost;
		
		error_page   500 502 503 504  /50x.html;
		location = /50x.html {
		root   html;
		}
        
        location / {
            root   html;
            index  index.html index.htm;
        }
		
		#statystyki
		location /statystyki {
			rtmp_stat all;
			rtmp_stat_stylesheet stat.xsl;
		}
		location /stat.xsl {
			root html;
		}
		
		#zabezpieczenie na token i domenę
		location /on_play {
			secure_link $arg_token,$arg_e;
			secure_link_md5 haslo$arg_addr$arg_e;
			if ($secure_link = "") {
				return 401;
			}
			if ($secure_link = "0") {
				return 402;
			}
			#sprawdzenie adresu domeny
			if ($arg_pageurl !~* (http://twojadomena.pl|http://www.twojadomena.pl|http://Twoje-IP)) {
			return 403;
			}
            return 200;
        }		
	}
}

rtmp {
	server {
		listen 1935;
		ping 5s;
		ping_timeout 7s;
		notify_method get;
		publish_notify on;
		drop_idle_publisher 10s;
		busy on;
		application live {
			live on;
			idle_streams off;
			#wywołanie zapytania sprawdzającego
		    on_play http://Twoje-IP:8080/on_play;
			#maksymalna liczba osob online
			max_connections 100;
		}
	}
}
watch.php - generowanie tokena

Code: Select all

<?php

	//generowanie tokena
	$kanal = 'nazwa_kanału';
	$e = date('U')+5; // ważność linku w sekundach (jezezeli rtmp i www są na dwóch różnych maszynach lepiej podać większą wartość, gdyż może być różnica czasu.)
	$haslo = "haslo";
	$ajpi = $_SERVER['REMOTE_ADDR'];
	$md5 = base64_encode(md5($haslo . $ajpi . $e , true));
	$md5 = strtr($md5, '+/', '-_');
	$md5 = str_replace('=', '', $md5);
	$rtmp = $kanal."?token=".$md5."&e=".$e;
	
	//link z tokenem do wstawienia do odtwarzacza
	echo $rtmp;
	
?>
Objaśnienie w poniższym filmie instruktażowym
[center]<iframe width="420" height="315" src="https://www.youtube.com/embed/FwUSKOspArs" frameborder="0" allowfullscreen></iframe>[/center]

Jak zainstalować nginx-rtmp-module ? Odpowiedź znajdziesz w przygotowanym już dawno filmie na naszym kanale na youtube.
[center]<iframe width="420" height="315" src="https://www.youtube.com/embed/bfdgz4PVvu4" frameborder="0" allowfullscreen></iframe>[/center]

Zapraszam do dyskusji i zadawania pytań.

Pozdrawiam
Jarosław
Last edited by anonim on 2015-03-23, 21:44, edited 3 times in total.

anonim
Początkujący
Posts: 10
Joined: 2015-03-21, 09:00

Post by anonim »

Super :mrgreen:
Czekam na dalsze wyjaśnienia dla kompletnie zielonych jak ja

anonim
Początkujący
Posts: 45
Joined: 2013-10-21, 15:33

Post by anonim »

Super Jarku :mrgreen:
Tego tutka tu naprawdę brakowało , a przyda się na pewno nie jednemu :mrgreen:

anonim
Weteran
Posts: 826
Joined: 2013-05-04, 15:44

Post by anonim »

Temat zaktualizowany.

anonim
Początkujący
Posts: 45
Joined: 2013-10-21, 15:33

Post by anonim »

Super
Mam w zasadzie tylko jedno pytanie
Jeżeli zechce uruchomić więcej aniżeli jeden stream , to wystarczy zrobić więcej plików watch.php ??
To znaczy dla pierwszego streamu będzie to watch.php dla drugiego powiedzmy watch1.php itd.

anonim
Weteran
Posts: 826
Joined: 2013-05-04, 15:44

Post by anonim »

abel, możesz przesyłać nazwę kanału za pomocą GET
W pliku watch.php zmieniasz

Code: Select all

$kanal = 'nazwa_kanału';
na

Code: Select all

$kanal = $_GET['name'];
Dla przykładu kanał o nazwie test uruchamiasz

Code: Select all

watch.php?name=test

anonim
Początkujący
Posts: 45
Joined: 2013-10-21, 15:33

Post by anonim »

Super
Jutro zainstaluje nginx i spróbuje to odpalić :mrgreen:

anonim
Początkujący
Posts: 10
Joined: 2015-03-21, 09:00

Post by anonim »

Dziękuje serdecznie za poradnik
Mam pewien problem
Niby wszystko działa , ale po wpisaniu w pasek adresu przeglądarki
http://IP_serwera/watch.php
Otrzymuje błąd :
The requested URL /watch.php was not found on this server.
Plik watch.php znajduje sie w /var/www/watch.php
Natomiast kiedy umieszczę go w /var/www/html/watch.php
to zamiast oczekiwanego playera mam na ekranie zawartość tego pliku
Prosze o jakąś sugestie co może być zle

anonim
Weteran
Posts: 826
Joined: 2013-05-04, 15:44

Post by anonim »

konda, zainstaluj php ;-)

anonim
Początkujący
Posts: 10
Joined: 2015-03-21, 09:00

Post by anonim »

No tak teraz mam kolejny problem i nie mam pojęcia co sie stało
Nie moge włączyć nginx
Próba włączenia kończy sie komunikatem
sudo /usr/local/nginx/sbin/nginx
nginx: [emerg] unknown directive "secure_link" in /usr/local/nginx/conf/nginx.conf:45
Sprawdzałem tą linijke wielokrotnie i nie widze tam nic złego (porównując do przykłądu )
Nie wiem co może być nie tak , Apache zainstalowane i działa , php5 zainstalowane .
Wszystko niby działa ale nie działa

anonim
Weteran
Posts: 826
Joined: 2013-05-04, 15:44

Post by anonim »

konda, instalowałeś nginx zgodnie z instrukcją w filmie

Code: Select all

https://www.youtube.com/watch?v=bfdgz4PVvu4
?

anonim
Początkujący
Posts: 10
Joined: 2015-03-21, 09:00

Post by anonim »

Ja miałem zainstalowany nginx zanim napisałem pierwszego posta :-)
instalowałem go tak
apt-get update
apt-get install build-essential libpcre3 libpcre3-dev libssl-dev

wget http://nginx.org/download/nginx-1.7.4.tar.gz
wget https://github.com/arut/nginx-rtmp-modu ... master.zip

tar -zxvf nginx-1.7.4.tar.gz
unzip master.zip
cd nginx-1.7.4

./configure --with-http_ssl_module --add-module=../nginx-rtmp-module-master

make
make install
potem doinstalowałem Apache2
i jeszcze PHP5
ale zaraz zerkne na filmik , jak okaże sie że jest inaczej
to przeinstaluje wszystko na nowo :-)

EDIT
W zasadzie zrobiłem to tak samo jak w filmiku
Tak mi sie wydaje

anonim
Weteran
Posts: 826
Joined: 2013-05-04, 15:44

Post by anonim »

konda, nie zrobiłeś tak jak na filmie.

Napisałeś

Code: Select all

./configure --with-http_ssl_module --add-module=../nginx-rtmp-module-master 
Czyli zapomniałeś o module secure_link

Code: Select all

 --with-http_secure_link_module

anonim
Początkujący
Posts: 10
Joined: 2015-03-21, 09:00

Post by anonim »

No tak zgadza sie :mrgreen:
Poprawiłem się już przeinstalowałem wszystko na nowo
Serwer działa , ale nadal mam błąd
http://IP_serwera/watch.php
Otrzymuje błąd :
The requested URL /watch.php was not found on this server.
PHP zainstalowałem

Code: Select all

apt-get install php5
I chyba wszystko poszło dobrze bo serwer zwrócił

Code: Select all

Creating config file /etc/php5/apache2/php.ini with new version
php5_invoke opcache: already enabled for apache2 SAPI
php5_invoke pdo: already enabled for apache2 SAPI
php5_invoke readline: already enabled for apache2 SAPI
Module mpm_event disabled.
Enabling module mpm_prefork.
apache2_switch_mpm Switch to prefork
 * Restarting web server apache2                                       [ OK ]
apache2_invoke: Enable module php5
 * Restarting web server apache2                                       [ OK ]
Konfigurowanie pakietu php5 (5.5.9+dfsg-1ubuntu4.7) ...
Konfigurowanie pakietu php5-json (1.3.2-2build1) ...
php5_invoke: Enable module json for cli SAPI
php5_invoke: Enable module json for apache2 SAPI
Więc chyba sie zainstalowało i włączyło

[ Dodano: 2015-03-27, 08:44 ]
A więc taka , udało mi sie wyświetlić player . Musiałem wstawić plik watch.php do katalogu html
Ale nie wiem dlaczego nie chce odtwarzać tego co nadaje przez ffmpeg, bat leci lecz player nie startuje
Niezależnie co wpisze w polu adresu playera , próbowałem na różne sposoby

Code: Select all

rtmp://IP_serwera_nginx/live/nazwa_kanału

Code: Select all

rtmp://IP_serwera_nginx/live/<? echo $rtmp; ?>
Zmieniłem też linie którą dopowiedziałeś wyżej

Code: Select all

$kanal = 'nazwa_kanału';
na
$kanal = $_GET['name'];
Do playera wpisałem

Code: Select all

rtmp://IP_serwera_nginx/live/watch.php?name=nazwa_kanału
nic nie działa
W pliku bat kod nadawania mam

Code: Select all

rtmp://ip_serwera_nginx/live/nazwa_kanału
Nie wiem co robię źle

anonim
Weteran
Posts: 826
Joined: 2013-05-04, 15:44

Post by anonim »

Podaj zawartość Twoich plików nginx.conf oraz watch.php, wtedy będzie można coś więcej podpowiedzieć ;-)

Post Reply