План статьи
====== Введение ======
В Российской Федерации действует ряд законов и постановлений, согласно которому операторы связи обязаны блокировать доступ к ряду ресурсов, нарушающих законы РФ и размещающие у себя пиратский контент, экстремистскую и сепаратистскую информацию. Для этого создан специальный регуляционный орган - Роскомнадзор. Этот государственный регулятор, помимо прочей своей деятельности, ведет реестр запрещенных сайтов на территории РФ. Каждый оператор связи обязан блокировать доступ к ресурсам из этого списка своими техническими средствами. В случае невыполнения такого предписания, операторам связи грозит немалый штраф или последующее лишении их лицензии. Для выполнения требований Роскомнадзора мы, команда MikBiLL, составили для вас небольшой план действий и программных средств, которые позволят вам автоматизировать процесс выгрузки, обработки и блокировки ресурсов, нарушающих законы РФ.
====== Настройка выгрузки РКН ======
У нас уже есть статья по настройке автоматизированной выгрузки данных из реестра запрещенных сайтов. Ознакомиться с ней вы можете здесь. [[mikbill:services:roskomnadzor|]]
Повторюсь, что для работы этой выгрузки вам понадобится электронный ключ - eToken или другой, но с разрешенным его экспортом. Закрытые ключи не подходят, т.к. вам необходимо будет экспортировать ваш ключ с носителя, сконвертировать в другой контейнер и использовать его вместе с openssl на вашем сервере Linux.
Также, согласно инструкции вам необходимо будет собрать openssl с поддержкой алгоритмов GOST. Как это сделать - описано в нашей инструкции здесь. [[http://wiki.mikbill.ru/mikbill/services/roskomnadzor?s[]=%D1%80%D0%BE%D1%81%D0%BA%D0%BE%D0%BC%D0%BD%D0%B0%D0%B4%D0%B7%D0%BE%D1%80#настройка_openssl_с_гостом_для_подписи_запросов|Настройка OpenSSL + GOST]]
====== 2) Блокировка по доменам. ======
Так как блокировка должна производиться путем запрещения доступа к определенным доменам, мы рекомендуем использовать для этого собственные ДНС сервера. В качестве производительного резолвера, мы рекомендуем Unbound DNS, который в три раза быстрее стандартного Bind и тратит куда меньше ресурсов на обработку запросов. Однако, вы можете использовать и любой другой ДНС сервер, по аналогии с алгоритмом, описанным далее.
Базовая настройка Unbound описана здесь [[billing:nas_access_server:services:unbound_3xfast_dns|]]
Свежую версию программы, а также официальную документацию вы можете посмотреть здесь [[https://www.unbound.net/|Официальный сайт Unbound]]
3) Настроим авторизацию по ключу между серваками с выгрузкой (биллингом) и днсами.
Если у вас ДНС и биллинг на разных серверах, то вам понадобиться настроить авторизацию без пароля между сервером биллинга и этим ДНС, потому что файл выгрузки будет скачиваться туда с помощью rsync
Если же у вас все на одном сервере, то пропустите этот шаг.
Итак, приступим к настройке.
1) На сервере ДНС создадим ключ.
$ ssh-keygen -t rsa
Ключ паролем не защищаем, в этом нет необходимости!
2)Копируем ключ с ДНС сервера на биллинг
ssh-copy-id -i ~/.ssh/id_rsa ЮЗЕР_ДЛЯ_RSYNC@IP биллинга
В команде не забудьте верно указать ваши данные!
3) Коннектимся к биллингу с ДНСа с тем именем, что указали в предыдущем шаге.
Не забывайте, что пользователи сами не создаются, поэтому вам необходимо создать его самому на обоих серверах перед генерацией ключа.
ssh ЮЗЕР_ДЛЯ_RSYNC@IP_Билинга
4) Скриптами забираем и преобразовываем выгрузку в формат local-zone для unbound
====== Заглушка для запрещенных сайтов ======
Вместо страницы, которая находится в реестре запрещенных сайтов нужно показать пользователю уведомление, что это не просто сайт недоступен, а он заблокирован согласно требованию Роскомнадзора. Для этого нужна специальная страница-заглушка.
Ее стоит настроить на nginx на 80 порт. Тогда трафик на запрещенные ресурсы не вызовет большой нагрузки на сервер с заглушкой.
Итак, приступим.
===== Установка NGINX =====
Перед установкой рекомендуем подключить свежие репозитории для NGINX, взять которые можно из дистрибутива.
для Centos
yum install nginx
для Debian
apt-get install nginx
===== Начальная настройка NGINX =====
==== Начальная настройка:Имя пользователя ====
Укажем правильно пользователя, от которого запускается nginx
Centos - apache
Debian - www-data
==== Начальная настройка:Потоки ====
Укажем количество потоков, в которое будет работать nginx
Рекомендуется использовать от 2 потоков но не более, чем ядер CPU*2
Базовая настройка Nginx закончена.
6) Перехватим весь трафик 53 порта и отправим его на свои днсы чтобы абоненты не подменяли его
7) Выдадим абонентам свои днсы, которые будут блокировать список РКН показывая клиенту заглушку.