OPNsense dvtws (zapret)

Network OPNSense

Ставим git (он вроде доступен без подключения репозиториев, но я уже не помню)

pkg update && pkg install git

Клонируем zapret из github

mkdir /opt && git clone https://github.com/bol-van/zapret.git /opt/zapret

Копируем бинарник

cp /opt/zapret/binaries/freebsd-x64/dvtws /usr/local/sbin && chmod +x /usr/local/sbin/dvtws

Создаём скрипты для запуска

edit /etc/rc.conf.d/dvtws

пишем

dvtws_enable="YES"

далее

edit /usr/local/etc/rc.d/dvtws && chmod +x /usr/local/etc/rc.d/dvtws

пишем (не факт что будет работать с представленными параметрами dpi-desync, их нужно подбирать самостоятельно через blockcheck или ручками). Всё о подборе параметров, их описание и для чего нужны файлы hostlist читаем тут.

#!/bin/sh
SERVICE_NAME="dvtws"
SERVICE_CMD="/usr/local/sbin/dvtws"
pidfile="/var/run/dvtws.pid"
is_service_running() {
  pgrep -f "${SERVICE_CMD}" > ${pidfile} && return 0 || return 1
}

mng_service() {
  if [ "" = "start" ]; then
    kldload ipfw
    kldload ipdivert
    ipfw add 100 divert 989 tcp from any to any 80,443 out not diverted xmit pppoe0
    pfctl -d ; pfctl -e
    ${SERVICE_CMD} \
    --debug=0 \
    --pidfile=/var/run/dvtws.pid \
    --port=989 \
    --filter-tcp=80 \
    --dpi-desync=split2 \
    --dpi-desync-split-seqovl=1 \
    --hostlist-auto=/usr/local/etc/dvtws/dvtws_auto \
    --hostlist-auto-fail-threshold=3 \
    --hostlist-auto-fail-time=60 \
    --hostlist-auto-retrans-threshold=3 \
    --hostlist-auto-debug=/usr/local/etc/dvtws/dvtws_debug \
    --hostlist=/usr/local/etc/dvtws/dvtws_auto \
    --hostlist=/usr/local/etc/dvtws/dvtws_host \
    --hostlist-exclude=/usr/local/etc/dvtws/dvtws_exclude \
    --new \
    --filter-tcp=443 \
    --dpi-desync=split2 \
    --dpi-desync-split-seqovl=1 \
    --hostlist-auto=/usr/local/etc/dvtws/dvtws_auto \
    --hostlist-auto-fail-threshold=3 \
    --hostlist-auto-fail-time=60 \
    --hostlist-auto-retrans-threshold=3 \
    --hostlist-auto-debug=/usr/local/etc/dvtws/dvtws_debug \
    --hostlist=/usr/local/etc/dvtws/dvtws_auto \
    --hostlist=/usr/local/etc/dvtws/dvtws_host \
    --hostlist-exclude=/usr/local/etc/dvtws/dvtws_exclude \
    | logger -t "${SERVICE_NAME}" >/dev/null 2>&1 &
  elif [ "" = "stop" ]; then
    ipfw delete 100
    pkill -f ${SERVICE_NAME}
  fi
}

чтобы управлять сервисом из web’a делаем

edit /usr/local/opnsense/service/conf/actions.d/actions_dvtws.conf

пишем

[start]
command:/usr/local/etc/rc.d/dvtws start
parameters:
type:script
message:starting dvtws
[stop]
command:/usr/local/etc/rc.d/dvtws stop
parameters:
type:script
message:stopping dvtws
[restart]
command:/usr/local/etc/rc.d/dvtws restart
parameters:
type:script
message:restarting dvtws
[status]
command:/usr/local/etc/rc.d/dvtws status; exit 0
parameters:
type:script_output
message:request dvtws status

перезапускаем configd

service configd restart

создаём сервис

edit /usr/local/etc/inc/plugins.inc.d/dvtws.inc

пишем плагин для web’a

<?php

/*
 * Copyright (C) 2017 EURO-LOG AG
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 * 1. Redistributions of source code must retain the above copyright notice,
 *    this list of conditions and the following disclaimer.
 *
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
 * AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
 * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */

/**
 * register service
 * @return array
 */
function dvtws_services()
{
    global $config;

    $services = array();
    $services[] = array(
        'description' => gettext('Anti-DPI server'),
        'configd' => array(
            'restart' => array('dvtws restart'),
            'start' => array('dvtws start'),
            'stop' => array('dvtws stop'),
        ),
        'name' => 'dvtws',
        'pidfile' => '/var/run/dvtws.pid'
    );
    return $services;
}

function dvtws_syslog()
{
    $logfacilities = array();
    $logfacilities['dvtws'] = array(
        'facility' => array('dvtws'),
    );
    return $logfacilities;

ну и напоследок сделаем запуск при старте

edit /usr/local/etc/rc.syshook.d/start/99-dvtws

пишем

#!/bin/sh
#Start dvtws service
/usr/local/etc/rc.d/dvtws start

проверяем что плагин регистрируется

pluginctl -s

в появившемся списке должен присутствовать dvtws. А в system-diagnoctics-services web интерфейса строка

Готово, dvtws установлен, настроен и настроено управление через web. Осталось наполнить hostlist для своих хотелок и перезагрузиться

edit /usr/local/etc/dvtws/dvtws_host

или же оставить всё на усмотрение самого dvtws, который будет наполнять

/usr/local/etc/dvtws/dvtws_auto

за наполение этого файла отвечают параметры

    --hostlist-auto-fail-threshold=3 \
    --hostlist-auto-fail-time=60 \
    --hostlist-auto-retrans-threshold=3 \

а файл

/usr/local/etc/dvtws/dvtws_debug 

будет объяснять почему в файле появляется та или иная запись