Skip to content
На этой странице:

Безопасность

Политика доступа по странам

Возможно ограничить доступ к контенту для списка стран. Чтобы это сделать:

  • перейдите в раздел CDN-ресурсы
  • перейдите в настройки необходимого ресурса
  • перейдите в раздел Безопасность
  • выберите Политика доступа по странам

По умолчанию никакие ограничения доступа по странам к ресурсу не применяются. Возможно выбрать разрешающую или блокирующую политику.

Разрешающая политика

Доступ к ресурсу разрешен всем странам, кроме указанных в поле.

Блокирующая политика

Доступ к ресурсу запрещен всем странам, кроме указанных в поле.

Политика доступа по доменам

Данная опция необходима для запрета размещения ссылок на контент на других сайтах.

  • перейдите в раздел CDN-ресурсы
  • перейдите в настройки необходимого ресурса
  • перейдите в раздел Безопасность
  • выберите Политика доступа по доменам

По умолчанию никакие ограничения доступа по доменам к ресурсу не применяются. Возможно задать разрешающую или блокирующую политику.

Разрешающая политика

  • в появившемся окне впишите для каких доменов необходимо запретить доступ

Пример:

  • www.mydomain.com - запретить доступ для конкретного домена
  • *.mydomain.com и mydomain.com - запретить доступ всех поддоменов домена и сам домен; необходимо добавлять сам домен и дополнительно домен в формате wildcards

При доступе с введенных доменов, пользователь будет получать отказ в доступе.

Блокирующая политика

  • в появившемся окне впишите для каких доменов необходимо разрешить доступ

Пример

  • www.mydomain.com - разрешить доступ для конкретного домена
  • *.mydomain.com и mydomain.com - разрешить доступ всех поддоменов домена и сам домен; необходимо добавлять сам домен и дополнительно домен в формате wildcards для поддоменов

При доступе с других доменов пользователь будет получать отказ в доступе.

Политика доступа по IP-адресам

Возможно ограничить доступ к контенту в CDN для определенных IP адресов.

  • перейдите в раздел CDN-ресурсы
  • перейдите в настройки необходимого ресурса
  • перейдите в раздел Безопасность
  • выберите Политика доступа по IP-адресам

По умолчанию никакие ограничения доступа по IP к ресурсу не применяются. Возможно задать разрешающую или блокирующую политику.

Опция поддерживает и IPv4, и IPv6 адреса.

Разрешающая политика

Доступ к ресурсу разрешен всем IP-адресам, кроме указанных в поле.

Блокирующая политика

Доступ к ресурсу запрещен всем IP-адресам, кроме указанных в поле.

Политика доступа по клиентским приложениям

Возможно ограничить доступ к контенту из CDN по клиентским приложениям (User Agent), например, для определенного браузера, приставки, устройства.

  • перейдите в раздел CDN-ресурсы
  • перейдите в настройки необходимого ресурса
  • перейдите в раздел Безопасность
  • выберите Политика доступа по клиентским приложениям

По умолчанию доступ к ресурсу разрешен всем клиентским приложениям. Возможно задать разрешающую или блокирующую политику.

Разрешающая политика

Доступ к ресурсу разрешен всем клиентским приложениям, кроме указанных в поле.

Блокирующая политика

Доступ к ресурсу запрещен всем клиентским приложениям, кроме указанных в поле.

Редирект с HTTP на HTTPS

Включение редиректа трафика с HTTP на HTTPS доступно в настройках CDN-ресурса.

  • перейдите в раздел CDN-ресурсы
  • перейдите в настройки необходимого ресурса
  • перейдите в раздел Безопасность
  • включите опцию Редирект с HTTP на HTTPS

Чтобы настроить редирект с HTTPS на HTTP, воспользуйтесь API-документацией.

Примечание

Для получения подробной информации об API-документации обратитесь в службу технической поддержки CloudMTS по адресу support@cloud.mts.ru.

Важно

