Это старая версия документа.
Rkn
Данный модуль предназначен для настройки блокировок реестра запрещенных сайтов.
Возможности
- Получение реестра запрещенных сайтов по расписанию (cron)
- Формирование списков блокировки по типам ( ip, domain, domain-mask, url )
- Блокировка в «реальном времени»
Как работает
Работа с реестром возможна, как в полностью автоматическом, так и в ручном режиме. Для получения выгрузки в автоматическом режиме нужно включить запуск в кроне:
/etc/crontab
* 1,9,17 * * * root /usr/abills/libexec/billd rkn
Настройка
$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 } ... ...
В дальнейшем записи в таблицу можно добавлять и удалять автоматически, без перечитывания правил.