Сервер фильтрации SkyDNS ISP Go

Инструкция по установке и интеграции с АСР LANBilling

(Материал статьи подготовлен специалистами SkyDNS)

Оглавление
Описание платформы контент-фильтрации и родительского контроля SkyDNS ISP Go
Архитектура и системные требования
Инструкция по установке на Debian Jessie
Настройка Redis
Настройка компонентов ISP Go
Настройка nginx
Настройка автоматического обновления базы доменов
Настройка страницы блокировки
Особенности прослушивания на конкретных IP-адресах
Примеры запросов к API
Резервное копирование и восстановление
Дублирующий сервер ISP Go
Миграция с прошлых версий
Установка модуля интеграции с LANBilling
Покупка/Дополнительная информация/Поддержка

Описание платформы контент-фильтрации и родительского контроля SkyDNS ISP Go

Платформа контент-фильтрации и родительского контроля SkyDNS ISP Go является программным средством для организации услуг родительского контроля и контент-фильтрации в сетях операторов связи и интернет-провайдеров любого размера и типа, включая операторов мобильной связи.
Широкий функционал и открытое API платформы контент-фильтрации позволяет организовать предоставление услуг контент-фильтрации как для домашних пользователей (блокировка недетских сайтов), так и для коммерческих организаций (управление доступом сотрудников в интернет, блокировка социальных сетей, анонимайзеров и прокси), образовательных заведений и библиотек (блокировка запрещенного законодательно контента — экстремизм, недетский контент) и публичных Wi-Fi сетей (блокировка запрещенного законодательно контента — экстремизм, недетский контент).
Открытое API платформы позволяет гибко задавать представление услуги для конечных пользователей — предоставлять разные настройки разным устройствам, создать расписание работы и т.п.
База категоризации платформы контент-фильтрации содержит более 10 млн. веб-сайтов и обновляется ежесуточно. База включает более 50 категорий доступных для блокировки. В том числе поддерживается режим принудительно перенаправления с любых поисковых систем на безопасный поиск SkyDNS с фильтрацией всего запрещенного российским законодательством контента, что идеально подходит для детей и образовательных заведений.

Архитектура и системные требования

Решение для интернет-провайдеров ISP Go состоит из трех компонентов:
  • фильтрующего DNS-сервера,
  • веб-приложения "страница блокировки"
  • веб-приложения "ISP Go API" для управления настройками пользователей

Отдельно поставляется административный веб-сервер для ручного управления настройками и подключенными пользователями.

Имеются зависимости от следующих внешних программных продуктов:
  • nginx используется как reverse proxy для странички блокировки и ISP Go API
  • redis является хранилищем данных
  • rsync нужен для скачивания обновлений фильтра с серверов SkyDNS

Пользователям, включивших у провайдера услугу фильтрации контента, средствами самого провайдера выдается адрес фильтрующего DNS-сервера или производится перенаправление на него их DNS запросов. С помощью ISP Go API (т.е. путем особых HTTP-запросов, выполняющихся из скриптов провайдера) этот DNS-сервер информируется о том, какие категории сайтов не надо показывать пользователю. Также в API поддерживаются индивидуальные пользовательские черный и белый списки и их глобальные варианты, действующие для всех пользователей.

Если пользователь наберет в браузере адрес запрещенного сайта, то фильтрующий DNS-сервер ответит на DNS-пакет от браузера IP-адресом страницы блокировки, и браузер загрузит именно ее. На странице блокировки можно прочитать, почему доступ к данному домену заблокирован. Дизайн страницы блокировки при желании можно изменить.

Аппаратный сервер, на который устанавливается ISP Go, должен удовлетворять следующим минимальным требованиям:
  • Архитектура x86-64
  • Установленный linux, (Debian Jessie amd64)
  • 4 GB RAM
  • 2 GHz CPU, 2 ядра
  • 10 GB свободного места на диске

Решение может быть также установлено на виртуальном сервере с аналогичными характеристиками.

Решение распространяется в виде deb-пакета для архитектуры amd64.

Для функционирования решения у провайдера уже должен существовать обычный рекурсивный кеширующий DNS-сервер. Bind 9 или unbound с настройками по умолчанию на другой машине вполне подходит, или можно поставить один из этих DNS-серверов на ту же машину и сконфигурировать, чтобы он слушал только адрес 127.0.0.1.

