Храмы Высота ЧБ Люди Вокзалы Парк Зима. Снег Саратов Сад-огород. Хлеба Грибы Лес Зима. Снег Цветы Живность Кошки Река Хлеба Лес Зима. Снег Новый Год Небо. Облака Радуга Курьезы Река Хлеба Лес Зима. Снег Небо. Облака Курьезы Астро Зима. Снег Новый Год Шарм Эль Шейх. Тропикана Гранд Азур Кошки Ящерица Йошкар-Ола. Казань. Чебоксары Гуамское ущелье Майкоп Грибы Зима. Снег Лошади Сад-огород. Зима. Снег Должанка Египет Люди Санкт-Петербург Санкт-Петербург Финляндия Финляндия Греция. Родос. Детский Сад 158 Новый Год Авто Мото Макро Карта Дети Питание Шарм Эль Шейх. Тропикана Гранд Азур Астро Набережная Петрозаводска Карелия. Путешествия. Весна Макро Карта Отдых Лыжные прогулки Стихи CentOS Oracle SAMBA GlassFish LAMP Motion EJabberd Postfix. Dovecot. Amavisd Perl Jabber VLC M3U Ubuntu
Обои для рабочего стола. Лучшее качество 1600x1200.
ДНЕВНИКИ


Назад >> Сергей ШИБКА >> CentOS


26.09.2012 CentOS 5.x и Motion. Просмотр видео потока после авторизации.

  Просмотр видео потока после авторизации.

Я не нашел в данном пакете встроенного механизма авторизации для просмотра потока в браузере через интернет. Из-за этого сервис будет постоянно доступен для всех. Доступ конечно можно ограничить через нужный IP адрес правилами в iptables, но это неудобно, т.к. IP адрес может быть динамическим, к примеру, интернет на смартфоне.

В таком случае, делаем свой велосипед. Авторизацию сделаем через Apache + IPTables.

И так, в системе уже живет Motion, Apache и IPTatables.

Есть сайт доступный в миру: mysite.ru

Физически на диске он расположен: /home/www/mysite.ru/cgi-bin и /home/www/mysite.ru/www

Нам нужно создать файл webcam.cgi и положить в папку /home/www/mysite.ru/cgi-bin, назначить на него права доступа 775:

touch /home/www/mysite.ru/cgi-bin/webcam.cgi
chmod 755 /home/www/mysite.ru/cgi-bin/webcam.cgi

Содержимое файла webcam.cgi:

#!/usr/bin/perl

################################################################################

$ENV{PATH} = "/usr/bin";

print "Content-type: text/html \n\n";

print <<HTML;
<html>
<head>
<title> Веб - камера </title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
</head>
<body>
<center>
<img src="http://mysite.ru:8081">
</center>
</body>
</html>
HTML

################################################################################


Теперь, если набрать в браузере http://mysite.ru/cgi-bin/webcam.cgi, то этот файл будет транслировать поток, который отдает motion на порту 8081.

Далее создаем файл паролей для авторизации через apache, выполняем:

htpasswd -cb /home/www/mysite.ru/.htpasswd user parol

Далее создаем файл .htaccess в /home/www/mysite.ru/cgi-bin:

touch /home/www/mysite.ru/cgi-bin/.htaccess

Содержимое файла .htaccess:

AuthType Basic
AuthName "Monitor MySite.Ru"
AuthUserFile  /www/mysite.ru/.htpasswd
require valid-user


Теперь, если набрать в браузере http://mysite.ru/cgi-bin/webcam.cgi, то появится панель авторизации для ввода логина и пароля.

Всё это хорошо, логин с паролем уже есть, но поток всё еще можно видеть по прямому адресу http://mysite.ru:8081 минуя страницу файла вызова webcam.cgi

Вот теперь нужно нашему велосипеду поставить круглые колеса вместо квадратных.

Создаем файл webcam_ipt.cgi и кладем в папку  /home/www/mysite.ru

touch /home/www/mysite.ru/webcam_ipt.cgi
chmod 755 /home/www/mysite.ru/webcam_ipt.cgi

Содержимое файла webcam_ipt.cgi:

#!/usr/bin/perl

$ENV{PATH} = "/usr/bin";

foreach $arg_ip (@ARGV){
        if ($arg_ip =~ /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/){
            $arg_ip =~ /(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})/;
            $ip_on = "$1.$2.$3.$4";
            system("/sbin/iptables -A Motion-Port-INPUT -p tcp -m state -m tcp -s $ip_on --dport 8081 --state NEW -j ACCEPT");
        }
}


Далее нам необходимо, чтобы файл webcam_ipt.cgi выполнялся при выполнении webcam.cgi.

Приводим файл webcam.cgi к виду:

#!/usr/bin/perl

################################################################################

$ENV{PATH} = "/usr/bin";

$ip_for_ipt = "$ENV{'REMOTE_ADDR'}";
system("/home/www/mysite.ru/webcam_ipt.cgi $ip_for_ipt");

print "Content-type: text/html \n\n";

print <<HTML;
<html>
<head>
<title> Веб - камера </title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
</head>
<body>
<center>
<img src="http://mysite.ru:8081">
</center>
</body>
</html>
HTML

################################################################################


Мы уже стали ближе к цели, но работать не будет, необходимо следующее. Чтобы запускать perl скрипты из ВЕБ от имени root:

Необходимо установить пакет:

yum install perl-suidperl

Файлам, которые необходимо запускать нужно, установить UID при выполнении chmod 4755 file.cgi

Т.е. чтобы наш файл webcam_ipt.cgi запускалася от имени root выполняем:
chmod 4755 /home/www/mysite.ru/webcam_ipt.cgi

Попытаюсь описать на пальцах, как это работает.

Заходим в браузер, вводим  http://mysite.ru/cgi-bin/webcam.cgi, появляется запрос авторизации apache, вводим логин и пароль, если авторизация пройдена в скрипте webcam.cgi выполняется :

$ip_for_ipt = "$ENV{'REMOTE_ADDR'}"; # получение IP адреса
system("/home/www/mysite.ru/webcam_ipt.cgi $ip_for_ipt"); # выполнение скрипта webcam_ipt.cgi которому на вход подан IP адрес

Далее выполняется файл webcam_ipt.cgi, в нем полученный IP адрес подставляется в команду iptables, которая открывает порт 8081 для полученного IP адреса.

Правило создано, порт открыт, и файл webcam.cgi начинает гнать поток видео с mysite.ru:8081

Теперь нужно позаботиться о том, чтобы порт закрылся. Делаем это просто и кардинально, добавляем в файл crontab запись * * * * * root /sbin/iptables -F Motion-Port-INPUT > /dev/null

echo "* * * * * root /sbin/iptables -F Motion-Port-INPUT > /dev/null" >> /etc/crontab

Результат выполнения будет таков, что команда iptables будет очищать все правила таблицы в цепочке Motion-Port-INPUT и порт 8081 через минуту будет закрыт.

Содержимое файла c расположением цепочек и правил в них /etc/sysconfig/iptables:

*filter
:FORWARD ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:Motion-Port-INPUT - [0:0]
:RH-Firewall-1-INPUT - [0:0]
:OUTPUT ACCEPT [0:0]

### Цепочка Motion-Port-INPUT
-A INPUT -j Motion-Port-INPUT
###

### Цепочка RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m tcp -m state --dport 21 --state NEW -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m tcp -m state --dport 22 --state NEW -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state -m tcp --dport 80 --state NEW -j ACCEPT
-A INPUT -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -j REJECT
###
COMMIT



комментарии (1)


[ Назад ]


© 2005 - 2024 * Сергей Шибка