From 9d963dcdb45c55d8eab583ec31170c681a825e63 Mon Sep 17 00:00:00 2001 From: Michael Date: Fri, 5 Jan 2018 17:59:03 +0100 Subject: [PATCH] net/shadowsocks: New plugin (#469) --- net/shadowsocks/Makefile | 8 +++ net/shadowsocks/pkg-descr | 11 ++++ .../src/etc/inc/plugins.inc.d/shadowsocks.inc | 49 +++++++++++++++ .../Shadowsocks/Api/GeneralController.php | 40 ++++++++++++ .../Shadowsocks/Api/ServiceController.php | 42 +++++++++++++ .../Shadowsocks/GeneralController.php | 38 ++++++++++++ .../OPNsense/Shadowsocks/forms/general.xml | 32 ++++++++++ .../models/OPNsense/Shadowsocks/ACL/ACL.xml | 9 +++ .../models/OPNsense/Shadowsocks/General.php | 35 +++++++++++ .../models/OPNsense/Shadowsocks/General.xml | 35 +++++++++++ .../models/OPNsense/Shadowsocks/Menu/Menu.xml | 5 ++ .../views/OPNsense/Shadowsocks/general.volt | 61 +++++++++++++++++++ .../conf/actions.d/actions_shadowsocks.conf | 24 ++++++++ .../templates/OPNsense/Shadowsocks/+TARGETS | 2 + .../OPNsense/Shadowsocks/shadowsocks.conf | 10 +++ .../OPNsense/Shadowsocks/shadowsocks_libev | 6 ++ 16 files changed, 407 insertions(+) create mode 100644 net/shadowsocks/Makefile create mode 100644 net/shadowsocks/pkg-descr create mode 100644 net/shadowsocks/src/etc/inc/plugins.inc.d/shadowsocks.inc create mode 100644 net/shadowsocks/src/opnsense/mvc/app/controllers/OPNsense/Shadowsocks/Api/GeneralController.php create mode 100644 net/shadowsocks/src/opnsense/mvc/app/controllers/OPNsense/Shadowsocks/Api/ServiceController.php create mode 100644 net/shadowsocks/src/opnsense/mvc/app/controllers/OPNsense/Shadowsocks/GeneralController.php create mode 100644 net/shadowsocks/src/opnsense/mvc/app/controllers/OPNsense/Shadowsocks/forms/general.xml create mode 100644 net/shadowsocks/src/opnsense/mvc/app/models/OPNsense/Shadowsocks/ACL/ACL.xml create mode 100644 net/shadowsocks/src/opnsense/mvc/app/models/OPNsense/Shadowsocks/General.php create mode 100644 net/shadowsocks/src/opnsense/mvc/app/models/OPNsense/Shadowsocks/General.xml create mode 100644 net/shadowsocks/src/opnsense/mvc/app/models/OPNsense/Shadowsocks/Menu/Menu.xml create mode 100644 net/shadowsocks/src/opnsense/mvc/app/views/OPNsense/Shadowsocks/general.volt create mode 100644 net/shadowsocks/src/opnsense/service/conf/actions.d/actions_shadowsocks.conf create mode 100644 net/shadowsocks/src/opnsense/service/templates/OPNsense/Shadowsocks/+TARGETS create mode 100644 net/shadowsocks/src/opnsense/service/templates/OPNsense/Shadowsocks/shadowsocks.conf create mode 100644 net/shadowsocks/src/opnsense/service/templates/OPNsense/Shadowsocks/shadowsocks_libev diff --git a/net/shadowsocks/Makefile b/net/shadowsocks/Makefile new file mode 100644 index 000000000..dbc284b28 --- /dev/null +++ b/net/shadowsocks/Makefile @@ -0,0 +1,8 @@ +PLUGIN_NAME= shadowsocks +PLUGIN_VERSION= 0.1 +PLUGIN_COMMENT= A secure socks5 proxy designed to protect your Internet traffic +PLUGIN_DEPENDS= shadowsocks-libev +PLUGIN_MAINTAINER= m.muenz@gmail.com +PLUGIN_DEVEL= yes + +.include "../../Mk/plugins.mk" diff --git a/net/shadowsocks/pkg-descr b/net/shadowsocks/pkg-descr new file mode 100644 index 000000000..9120f966d --- /dev/null +++ b/net/shadowsocks/pkg-descr @@ -0,0 +1,11 @@ +A secure socks5 proxy, designed to protect your Internet traffic. + +Bleeding edge techniques using Asynchronous I/O and Event-driven +programming. Secured with industry level encryption algorithm. +Flexible to support custom algorithms. Optimized for mobile device +and wireless network, without any keep-alive connections. +Totally free and open source. A worldwide community devoted to +deliver bug-free code and long-term support. + + +WWW: https://shadowsocks.org diff --git a/net/shadowsocks/src/etc/inc/plugins.inc.d/shadowsocks.inc b/net/shadowsocks/src/etc/inc/plugins.inc.d/shadowsocks.inc new file mode 100644 index 000000000..29e537173 --- /dev/null +++ b/net/shadowsocks/src/etc/inc/plugins.inc.d/shadowsocks.inc @@ -0,0 +1,49 @@ + gettext('shadowsocks daemon'), + 'configd' => array( + 'restart' => array('shadowsocks restart'), + 'start' => array('shadowsocks start'), + 'stop' => array('shadowsocks stop'), + ), + 'name' => 'shadowsocks', + 'pidfile' => '/var/run/shadowsocks-libev.pid' + ); + } + + return $services; +} diff --git a/net/shadowsocks/src/opnsense/mvc/app/controllers/OPNsense/Shadowsocks/Api/GeneralController.php b/net/shadowsocks/src/opnsense/mvc/app/controllers/OPNsense/Shadowsocks/Api/GeneralController.php new file mode 100644 index 000000000..9c2c54959 --- /dev/null +++ b/net/shadowsocks/src/opnsense/mvc/app/controllers/OPNsense/Shadowsocks/Api/GeneralController.php @@ -0,0 +1,40 @@ +view->generalForm = $this->getForm("general"); + $this->view->pick('OPNsense/Shadowsocks/general'); + } +} diff --git a/net/shadowsocks/src/opnsense/mvc/app/controllers/OPNsense/Shadowsocks/forms/general.xml b/net/shadowsocks/src/opnsense/mvc/app/controllers/OPNsense/Shadowsocks/forms/general.xml new file mode 100644 index 000000000..532291e27 --- /dev/null +++ b/net/shadowsocks/src/opnsense/mvc/app/controllers/OPNsense/Shadowsocks/forms/general.xml @@ -0,0 +1,32 @@ +
+ + general.enabled + + checkbox + This will activate the ShadowSocks Proxy service. + + + general.serveraddress + + text + IP address or hostname of the server. + + + general.serverport + + text + Port of the server. + + + general.localport + + text + The local port of the daemon, default is fine. + + + general.password + + text + Password to authenticate against the server. + +
diff --git a/net/shadowsocks/src/opnsense/mvc/app/models/OPNsense/Shadowsocks/ACL/ACL.xml b/net/shadowsocks/src/opnsense/mvc/app/models/OPNsense/Shadowsocks/ACL/ACL.xml new file mode 100644 index 000000000..7ecbc84ae --- /dev/null +++ b/net/shadowsocks/src/opnsense/mvc/app/models/OPNsense/Shadowsocks/ACL/ACL.xml @@ -0,0 +1,9 @@ + + + Services: Shadowsocks + + ui/shadowsocks/* + api/shadowsocks/* + + + diff --git a/net/shadowsocks/src/opnsense/mvc/app/models/OPNsense/Shadowsocks/General.php b/net/shadowsocks/src/opnsense/mvc/app/models/OPNsense/Shadowsocks/General.php new file mode 100644 index 000000000..95f295612 --- /dev/null +++ b/net/shadowsocks/src/opnsense/mvc/app/models/OPNsense/Shadowsocks/General.php @@ -0,0 +1,35 @@ + + //OPNsense/shadowsocks/general + Shadowsocks configuration + 1.0.0 + + + 0 + Y + + + 127.0.0.1 + Y + /\S*/ + Please provide a valid hostname or IP address. + + + 8388 + Y + 1 + 65535 + Please provide a valid port number between 1 and 65535. + + + 1080 + Y + 1 + 65535 + Please provide a valid port number between 1 and 65535. + + + password + N + + + diff --git a/net/shadowsocks/src/opnsense/mvc/app/models/OPNsense/Shadowsocks/Menu/Menu.xml b/net/shadowsocks/src/opnsense/mvc/app/models/OPNsense/Shadowsocks/Menu/Menu.xml new file mode 100644 index 000000000..5f4abeb94 --- /dev/null +++ b/net/shadowsocks/src/opnsense/mvc/app/models/OPNsense/Shadowsocks/Menu/Menu.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/net/shadowsocks/src/opnsense/mvc/app/views/OPNsense/Shadowsocks/general.volt b/net/shadowsocks/src/opnsense/mvc/app/views/OPNsense/Shadowsocks/general.volt new file mode 100644 index 000000000..948210942 --- /dev/null +++ b/net/shadowsocks/src/opnsense/mvc/app/views/OPNsense/Shadowsocks/general.volt @@ -0,0 +1,61 @@ +{# + +OPNsense® is Copyright © 2014 – 2018 by Deciso B.V. +This file is Copyright © 2018 by Michael Muenz +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. + +#} +
+ {{ partial("layout_partials/base_form",['fields':generalForm,'id':'frm_general_settings'])}} +
+
+ +
+
+ + diff --git a/net/shadowsocks/src/opnsense/service/conf/actions.d/actions_shadowsocks.conf b/net/shadowsocks/src/opnsense/service/conf/actions.d/actions_shadowsocks.conf new file mode 100644 index 000000000..24c5ec973 --- /dev/null +++ b/net/shadowsocks/src/opnsense/service/conf/actions.d/actions_shadowsocks.conf @@ -0,0 +1,24 @@ +[start] +command:/usr/local/etc/rc.d/shadowsocks_libev start +parameters: +type:script +message:starting Shadowsocks + +[stop] +command:/usr/local/etc/rc.d/shadowsocks_libev stop +parameters: +type:script +message:stopping Shadowsocks + +[restart] +command:/usr/local/etc/rc.d/shadowsocks_libev restart +parameters: +type:script +message:restarting Shadowsocks + +[status] +command:/usr/local/etc/rc.d/shadowsocks_libev status;exit 0 +parameters: +type:script_output +message:request Shadowsocks status + diff --git a/net/shadowsocks/src/opnsense/service/templates/OPNsense/Shadowsocks/+TARGETS b/net/shadowsocks/src/opnsense/service/templates/OPNsense/Shadowsocks/+TARGETS new file mode 100644 index 000000000..b1f7754b5 --- /dev/null +++ b/net/shadowsocks/src/opnsense/service/templates/OPNsense/Shadowsocks/+TARGETS @@ -0,0 +1,2 @@ +shadowsocks_libev:/etc/rc.conf.d/shadowsocks_libev +shadowsocks.conf:/usr/local/etc/shadowsocks-libev/config.json diff --git a/net/shadowsocks/src/opnsense/service/templates/OPNsense/Shadowsocks/shadowsocks.conf b/net/shadowsocks/src/opnsense/service/templates/OPNsense/Shadowsocks/shadowsocks.conf new file mode 100644 index 000000000..bbf3807bd --- /dev/null +++ b/net/shadowsocks/src/opnsense/service/templates/OPNsense/Shadowsocks/shadowsocks.conf @@ -0,0 +1,10 @@ +{% if helpers.exists('OPNsense.shadowsocks.general.enabled') and OPNsense.shadowsocks.general.enabled == '1' %} +{ + "server":"{{ OPNsense.shadowsocks.general.serveraddress }}", + "server_port":{{ OPNsense.shadowsocks.general.serverport }}, + "local_port":{{ OPNsense.shadowsocks.general.localport }}, + "password":"{{ OPNsense.shadowsocks.general.password }}", + "timeout":60, + "method":"chacha20-ietf-poly1305" +} +{% endif %} diff --git a/net/shadowsocks/src/opnsense/service/templates/OPNsense/Shadowsocks/shadowsocks_libev b/net/shadowsocks/src/opnsense/service/templates/OPNsense/Shadowsocks/shadowsocks_libev new file mode 100644 index 000000000..11dd88f35 --- /dev/null +++ b/net/shadowsocks/src/opnsense/service/templates/OPNsense/Shadowsocks/shadowsocks_libev @@ -0,0 +1,6 @@ +{% if helpers.exists('OPNsense.shadowsocks.general.enabled') and OPNsense.shadowsocks.general.enabled == '1' %} +shadowsocks_libev_enable="YES" +shadowsocks_libev_flags="" +{% else %} +shadowsocks_libev_enable="NO" +{% endif %}