Фильтрующий DNS-сервер (isp-go-dnsproxy) передает все незаблокированные запросы кеширующему, а сам кешированием не занимается. Имеется возможность пропускать все запросы всех пользователей (даже тех, для которых услуга фильтрации выключена) через фильтрующий DNS-сервер без фильтрации запросов.

Веб-приложения «страница блокировки» и «ISP Go API» выполнены в виде отдельных демонов, каждый из которых слушает свой порт на адресе 127.0.0.1. Для передачи запросов из внешней сети к этим веб-приложениям используется nginx, он слушает порт 80 на внешнем сетевом интерфейсе. Распределение запросов по этим веб-приложениям осуществляется, исходя из заголовка Host: в HTTP-запросах. Запросы, поступающие на выделенное для ISP Go API доменное имя, передаются в это веб-приложение, а все остальные запросы попадают на страничку блокировки.

У провайдера должна существовать какая-либо сущность (биллинг, система авторизации), которая «знает» соответствие между IP-адресами и пользователями. Необходимым условием для внедрения решения SkyDNS для провайдеров является возможность в существующем биллинговом решении запуска скриптов при выдаче IP-адреса пользователю и (желательно) при отключении пользователя, а также наличие специалиста, способного написать скрипты, обращающиеся к веб-приложению ISP Go API по HTTP при этих событиях.

Сервер, на котором установлен isp-go-dnsproxy, должен иметь возможность отправлять HTTP POST запросы на сервер www.skydns.ru

Инструкция по установке на Debian Jessie


