Это старая версия документа.
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 неоправданно высок.
Попытаемся исправить ситуацию. Итак, что мы имеем в записи реестра:
* Тип блокировки