Это старая версия документа.


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} Пример $conf{RKN_SKIP_NAME} = 'www.youtube.com,youtube.com,ru.wikipedia.org';
$conf{RKN_SKIP_IP} Пример $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} Пример $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

При этом будут сформированы списки для блокировки, а команды выполнятся не будут. После этого перезапускаем используемые службы и в переходим в автоматический режим.
Если что-то пошло некорректно, можно произвести реинициализацию системы, выполнив последовательно 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
}
...
...

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