ISP Go необходимо устанавливать на Debian Jessie (установочный образ брать отсюда: http://www.debian.org/distrib/netinst, качать amd64, без слова kfreebsd). Установка на другие дистрибутивы, другие версии Debian, или на компьютеры с 32-битным процессором невозможна.

После установки Debian согласно официальному руководству
(http://www.debian.org/releases/stable/amd64/ ) надо скопировать на сервер deb-пакет от ISP Go. Далее выполнить следующие действия. Все команды надо выполнять от пользователя root:

1. Установить SSH и iptables, если они еще не установлены:

apt-get install ssh iptables

2. Средствами iptables закрыть доступ к порту 53 (как UDP, так и TCP) из сетей, не принадлежащих провайдеру. Минимальный пример для провайдера с сетью 192.168.5.0/24:

iptables -A INPUT -p udp --dport 53 ! --src 192.168.5.0/24 -j DROP
iptables -A INPUT -p tcp --dport 53 ! --src 192.168.5.0/24 -j DROP 

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

Необходимо сделать, чтобы правила iptables автоматически применялись после перезагрузки сервера. Одним из способов добиться этого является установка пакета iptables-persistent:

apt-get install iptables-persistent


Сохранение правил:

service netfilter-persistent save

3. Поставить пакет. Этот шаг завершится с ошибкой, так как не установлены зависимости. На ошибку не надо обращать внимания.

dpkg -i isp-go_0.0.2_amd64.deb

4. Поставить все недостающие зависимости:

apt-get -f install

Альтернативным вариантом может быть установка с помощью утилиты gdebi:
установка gdebi:

apt-get  install gdebi-core

установка пакета:

gdebi isp-go_0.04_amd64.deb

В результате Debian поставит Redis-сервер, Nginx и запустит (в не до конца настроенном состоянии) сначала их, а потом ISP Go.

Процесс установки создает конфигурационные файлы:

  • /etc/isp-go/config.ini – настройки всех компонентов.
  • /etc/nginx/conf.d/log_format.conf – настройка формата логов страницы блокировки
  • /etc/nginx/sites-available/isp-go-api – виртуальный хост для обработки запросов к API
  • /etc/nginx/sites-available/isp-go-blocked – виртуальный хост страницы блокировки
Для настройки ISP Go все четыре перечисленных выше файла необходимо отредактировать вручную.

Настройка Redis

В файле /etc/redis/redis.conf необходимо указать максимальный объем памяти, используемой для хранения данных, и алгоритм работы при достижении лимита. Во избежание потери данных, следует использовать такие значения:
maxmemory 2GB
maxmemory-policy noeviction
Для применения настроек следует перезапустить Redis:
service redis-server restart

Настройка компонентов ISP Go

Все компоненты ISP Go читают один файл настроек: /etc/isp-go/config.ini. Он состоит из нескольких секций.

Секция [dnscache]

Секция используется isp-go-dnsproxy и содержит единственный ключ forward. В качестве значения следует указать IP-адрес и порт кеширующего DNS-сервера, на который следует перенаправлять все незаблокированные DNS-запросы.
Пример:
 [dnscache]
forward = 127.0.0.1:53

Секция [proxy]

Секция используется isp-go-dnsproxy и содержит ключи listen, blockpage-ip, log и pid.

Ключ listen содержит IP-адрес и порт, на котором isp-go-dnsproxy должен принимать запросы от клиентов. Ключ blockpage-ip содержит IP-адрес, который следует отдавать клиентам в ответах на заблокированные запросы. Иными словами, это IP-адрес, на котором nginx принимает запросы к странице блокировки. В типичном случае, когда фильтрующий DNS-сервер и nginx запущены на одном сервере, следует и там и там прописать IP-адрес одного из сетевых интерфейсов сервера.

Ключи log и pid содержат абсолютные пути до log-файла и pid-файла, соответственно. Чтобы не потерять совместимость с init-скриптами, входящими в состав пакета, путь до pid-файла изменять запрещено.
Пример:
[proxy]
listen = 192.168.5.1:53
blockpage-ip = 192.168.5.1
log = /var/log/isp-go/isp-go-dnsproxy.log
pid = /var/log/isp-go/isp-go-dnsproxy.pid

Секция [datafiles]

Секция содержит ключи path, file и cats, при этом ключ file может встречаться несколько раз.

Ключ path содержит абсолютный путь к каталогу, в котором находится база доменов SkyDNS. Файлы, составляющие базу доменов, перечислены по одному в ключах file. Порядок ключей важен – каждый файл рассматривается как набор поправок к файлам, указанным после него. Для сохранения работоспособности базы, в ключах path и file запрещено указывать значения, отличные от таковых по умолчанию.

Ключ cats содержит абслоютный путь до json-файла со списком категорий. Редактирование файла catgroups.json, входящего в состав пакета, не допускается, т.к. изменения пропадут при обновлении пакета ISP Go. В случае необходимости сокрытия части категорий или перевода названий категорий на другой язык, необходимо создать копию файла catgroups.json и внести изменения в нее. При этом номера категорий ("50": ...) изменять нельзя, т.к. они должны соответствовать содержимому базы доменов SkyDNS.
Пример:
[datafiles]
path = /var/lib/isp-go/filter/
file = host2cat-fast.dat
file = host2cat.dat
cats = /usr/share/isp-go/config/catgroups_ru.json
По-умолчанию категории выводятся на русском языке. Для получения категорий на английском языке необходимо указать файл catgroups_en.json (входит в состав пакета).

Секция [blockpage]

Секция используется веб-приложением «страница блокировки» и содержит ключи listen, templates, log и pid.

Ключ listen содержит IP-адрес (обычно 127.0.0.1) и порт, на котором демон isp-go-blockpage принимает HTTP-запросы, предназначенные для страницы блокировки. Важно: демон isp-go-blockpage не принимает запросы от пользователей напрямую, этим занимается nginx.

Ключ templates содержит абсолютный путь до каталога с шаблонами страницы блокировки. Изменять непосредственно шаблоны, поставляемые в составе пакета, нельзя (так как изменения будут потеряны при обновлении ISP Go), но можно скопировать весь каталог /usr/share/isp-go/templates под другим именем и изменять файлы в копии.

Ключи log и pid содержат абсолютные пути до log-файла и pid-файла, соответственно. Чтобы не потерять совместимость с init-скриптами, входящими в состав пакета, путь до pid-файла изменять запрещено.
Пример:
[blockpage]
listen = 127.0.0.1:8081
templates = /usr/share/isp-go/templates/ru/
log = /var/log/isp-go/isp-go-blockpage.log
pid = /var/run/isp-go/isp-go-blockpage.pid
По-умолчанию страница блокировки выводится на русском языке. Для получения страницы блокировки на английском языке необходимо указать папку /usr/share/isp-go/templates/en/ (входит в состав пакета).

Секция [api]

Секция используется веб-приложением «ISP Go API» и содержит ключи listen, log и pid.

Ключ listen содержит IP-адрес (обычно 127.0.0.1) и порт, на котором демон isp-go-api принимает HTTP-запросы, предназначенные для страницы блокировки. Адрес или порт должен отличаться от значения, используемого в секции [blockpage].

Важно: прослушивание на доступном извне IP-адресе будет проблемой в безопасности. Демон isp-go-api не содержит никаких механизмов авторизации, поэтому любой, кто может отправить запрос, может внести любые изменения в пользовательские настройки (включая чужие). Для предотвращения такой ситуации рекомендуется использовать здесь IP-адрес 127.0.0.1, а предоставление доступа извне (с авторизацией) реализовать на уровне nginx.

Ключи log и pid содержат абсолютные пути до log-файла и pid-файла, соответственно. Чтобы не потерять совместимость с init-скриптами, входящими в состав пакета, путь до pid-файла изменять запрещено.
Пример:
[api]
listen = 127.0.0.1:8080
log = /var/log/isp-go/isp-go-api.log
pid = /var/run/isp-go/isp-go-api.pid

Секция [common]

Секция используется всеми тремя демонами и содержит ключи redis-ip, redis-port, filter-default и user-filter-default. При этом ключи filter-default и user-filter-default могут встречаться более одного раза.

Ключи redis-ip и redis-port задают, к какому redis-серверу должны подключаться демоны, входящие в состав ISP Go. Исходя из соображений производительности, рекомендуется запускать redis-сервер на той же машине, где установлен ISP Go.

Ключи filter-default задают перечень идентификаторов категорий, которые должны быть заблокированы при поступлении DNS-запросов с IP-адресов, не принадлежащих ни одному известному пользователю. Перечень категорий, которые будут блокироваться у вновь создаваемых пользователей, можно задать с помощью ключа user-filter-default. Это может быть удобно для блокировки по умолчанию категорий типа фишинга или вирусных сайтов. Посмотреть соответствие идентификаторов и названий категорий можно в файле /usr/share/isp-go/config/catgroups.json.
Пример:
[common]
redis-ip = 127.0.0.1
redis-port = 6379
filter-default = 3
filter-default = 4
user-filter-default = 3
user-filter-default = 5

Применение настроек

После изменения конфигурационного файла на работающем сервере необходимо перезапустить службы, входящие в состав ISP Go:
service isp-go-dnsproxy restart
service isp-go-blockpage restart
service isp-go-api restart

Настройка nginx

Роль nginx в решении для провайдеров состоит в следующем:
  • отделение запросов к API от запросов к странице блокировки
  • проксирование этих запросов на соответствующие веб-приложения
  • ограничение доступа к API
Для корректного разделения запросов необходимо прописать доменное имя, используемое для управления фильтрацией через API, в директиву server_name в файле /etc/nginx/sites-available/isp-go-api, вместо значения «api.ispgo», которое там прописано по умолчанию. Все остальные запросы пойдут на виртуальный хост, настроенный в файле /etc/nginx/sites-available/isp-go-blocked, за счет наличия там модификатора default_server в директиве listen. Допускается создавать другие виртуальные хосты, со следующими оговорками:
  • в каждом виртуальном хосте должно быть прописано имя сервера с помощью директивы server_name;
  • не допускается использование модификатора default_server;
  • не рекомендуется использование протокола https – в этом случае, вместо сброса соединения, у пользователей, обращающихся к запрещенным сайтам по https, будет появляться предупреждение о невалидном сертификате, и неизбежно возникнут (необоснованные) обвинения от пользователей в перехвате защищенного траффика.
Для корректного проксирования необходимо, чтобы адреса и порты, упоминаемые в директиве proxy_pass в файлах /etc/nginx/sites-available/isp-go-api и /etc/nginx/sites-available/isp-go-blocked, соответствовали адресам и портам, которые прослушиваются соответствующими веб-приложениями. По умолчанию это так. См. ключи listen в секциях [blockpage] и [api] в файле /etc/isp-go/config.ini.
Доступ к API ограничивается с помощью директив allow и deny. Директивы обрабатываются по очереди сверху вниз до первого соответствия. Конфигурация по умолчанию разрешает доступ только с адреса 127.0.0.1. Следует разрешить доступ с сервера, на котором установлена биллинговая система. Ни в коем случае нельзя разрешать доступ к API с недоверенных (в том числе пользовательских) систем, т.к. при наличии доступа к API злоумышленник может изменять любые настройки фильтрации у любых пользователей.
Для применения настроек надо заставить nginx перечитать конфигурационные файлы:
service nginx reload
Более подробную информацию о настройке nginx можно найти на странице проекта:
http://nginx.org/ru/docs/

Настройка автоматического обновления базы доменов

В ходе первичной установки пакета в каталог /var/lib/isp-go/filter/ копируется демонстрационная версия базы доменов. Для полноценного использования ISP Go необходимо заменить ее на настоящую и настроить автообновление.

Обновление базы доменов осуществляется по cron'у с использованием rsync. Для авторизации доступа к серверу skydns.ru используется ssh-ключ. Чтобы автообновление заработало, необходимо:

1. Сгенерировать ssh-ключ, который будет использоваться для скачивания обновлений базы доменов:
mkdir skydns-key
cd skydns-key
ssh-keygen -t rsa -N "" -f id_rsa
В результате получатся файлы id_rsa (закрытый ключ, который надо держать в строгом секрете и не терять) и id_rsa.pub (открытый ключ).

3. Выслать получившийся файл id_rsa.pub по электронной почте. id_rsa высылать нам не надо!!!

4. Дождаться, пока будет произведена авторизация SSH-ключа на сервере SkyDNS.

5. Скопировать файлы id_rsa и id_rsa.pub в каталог, где их ищет скрипт обновления:
mkdir -p -m 0755 /var/lib/isp-go/.ssh
cd skydns-key
cp id_rsa id_rsa.pub /var/lib/isp-go/.ssh/
chown -R isp-go:isp-go /var/lib/isp-go/.ssh
6. Подождать 1 час. Убедиться, что в каталоге /var/lib/isp-go/filter обновились файлы host2cat.dat и host2cat-fast.dat. Обновить dat-файлы можно также вручную, для этого достаточно выполнить команды:
su isp-go -c 'rsync -rtv --progress skydns-isp@skydns.ru:host2cat.dat ~/filter/'
su isp-go -c 'rsync -rtv --progress skydns-isp@skydns.ru:host2cat-fast.dat ~/filter/'

Настройка страницы блокировки

По умолчанию ISP Go поставляется с минимальным, строгим и аскетичным оформлением страницы блокировки. Чтобы изменить это оформление, надо отредактировать HTML-шаблоны, которые находятся в /usr/share/isp-go/templates/. Где base.html – основной файл шаблона, а остальные от него наследуются. Синтаксис шаблонов описан в руководстве по языку Go: https://golang.org/pkg/text/template/ , https://golang.org/pkg/html/template/ . Доступны следующие переменные:
  • Domain: домен, упомянутый в заголовке Host: запроса, т.е. тот, к коророму обратился браузер.
  • Cats: массив с именами категорий, из-за которых сайт заблокирован. Переменная доступна только в шаблоне blocked_by_category.html.
В случае необходимости вставки картинок, они должны быть выложены на отдельный виртуальный хост, и в теге <img> должен указываться их полный URL, включая имя этого картиночного хоста.

Изменения вступают в силу после перезапуска isp-go-blockpage (service isp-go-blockpage restart)

Особенности прослушивания на конкретных IP-адресах

Если кеширующий DNS-сервер находится на другой машине, то допускается указывать в ключе listen секции [proxy] IP-адрес 0.0.0.0. В этом случае, isp-go-dnsproxy будет принимать запросы на всех сетевых интерфейсах, в том числе на еще не существовавших в момент его запуска. Такой подход не работает, если кеширующий DNS-сервер установлен локально (и прослушивает адрес 127.0.0.1). В этом случае следует указывать конкретный IP-адрес одного из сетевых интерфейсов.
Могут также существовать соображения, заставляющие поместить конкретный IP-адрес в директиву listen в настройках nginx.
В случае, если в одной из этих директив listen прописан конкретный IP-адрес, ничто в системе не гарантирует, что сетевой интерфейс с этим адресом будет существовать в момент запуска демонов ISP Go или nginx. Он может появиться на несколько миллисекунд позже. Поэтому запуск этих демонов будет, если не принять дополнительных мер, происходить ненадежно. «Политика партии» freedesktop.org утверждает, что прописывать зависимость от «полностью настроенной сети» архитектурно неправильно, и что вместо этого следует делать так, чтобы сетевые приложения корректно запускались, даже если IP-адрес, на котором им предстоит слушать, еще не существует в системе.
Для того, чтобы разрешить всем сетевым приложениям слушать на еще не существующих адресах, достаточно выполнить следующие команды:
echo "net.ipv4.ip_nonlocal_bind = 1" > /etc/sysctl.d/99-nonlocal-bind.conf
sysctl -p /etc/sysctl.d/99-nonlocal-bind.conf
К сожалению, эта настройка является общесистемной, и может сломать другие программные продукты.

Примеры запросов к API

После первоначальной установки необходимо написать скрипт, который будет изменять настройки пользователей. Настройки меняются при помощи HTTP-запросов к ISP Go API. В примерах ниже для генерации запросов используется curl из командной строки. Программистам на PHP может оказаться полезным официальное руководство от соответствующего PHP-расширения: http://ru2.php.net/manual/ru/ref.curl.php

aep – это user_id пользователя назначаемый провайдером.

Пример обращения к API из скриптов шелла с консоли
# Установка и удаление IP пользователя
curl -X PUT -d '["192.168.5.1"]' http://api.isp.ru/user/aep/ip/
curl http://api.isp.ru/user/aep/ip/
curl -X DELETE http://api.isp.ru/user/aep/ip/
curl http://api.isp.ru/user/aep/ip/
curl -X PUT -d '["192.168.5.1"]' http://api.isp.ru/user/aep/ip/

# Список категорий в json.
curl http://api.isp.ru/categories/
curl http://api.isp.ru/categorygroups/

# Глобальный белый список
# Замена всего списка
curl -X PUT -d '["gazeta.ru", "lenta.ru"]' http://api.isp.ru/whitelist/
curl http://api.isp.ru/whitelist/
# Добавление и удаление по одной записи
curl -X POST -d '["gazeta.ru"]' http://api.isp.ru/whitelist/
curl -X DELETE http://api.isp.ru/whitelist/lenta.ru
curl http://api.isp.ru/whitelist/
# Глобальный черный список работает аналогично
curl http://api.isp.ru/blacklist/

# Настройка фильтра:
# Полная замена списка заблокированных категорий:
curl -X PUT -d '[3, 4, 5, 11]' http://api.isp.ru/user/aep/filter/
# Добавление и удаление по одной категории:
curl -X POST -d '[6]' http://api.isp.ru/user/aep/filter/
curl -X DELETE http://api.isp.ru/user/aep/filter/5
curl http://api.isp.ru/user/aep/filter/

# Пользовательские черно-белые списки:
# Полная замена:
curl -X PUT -d '["black.ru", "orange.ru", "red.ru", "blue.ru"]' http://api.isp.ru/user/aep/blacklist/
# Добавление и удаление по одному домену:
curl -X POST -d '["antigreen.ru"]' http://api.isp.ru/user/aep/blacklist/
curl -X DELETE http://api.isp.ru/user/aep/blacklist/orange.ru
curl http://api.isp.ru/user/aep/blacklist/
# Белый список работает аналогично
curl http://api.isp.ru/user/aep/whitelist/

Для работы пользователя в режиме "запрещено все, кроме того, что явно занесено в белый список", надо занести корневой домен в черный список:
curl -X POST -d '["-"]' http://api.isp.ru/user/aep/blacklist/
Т.к. веб-сервер Apache обрезает точку на конце в запросах вида "http://domain-name.com/.", то запрос вида
curl -X DELETE http://api.isp.ru/user/aep/blacklist/.
очистил бы черный список пользователя. Поэтому для обозначения корневого домена вместо точки используйте "-", т.е.
curl -X POST -d '["-"]' http://api.isp.ru/user/aep/blacklist/
curl -X DELETE http://api.isp.ru/user/aep/blacklist/-

ВНИМАНИЕ. Существует неудаляемый и нередактируемый белый список с наивысшим приоритетом, не доступный ни через один интерфейс администрирования, в который входят адреса skydns.ru, сайты обновления антивирусов, сайты обновления Windows и т.п.

Пример скрипта на php для обращения к API
<?php
// Файл примеров требует установленного расширения PHP curl
// Адрес сервера API
$server = 'http://api.isp.ru';

function api_request($url, $method = 'GET', $data = null) {
                $ch = curl_init($url);
                curl_setopt ($ch, CURLOPT_HEADER, 0);
                curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
                curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method);
                if (!is_null($data)) curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
                $out = curl_exec($ch);
               
                $return_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
               
                switch ($return_code) {
                               case 200:
                                               if (strlen($out)) return json_decode($out);
                                               else return "OK\r\n";
                                               break;
                               case 400:
                                               throw new Exception('Bad request');
                                               break;
                               default:
                                               throw new Exception('Error');
                }
}

/*
Запись о пользователе создается автоматически при попытке
попытке записи какой-либо информации о нем
*/

// Добавляет пользователю c идентификатором aep ip-адрес 192.168.5.1
print api_request($server."/user/aep/ip/", 'POST', '["192.168.5.1"]');

// Заменяет список ip-адресов пользователя aep на 192.168.5.1, 192.168.5.2
print api_request($server."/user/aep/ip/", 'PUT', '["192.168.5.1", "192.168.5.2"]');

// Удаляет ip-адресов 192.168.5.1 из списка адресов пользователя aep
print api_request($server."/user/aep/ip/192.168.5.1", 'DELETE');

// Возвращает список ip-адресов пользователя aep
$result = api_request($server."/user/aep/ip/", 'GET');
var_dump($result);

// Удаляет весь список ip-адресов пользователя aep
print api_request($server."/user/aep/ip/", 'DELETE');
?>

Резервное копирование и восстановление

Настройте периодическое создание резервных копий каталогов:
/etc/isp-go
/var/lib/isp-go/.ssh
и базы данных Redis (название файла и путь до него находится в параметрах dbfilename, dir в файле /etc/redis/redis.conf).

Для восстановления:
  1. Выполните установку ISP Go. В процессе установки в качестве IP, с которых разрешен доступ к API, в файле /etc/nginx/sites-available/isp-go-api укажите 127.0.0.1. До завершения восстановления не выполняйте запросы через API.
  2. Восстановите базу данных Redis.
  3. Восстановите файлы из резервной копии в каталог /var/lib/isp-go/.ssh.
  4. Восстановите файлы из резервной копии в каталог /etc/isp-go.
  5. Перезапустите isp-go-dnsproxy, isp-go-api и isp-go-blockpage.


Дублирующий сервер ISP Go

Выполните установку второго (подчиненного) сервера SkyDNS ISP Go аналогично установке первого (главного) сервера. При этом isp-go-api должен быть запущен только на главном сервере и все запросы должны идти к нему. Чтобы запретить запуск isp-go-api на подчиненном сервере и проксирование запросов на него, выполните команды:
service isp-go-api stop
update-rc.d  isp-go-api disable
rm -f /etc/nginx/sites-enabled/isp-go-api
service nginx restart
Настройте репликацию между серверами Redis. Для этого нужно разрешить главному серверу слушать на сетевых адресах, отличных от 127.0.0.1, при помощи настройки параметра bind в /etc/redis/redis.conf. Этот параметр надо выставить в 0.0.0.0
bind 0.0.0.0
или, если на то есть особые причины, в IP-адрес или адреса сервера.
bind 127.0.0.1 192.168.5.100 10.0.0.100
Для применения настроек необходимо перезапустить Redis:
service redis-server restart
Внимание: порт tcp/6379, на котором слушает Redis, необходимо закрыть средствами iptables, оставив только доступ с loopback-интерфейса (это нужно для isp-go-dnsproxy и isp-go-blockpage) и с подчиненного сервера. Атакующий, имея доступ к redis-серверу по tcp, смог бы изменить любую настройку любого пользователя, или, что еще хуже, заставить Redis занять всю доступную память.

Рассмотрим пример, когда главный сервер имеет IP-адрес 192.168.5.100, а подчиненный - 192.168.5.200. В этом случае безопасность на главном сервере обеспечивается таким правилом iptables:
iptables -A INPUT ! -s 192.168.5.200 -p tcp --dport 6379 ! -i lo -j DROP
Для сохранения этого правила, чтобы оно восстановилось после перезагрузки, следует выполнить команду:
service netfilter-persistent save
В настройках Redis на подчиненном сервере в файле /etc/redis/redis.conf в конце указать:
slaveof <masterip> <masterport>
и перезапустить Redis:
service redis-server restart

Миграция с прошлых версий

Для миграции с прошлых версий существуют две утилиты: isp-go-dumpdb, isp-go-loaddb.
Первая создает дамп базы пользователей через API, а вторая загружает этот дамп.
Пример запуска:
isp-go-dumpdb -file=./dump.json -server=oldapi.myserver.com
isp-go-loaddb -file=./dump.json -server=newapi.myserver.com

где file – это путь до файла, в который будет записан дамп базы, а server – это имя хоста, на котором расположено API

Установка модуля интеграции с LANBilling

Для того чтобы произвести интеграцию платформы контент-фильтрации ISP Go с личным кабинетом пользователя и биллингом необходимо установить модуль интеграции с LANBilling.

Модуль интеграции позволяет создать новую услугу «Родительский контроль» для абонентов и дает возможность абонентам самостоятельно управлять настройками контент-фильтрации в рамках услуги «Родительский контроль» (блокировка категорий, черный и белый список доступа, включение работы только по белому списку).

  • В каталоге услуг LANBilling создайте услугу «Родительский контроль».
  • Добавьте услугу к тарифу. Задайте "Идентификатор внешней услуги" - skydns (используется в скриптах).
  • Установите галочку "Разрешить пользователю управлять этой услугой".
  • Внешний метод при включении: cmd:/usr/local/billing/scripts/skydns_service:on.
  • Внешний метод при отключении: cmd:/usr/local/billing/scripts/skydns_service:off.
  • На сервере с LANBilling cкопируйте файлы skydns_service, skydns_arcd, skydns_ucd, handler в /usr/local/billing/scripts и установите бит исполнения на них.

В конфигурационные файлы агентов LANBilling пропишите скрипты,которые будут выполняться при соответсвующих событиях:

  • в /etc/billing.conf.LBarcd пропишите script_start=/usr/local/billing/scripts/skydns_arcd
  • в /etc/billing.conf.LBucd пропишите script_on=/usr/local/billing/scripts/skydns_ucd
  • в /etc/billing.conf пропишите handler=/usr/local/billing/scripts/handler
  • в конфигурационгом файле LANBilling (/etc/billing.conf.LBucd) должна присутствовать строка server = login:pass@ip:port,
    это реквизиты доступа к Lanbilling SOAP API, которые используют скрипты.
  • Отредактируйте файлы skydns_service, skydns_arcd, skydns_ucd. Пропишите адрес основного сервера ISP Go API. На резервный сервер настройки переносятся с помощью репликации Redis.

Выполните команды:

service LBarcd.init restart
service LBucd.init restart
service LBcore.init stop && service LBcore.init start

Наложите патч для соотвествующей версии на личный кабинет клиента LANBilling

patch -Np1 

В личном кабинете пользователя, для подключения услуги "Родительский контроль", абоненту необходимо перейти в раздел "Домашний интернет" - "Дополнительные услуги", выбрать учетную запись (Рис. 1), в таблице "Не подключенные услуги", в соответствующей строке, нажать кнопку "Подключить" (Рис. 2) и подтвердить подключение услуги, нажав кнопку "Подтвердить" (Рис. 3).

lanbilling

Рисунок 1

lanbilling

Рисунок 2

lanbilling

Рисунок 3

В результате, услуга "Родительский контроль" будет добавлена в список подключенных дополнительных услуг на тарифе "Домашний интернет" (Рис. 4).

lanbilling

Рисунок 4

Для управления услугой "Родительский контроль", формирования списка категорий, "белого" и "черного" списков сайтов следует перейти в раздел "Родительский контроль", выбрав соответствующий пункт меню личного кабинета пользователя (Рис.5).

lanbilling

Рисунок 5


Покупка/Дополнительная информация/Поддержка

Приобрести сервер контент-фильтрации и родительского контроля, а также получить дополнительную информацию по работе с продуктом можно, обратившись к нам:

web: http://www.skydns.ru

тел.: 8800 333 33 72 (бесплатно по РФ)

тел: +7 (343) 237-24-30 (для звонков из других стран)

mail: info@skydns.ru


О компании.

СкайДНС - ведущий российский разработчик систем контент-фильтрации и безопасного поиска. Услугами компании пользуются десятки тысяч домашних пользователей, организаций, школ и сотни провайдеров в РФ, Украине, Казахстане и других странах. В частности, на базе системы SkyDNS обеспечивается защита учащихся в школах и библиотек практически во всех регионах России от сайтов не соответствующих возрасту детей и вредоносных сайтов.