Rkn

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

Возможности

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

Настройка

$conf{NETBLOCK_OSSL_BIN} Полный путь к исполняемому файлу openssl
Пример : $conf{NETBLOCK_OSSL_BIN} ='/usr/local/bin/openssl';
$conf{NETBLOCK_DNS_TPL} Шаблон для формирования файла с блокировками типа «domain»
Пример для unbound: $conf{NETBLOCK_DNS_TPL} = 'local-data: «%NAME A 10.0.0.7»';
$conf{NETBLOCK_DNS_ADD_CMD} Шаблон команды для блокировки типа «domain»
Пример для unbound: $conf{NETBLOCK_DNS_ADD_CMD} = '/usr/local/sbin/unbound-control -s 10.0.0.4 local_data %NAME A 10.0.0.7';
$conf{NETBLOCK_DNS_DEL_CMD} Шаблон команды для разблокировки типа «domain»
Пример для unbound: $conf{NETBLOCK_DNS_DEL_CMD} = '/usr/local/sbin/unbound-control -s 10.0.0.4 local_data_remove %NAME';
$conf{NETBLOCK_SKIP_NAME} Список доменов, которым при обработке реестра будет автоматически присваиваться параметр SKIP
Пример $conf{NETBLOCK_SKIP_NAME} = 'www.youtube.com,youtube.com,ru.wikipedia.org';
$conf{NETBLOCK_SKIP_IP} Список IP адресов, которым при обработке реестра будет автоматически присваиваться параметр SKIP
Пример $conf{NETBLOCK_SKIP_IP} = '64.233.161.198,64.233.162.198,64.233.163.198,64.233.164.198'
$conf{NETBLOCK_FW_SKIP_CMD} Шаблон команды для SKIP блокировки
Пример $conf{NETBLOCK_FW_SKIP_CMD} = '/sbin/ipfw table 14 add %IP';
$conf{NETBLOCK_TZ} Значение смещения для Вашего часового пояса
Пример $conf{NETBLOCK_TZ} = '+05:00'; Если параметр не задан, используется системное значение
$conf{NETBLOCK_CRT_ALERT} Количество дней до окончания действия сертификата, при котором начинают отправляться оповещения(на данный момент только через модуль Events, в дальнейшем через Sender
Параметр был добавлен «чисто для себя», так как один раз проеб пропустил время обновления сертификата. Если не задать переменную, оповещения не будет

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

Формирование подписанного сертификатом файла-запроса

Установка OpenSSL

wget https://www.openssl.org/source/openssl-1.0.1u.tar.gz
tar zxvf openssl-1.0.1u.tar.gz
cd openssl-1.0.1u
./config shared zlib enable-rfc3779 --prefix=/usr/local
make depend
make
make install

Далее, после установки редактируем файл /usr/local/ssl/openssl.cnf

К названию первой секции (первая строка [в квадратных скобках]) добавляем:

  openssl_conf = openssl_def

Далее в конец файла вносим:

[openssl_def]
engines = engine_section

[engine_section]
gost = gost_section

[gost_section]
engine_id = gost
default_algorithms = ALL
#dynamic_path = /usr/local/lib64/engines/libgost.so
#CRYPT_PARAMS = id-Gost28147-89-CryptoPro-A-ParamSet

тестируем:

# /usr/local/bin/openssl ciphers | tr ":" "\n" | grep GOST

Вывод:

GOST2001-GOST89-GOST89
GOST94-GOST89-GOST89

Предполагается, что у Вас уже имеется выгруженный сертификат в формате 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/netblock/cfg
Заполняем реквизиты необходимые для формирования файла-запроса(Настройка>Другое>Параметры организации):

  • ORGANIZATION_NAME
  • ORGANIZATION_INN
  • ORGANIZATION_OGRN
  • ORGANIZATION_MAIL

Если какой-либо из этих реквизитов отсутствует, необходимо добавить его самостоятельно.
И наконец подписываем файл-запрос, выполнив в консоли команду:

/usr/abills/libexec/billd netblock CONF=1

Выгрузка реестра

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

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

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

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

Если Вы хотите, чтобы файл запроса каждый раз подписывался заново, добавьте аргумент CONF=2
Если что-то пошло некорректно, можно произвести переинициализацию системы, выполнив последовательно 2 команды:

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

Логирование

Система логирует дествия по получению данных РКНЗ и обновлению листов доступу (access-list)

Отчёт>Cписок логов

netblock.log

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

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

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

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

Блокировки начнут работать после перезапуска сервера. Шаблон для формирования файла domain_list приведен в примерах настройки. Для того чтобы в дальнейшем не перезагружать сервер, а только вносить изменения в его кеш, нужно в config.pl указать команды для блокировки и разблокировки в параметрах $conf{NETBLOCK_DNS_ADD_CMD} и $conf{NETBLOCK_DNS_DEL_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/netblock/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-адреса.

раздел в разработке …