На CDN-ресурсе единовременно может быть включена только одна из опций редиректа: редирект с HTTPS на HTTP или с HTTP на HTTPS.

Secure Token

При использовании опции Доступ по ключу контент может быть загружен только по запросам, содержащим хеш-ключ. Опция защищает контент от нежелательных загрузок.

Временные ссылки на защищаемый контент будут иметь вид: http://cdn.example.com/photo.jpeg?md5=DMF1ucDxtHCxwYQ&expires=2147483647.

Настройки в личном кабинете

Чтобы включить Tokenized URL:

  • перейдите в раздел CDN-ресурсы
  • перейдите в настройки необходимого ресурса
  • перейдите в раздел Безопасность
  • включите опцию Secure Token
  • в появившемся окне введите желаемый ключ подписи
  • сохраните настройки
  • ключ должен содержать 6-32 символов

По умолчанию при генерации токена учитываются 4 параметра:

  • время истечения ссылки
  • исходная ссылка на файл
  • IP-адреса, для которых разрешен доступ к файлу
  • ключ

Возможно настроить токен таким образом, чтобы доступ к файлу был открыт для любых IP-адресов:

  • отключите опцию Добавить IP-адрес к токену
  • настройте токен на сервере-источнике так, чтобы параметр IP не учитывался

Настройка на сервере-источнике

Организуйте сайт таким образом, чтобы обращения пользователей к защищаемым файлам в CDN производились по временным ссылкам. При обращении серверов CDN, контент должен отдаваться вне зависимости от наличия ключа.

Хеш-ключ — результат вычисления односторонней хеш-функции MD5 (String), где String — параметр, полученный слиянием следующих элементов (в указанной последовательности): <expires><path><ip> <key>

  • <expires> — время истечения ссылки. Указывается в формате UNIX Timestamp.

  • <path> — исходная ссылка на файл

  • <key> — ключ

  • <IP> — IP-адреса, для которых разрешен доступ к файлу (параметр может не учитываться).

  • чтобы сгенерировать Unix Timestamp в linux: date +%s -d "10min" (текущее время + 10 минут)

    • CDN-серверы проверяют каждый запрос на своей стороне; они имеют те же вводные данные (<expires><path><ip><key>) и используют их для генерации хеш-ключа
  • если вычисленная подпись не совпала и/или срок действия истек, сервер доставки контента CDN отправляет пользователю ошибку 403 Forbidden

    • если вычисленная подпись совпала и срок действия ссылки не истек, сервер доставки контента CDN передает пользователю запрашиваемый файл

Способы генерации токена на источнике

PHP-скрипт с параметром IP

php
<?php
$secret = 'secret_key';
$ip = '1.2.3.4';
$path = '/live/133529_2/chunklist.m3u8';
$expires = time() + 10000;
$link = "$expires$path$ip $secret";
$md5 = md5($link, true);
$md5 = base64_encode($md5);
$md5 = strtr($md5, '+/', '-_');
$md5 = str_replace('=', '', $md5);
$url = "http://cdn.site.com{$path}?md5={$md5}&expires={$expires}";
 echo $url;
 echo "\n";

PHP-скрипт без параметра IP

php
<?php
$secret = 'secret_key';
$path = '/live/133529_2/chunklist.m3u8';
$expires = time() + 10000;
$link = "$expires$path $secret";
$md5 = md5($link, true);
$md5 = base64_encode($md5);
$md5 = strtr($md5, '+/', '-_');
$md5 = str_replace('=', '', $md5);
$url = "http://cdn.site.com{$path}?md5={$md5}&expires={$expires}";
 echo $url;
 echo "\n";

Где:

  • $secret — секретный ключ
  • $path — путь к файлу
  • $ip — IP-адрес, которому разрешено получить контент
  • $expires — время жизни ссылки (в секундах)
  • $link — строка для генерации токена с учетом необходимых параметров хеш-ключа
  • $url — ссылка на файл

Python-скрипт с параметром IP

