Rkn

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

Возможности

  • Получение реестра запрещенных сайтов по расписанию (cron)
  • Формирование списков блокировки по типам ( ip, domain, domain-mask, url )
  • Блокировка в «реальном времени»
  • Оповещение, при неудачной выгрузке
  • Предупреждение о необходимости обновления сертификата с ЭП
  • «Гибкая» работа с реестром(возможность определять политики блокировки доступа)

Настройка

$conf{RKN_OSSL_BIN} Полный путь к исполняемому файлу openssl
Пример : $conf{RKN_OSSL_BIN} ='/usr/local/bin/openssl';
$conf{RKN_DNS_TPL} Шаблон для формирования файла с блокировками типа «domain»
Пример для unbound: $conf{RKN_DNS_TPL} = 'local-data: «%NAME A 10.0.0.7»';
$conf{RKN_DNS_ADD_CMD} Шаблон команды для блокировки типа «domain»
Пример для unbound: $conf{RKN_DNS_ADD_CMD} = '/usr/local/sbin/unbound-control -s 10.0.0.4 local_data %NAME A 10.0.0.7';
$conf{RKN_DNS_DEL_CMD} Шаблон команды для разблокировки типа «domain»
Пример для unbound: $conf{RKN_DNS_DEL_CMD} = '/usr/local/sbin/unbound-control -s 10.0.0.4 local_data_remove %NAME';
$conf{RKN_FW_ADD_CMD} Шаблон команды для блокировки типа «ip»
Пример для ipfw: $conf{RKN_FW_ADD_CMD} = '/sbin/ipfw table 13 add %IP';
$conf{RKN_FW_DEL_CMD} Шаблон команды для разблокировки типа «ip»
Пример для ipfw: $conf{RKN_FW_DEL_CMD} = '/sbin/ipfw table 13 delete %IP';
$conf{RKN_SKIP_NAME} Список доменов, которым при обработке реестра будет автоматически присваиваться параметр SKIP
Пример $conf{RKN_SKIP_NAME} = 'www.youtube.com,youtube.com,ru.wikipedia.org';
$conf{RKN_SKIP_IP} Список IP адресов, которым при обработке реестра будет автоматически присваиваться параметр SKIP
Пример $conf{RKN_SKIP_IP} = '64.233.161.198,64.233.162.198,64.233.163.198,64.233.164.198'
$conf{RKN_FW_SKIP_CMD} Шаблон команды для SKIP блокировки
Пример $conf{RKN_FW_SKIP_CMD} = '/sbin/ipfw table 14 add %IP';

Начало работы

Предполагается, что у Вас уже имеется выгруженный сертификат в формате PCKS#12.
Сертификат (как правило файл p12.pfx) копируем на сервер, где вы планируете осуществлять выгрузку, в свою домашнюю папку.
Проверяем установленный в системе OpenSSL на наличие поддержки GOST и сам сертификат:

# cd ~ 
# /usr/local/bin/openssl ciphers | tr ":" "\n" | grep GOST
GOST2001-GOST89-GOST89
GOST94-GOST89-GOST89
# /usr/local/bin/openssl pkcs12 -in p12.pfx -nodes
Enter Import Password:

Если все в порядке, конвертируем pkcs#12 в PEM формат:

# /usr/local/bin/openssl pkcs12 -in p12.pfx -out certificate.pem -nodes -clcerts
Enter Import Password:

Полученный в результате файл certificate.pem помещаем в папку /usr/abills/var/db/rkn/cfg

Рекомендуется первый запуск системы произвести вручную, так как список очень большой и наполнении его «вживую» займёт очень много времени. Для этого нужно запустить скрипт в режиме отладки:

/usr/abills/libexec/billd rkn DEBUG=4

При этом будут сформированы списки для блокировки, а команды выполнятся не будут. После этого перезапускаем используемые службы и переходим в автоматический режим., добавляем задание в cron:
/etc/crontab

* 1,9,17 * * * root /usr/abills/libexec/billd rkn

Если что-то пошло некорректно, можно произвести переинициализацию системы, выполнив последовательно 2 команды:

/usr/abills/libexec/billd rkn INIT=1
/usr/abills/libexec/billd rkn DEBUG=4

Примеры использования

Блокировка по имени домена с использованием unbound

В связке с DNS резолвером unbound возможна как статичное, так и динамическое обновление записей в кеше DNS сервера. После установки и настройки остается только добавить в файл unbound.conf в секции server: следующую строку:

include: "/usr/abills/var/db/rkn/domain_list"

Блокировки начнут работать после перезапуска сервера. Шаблон для формирования файла domain_list приведен в примерах настройки. Для того чтобы в дальнейшем не перезагружать сервер, а только вносить изменения в его кеш, нужно в config.pl указать команды для блокировки и разблокировки в параметрах $conf{RKN_DNS_ADD_CMD} и $conf{RKN_DNS_ADD_CMD}.

Блокировка по IP с использованием ipfw

Для блокировки по IP адресу удобно использовать таблицы в ipfw, например так:

fwcmd="/sbin/ipfw"
nat_interface="igb0"
...
...
${fwcmd} add deny all from any to "table(13)" via ${nat_interface}
cat /usr/abills/var/db/rkn/ip_list |
{
while read ip
do
${fwcmd} table 13 add $ip
done
}
...
...

В дальнейшем записи в таблицу будут добавляться и удаляться автоматически, без перечитывания правил.

"Мягкая" блокировка

Данный модуль может быть использован, как для формирования списков для аппаратных решений (DPI), так и для «софтовой» блокировки. Естественно, что владельцы аппаратных решений получают конкурентное преимущество, так как имеют возможность блокировать ресурсы на более высоком уровне(url), а не весь ресурс или IP адрес, на котором может находится кроме заблокированного ещё куча сайтов. Как же быть тем, для кого бюджет установки DPI неоправданно высок.
Попытаемся исправить ситуацию. Итак, что мы имеем в записи реестра:

  • Тип блокировки(ip,domain etc)
  • IP адрес
  • URL

Теперь смотрим, по какому алгоритму нас будут проверять:

Тип информации, занесенной в реестр ЕАИС Действия АС «Ревизор»
Запись содержит только IP-адрес Проверяется доступность сайта по IP-адресу. При отсутствии доступа по протоколу HTTP происходит запись информации в аварийный журнал о запрете доступа по протоколу http.
Запись содержит только URL ресурса Происходит резолвинг (resolve) IP-адреса с помощью DNS серверов. Далее происходит отправка HTTP GET запроса на полученные IP-адреса.
Запись содержит Домен, IP-адрес, URL Происходит резолвинг (resolve) IP-адреса с помощью DNS серверов. Далее происходит отправка HTTP GET запроса на полученные и внесенные в реестр ЕАИС IP-адреса.