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-адреса. |
раздел в разработке …