Автоматизация выгрузки реестра запрещённых сайтов и настройка mikrotik

Стоит задача по выгрузки реестра запрещенных сайтов и блокирование доступа к ним пользователей. Реестр запрещенных сайтов можно получить на сайте роскомнадзора по ссылке http://vigruzki.rkn.gov.ru/tooperators_form/, выгрузка должна производится не реже 2-х раз в сутки. Делать это вручную не совсем хочется, поэтому я решил этот процесс автоматизировать. В интернете много статей по автоматизации выгрузки, но вот как полностью автоматизировать процесс от выгрузки и до настройки оборудования мне не попадалось.

Cистема по получению реестра и настройки маршрутизаторов будет находится на сервере с установленной системой Centos 6.4

Весь процесс разбит на несколько этапов

Создание файл запрос и подпись файла запроса с помощью открепленной электронной подписи

1. Для начала вам нужна квалифицированная электронная подпись. Получить эту подпись можно в любом аккредитованном удостоверяющем центре, список можно скачать по ссылке http://minsvyaz.ru/common/upload/Perechen_akkreditovannih_UZ.xls. Выбираем ближайший, звоните туда, объясняете что вам нужна электронная подпись для zapret-info.gov.ru, и вам объясняют дальнейшие шаги. Собираете кучу бумаг, заполняете анкеты, оплачиваете, после чего получаете сертификат, при необходимости еще и покупаете e-Token.

2.Когда  e-Token с сертификатом у вас уже на руках. вам нужен будет компьютер с установленным Windows и программой КриптоПро. Необходимо средствами КриптоПро скопировать ключевой контейнер в реестр с возможность экспорта. Затем с помощью утилиты P12FromGostCSP.zip  выгружаем сертификат в формате PCKS#12

3.Подключаемся к нашему серверу с CentOS, и создаем в корне каталог  gost-ssl.

Устанавливаем openssl:

wget http://zhutov.ru/static/files/mikrotik/openssl-1.0.1c.tar.gz

tar xzf openssl-1.0.1с.tar.gz

cd openssl-1.0.1с

./config shared zlib enable-rfc3779 --prefix=/gost-ssl

make depend

make

make test

make install


Если в процессе установки появится ошибка:

gcc: команда не найдена или  zlib.h: Нет такого файла или каталога

То устанавливаем пакеты gcc и zlib-devel :

yum install gcc zlib-devel -y

Правим конфиг /gost-ssl/ssl/openssl.cnf

В самом верху, первой строкой пишем:

openssl_conf = openssl_def

Далее добавляем в конец:

[openssl_def]

engines = engine_section

[engine_section]

gost = gost_section

[gost_section]

default_algorithms = ALL

engine_id = gost

dynamic_path = /gost-ssl/lib/engines/libgost.so

CRYPT_PARAMS = id-Gost28147-89-CryptoPro-A-ParamSet


Далее проверяем работоспособность и наличие GOST (полный путь до openssl обязателен)

/gost-ssl/bin/openssl ciphers | tr ":" "n" | grep GOST

Если вывод пуст, значит что то не так. Должны появится строчки типа:

GOST2001-GOST89-GOST89

GOST94-GOST89-GOST89

Создаем каталог:

mkdir /gost-ssl/ssl/rzs

И кидаем туда файл p12.pfx полученный в пункте 2.

Проверяем, что у нас нормальный (содержит сертификат и закрытый ключ) PKCS#12 командой:

/gost-ssl/bin/openssl pkcs12 -in p12.pfx -nodes

конвертируем полученный на Windows PKCS#12 в PEM:

/gost-ssl/bin/openssl pkcs12 -in p12.pfx -out provider.pem -nodes -clcerts

создаем XML файл запроса, согласно памятке оператора http://zapret-info.gov.ru/docs/description_for_operators_2012-11-09v1.4.pdf  и конфертируем его при помощи icov в СP1251:

/usr/bin/iconv -f UTF8 -t WINDOWS-1251 request.xml -o request.xml

подписываем xml файл нашим сертификатом:

/gost-ssl/bin/openssl smime -sign -in request.xml -out request.bin -signer provider.pem -outform DER

скидываем в Windows и проверяем валидность на http://www.gosuslugi.ru/pgu/eds/ если все впоряде, то идем дальше.

Для автоматизации получения файла запроса, создаем скрипт на python под названием request.py

Со следующим кодом:

# -*- coding: windows-1251 -*-

from datetime import datetime

from dateutil.tz import tzlocal

from lxml import etree

from lxml.builder import E



f=open('/gost-ssl/ssl/rzs/req.xml', 'w')

request_xml = E.request(

    E.requestTime(datetime.now(tzlocal()).isoformat()),

    E.operatorName(u'ООО Рога и копыта'),

    E.inn('1234567890'),

    E.ogrn('1234567890'),

    E.email('123"123.ru'),

)

