Безопасность
Политика доступа по странам
Возможно ограничить доступ к контенту для списка стран. Чтобы это сделать:
- перейдите в раздел 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-документации обратитесь в службу технической поддержки MWS по адресу 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-серверы проверяют каждый запрос на своей стороне; они имеют те же вводные данные (
если вычисленная подпись не совпала и/или срок действия истек, сервер доставки контента CDN отправляет пользователю ошибку
403 Forbidden
- если вычисленная подпись совпала и срок действия ссылки не истек, сервер доставки контента CDN передает пользователю запрашиваемый файл
Способы генерации токена на источнике
PHP-скрипт с параметром IP
<?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
$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
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
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-хоста».