import base64

from hashlib import md5
from time import time

ip = '1.2.3.4'
secret = 'secret_key'
stream_address = '133529_2'
path = f'/live/{stream_address}/playlist.m3u8'
expires = int(time()) + 100000
token = base64.encodebytes(md5(f"{expires}{path}{ip} {secret}".encode()).digest()).decode().replace("\n", "").replace("+", "-").replace("/", "_").replace("=", "")
secured_url = f"https://cdn.site.com{path}?md5={token}&expires={expires}"

print(secured_url)

Python-скрипт без параметра IP

import base64

from hashlib import md5
from time import time


secret = 'secret_key'
stream_address = '133529_2'
path = f'/live/{stream_address}/playlist.m3u8'
expires = int(time()) + 100000
token = base64.encodebytes(md5(f"{expires}{path} {secret}".encode()).digest()).decode().replace("\n", "").replace("+", "-").replace("/", "_").replace("=", "")
secured_url = f"https://cdn.site.com{path}?md5={token}&expires={expires}"

print(secured_url)

Где:

  • secret — секретный ключ
  • path — путь к файлу
  • ip — IP-адрес, которому разрешено получить контент
  • expires — время жизни ссылки (в секундах)
  • token — генерация токена
  • secured_url — ссылка на файл

Использование openssl

В результате будет получен только токен. Его необходимо использовать в ссылках и дополнительно указать время истечения ссылка в UNIX-время.

С параметром IP

shell
echo -n '2147483647/images/1.jpg1.2.3.4 secret_key' | openssl md5 -binary | openssl base64 | tr +/ -_ | tr -d =
'2147483647/images/1.jpg1.2.3.4 secret_key' = '{expires}{path}{ip} {secret_key}'

Без параметра IP

shell
echo -n '2147483647/images/1.jpg secret_key' | openssl md5 -binary | openssl base64 | tr +/ -_ | tr -d =
'2147483647/images/1.jpg secret_key' = '{expires}{path} {secret_key}'

Разрешенные HTTP-методы

Возможно задать разрешенные HTTP-методы запросов к контенту в CDN. По умолчанию разрешены и доступны методы GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS.

Активируйте данную опцию, если необходимо выбрать методы, которыми разрешено обращаться к CDN-ресурсу.

  • перейдите в раздел CDN-ресурсы
  • перейдите в настройки необходимого ресурса
  • перейдите в раздел Безопасность
  • включите опцию Разрешенные HTTP-методы

Запросы не будут обработаны указанными в строке методами.

Каждый сервер должен поддерживать методы GET и HEAD. Если сервер не распознал указанный метод, вернется статус 501 (Not Implemented). Если серверу метод известен, но он неприменим к конкретному ресурсу, будет возвращено сообщение с кодом 405 (Method Not Allowed).

В большинстве случаев рекомендуем оставлять оставлять методы GET, HEAD и POST.

Имя хоста, передающееся в SNI-запросах к серверу-источнику

Server Name Indication (SNI) — расширение протокола TLS, позволяющее указывать имя хоста, с которым необходимо установить соединение.

SNI необходимо для того, чтобы веб-серверы, размещённые на одном IP-адресе под разными доменами, могли корректно откликаться по HTTPS.

Опция Изменить имя SNI-хоста позволяет задать имя хоста, передающееся в SNI-запросах от CDN-серверов к серверу-источнику по протоколу HTTPS.

Важно

Данная опция работает только, если CDN-серверы используют протокол HTTPS для обращения к источнику.

Опция может принимать 2 значения:

  • Динамическое имя SNI-хоста
  • Пользовательское имя SNI-хоста

Динамическое имя SNI-хоста

Совпадает со значением опции Изменить заголовок Host.

Пользовательское имя SNI-хоста

Задаётся вручную. Значение не может быть пустым или содержать IP адрес.

Примечание

После создания ресурса опция будет автоматически активирована со значением по умолчанию «Динамическое имя SNI-хоста».