request_str = etree.tostring(request_xml, xml_declaration=True, encoding='windows-1251').replace("'", '"')

print request_str

f.write(request_str)


Естественно Название компании, ИНН, ОГРН и e-mail указываем свои.

Отправка подписанного файла на сайт http://vigruzki.rkn.gov.ru  и получение реестра запрещенных сайтов

В интернете были найдены два скрипта на pyton для автоматической выгрузки реестра, скачиваете их и кладете в тот же каталог /gost-ssl/ssl/rzs/

cd /gost-ssl/ssl/rzs/

wget http://zhutov.ru/static/files/mikrotik/zapret_checker.py http://zhutov.ru/static/files/mikrotik/zapretinfo.py


Устанавливаем suds

 yum install python-suds -y

Проверяем работу выгрузки:

/gost-ssl/bin/openssl smime -sign -in req.xml -out req.xml.sign -binary -signer provider.pem -outform PEM

python request.py

python zapretinfo.py


Через 1-3 минуты каталоге /gost-ssl/ssl/rzs/ должен появится файл реестра запрещенных имен dump.xml

Извлечение доменных имен из реестра

Для извлечения из реестра доменные имена, создаем в каталоге /gost-ssl/ssl/rzs/  скрипт extract.py

from xml.dom.minidom import *

import os

os.remove('domains.txt')

f=open('domains.txt', 'a')

xml = parse('dump.xml')

domains = xml.getElementsByTagName('domain')



for domain in domains:

    f.write('%sn' % domain.childNodes[0].nodeValue)


ВНИМАНИЕ!!! перед первым запуском скрипта extract.py создайте пустой файл domains.txt

touch domains.txt

Настройка маршрутизаторов

При попытке получить доступ к запрещенному сайту, пользователь должен будет попасть на страницу с сообщением о запрещенном ресурсе, например как тут . Для этого в сети должен быть настроен http сервер, с html страницей на которой сообщается о запрещенном ресурсе.

На маршрутизаторах должно быть включен перехват dns запросов  «Allow Remote Requests»

ip dns edit allow-remote-requests

Исправляем на yes и сохраняем. Так же в качестве ДНС сервера у пользователей должен быть прописан ip адрес микротика.

Для автоматической настройки маршрутизаторов используется скрипт mikrotik_configure.py

# -*- coding: utf-8 -*-

import paramiko

from datetime import datetime

import time

#Логин и пароль для доступа на маршрутизаторы

user='admin'

secret='password'

port='22'

#Список ip адресов маршрутизаторов

ip_list=['1.1.1.1', '2.2.2.2', '3.3.3.3']

f=open('domains.txt')

string=f.readlines()

def m_add_host(host,user,secret,port,string):

    client = paramiko.SSHClient()

    client.set_missing_host_key_policy(paramiko.AutoAddPolicy())

    try:

        #Подключаемся к маршрутизатору

        client.connect(hostname=host, username=user, password=secret, port=port)

        time.sleep(3)

        #Очищаем старую dns таблицу

        stdin, stdout, stderr = client.exec_command('ip dns static remove [find address=10.10.10.10]')

        time.sleep(5)

        for name in string:

            stdin, stdout, stderr = client.exec_command('ip dns static add name=%s address=10.10.10.10' % name.replace('n',''))

        client.close()

    except:

        print 'Error'

for ip in ip_list:

    m_add_host(ip,user,secret,port,string)


10.10.10.10- ip адрес нашего http сервера.

Теперь собираем все вместе в один скрипт который будет запускать выгрузку реестра и настраивать маршрутизаторы. Для этого создаем файл start_rzs.sh

#!/bin/bash

cd /gost-ssl/ssl/rzs/

python request.py

/gost-ssl/bin/openssl smime -sign -in req.xml -out req.xml.sign -binary -signer provider.pem -outform PEM

python zapret_checker.py

wait

python extract.py

python mikrotik_configure.py


И помещаем его в cron который будет его запускать, несколько раз в сутки, допустим каждые 10 часов, для этого в /var/spool/cron/root добавляем строку

00 */10 * * * /gost-ssl/ssl/rzs/start_rzs.sh

Обучающий курс по настройке MikroTik

Нужно разобраться с MikroTik, но не определились с чего начать? В курсе «Настройка оборудования MikroTik» все по порядку. Подойдет и для начала работы с этим оборудованием, и для того, чтобы систематизировать знания. Это видеокурс из 162 уроков и 45 лабораторных работ, построен на официальной программе MTCNA. Проходить можно, когда удобно и пересматривать по необходимости – материалы курса выдаются бессрочно. Также есть 30 дней на личные консультации с автором. На пробу выдают 25 уроков бесплатно, заказать их можно на странице курса.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.



2018-09-28T13:06:21
Микротик