diff --git a/net-mgmt/zabbix-proxy/Makefile b/net-mgmt/zabbix-proxy/Makefile
new file mode 100644
index 000000000..20a77ade2
--- /dev/null
+++ b/net-mgmt/zabbix-proxy/Makefile
@@ -0,0 +1,8 @@
+PLUGIN_NAME= zabbix-proxy
+PLUGIN_VERSION= 0.1
+PLUGIN_COMMENT= Zabbix-Proxy enables decentralized monitoring
+PLUGIN_DEPENDS= zabbix3-proxy
+PLUGIN_MAINTAINER= m.muenz@gmail.com
+PLUGIN_DEVEL= yes
+
+.include "../../Mk/plugins.mk"
diff --git a/net-mgmt/zabbix-proxy/pkg-descr b/net-mgmt/zabbix-proxy/pkg-descr
new file mode 100644
index 000000000..d18a4485b
--- /dev/null
+++ b/net-mgmt/zabbix-proxy/pkg-descr
@@ -0,0 +1,10 @@
+Zabbix is an enterprise-class open source distributed monitoring solution.
+
+Zabbix is software that monitors numerous parameters of a network and the
+health and integrity of servers. Zabbix uses a flexible notification
+mechanism that allows users to configure e-mail based alerts for virtually
+any event. This allows a fast reaction to server problems. Zabbix offers
+excellent reporting and data visualisation features based on the stored
+data. This makes Zabbix ideal for capacity planning.
+
+WWW: http://www.zabbix.com/
diff --git a/net-mgmt/zabbix-proxy/src/etc/inc/plugins.inc.d/zabbixproxy.inc b/net-mgmt/zabbix-proxy/src/etc/inc/plugins.inc.d/zabbixproxy.inc
new file mode 100644
index 000000000..1229ec897
--- /dev/null
+++ b/net-mgmt/zabbix-proxy/src/etc/inc/plugins.inc.d/zabbixproxy.inc
@@ -0,0 +1,49 @@
+ gettext('Zabbix-Proxy Daemon'),
+ 'configd' => array(
+ 'restart' => array('zabbixproxy restart'),
+ 'start' => array('zabbixproxy start'),
+ 'stop' => array('zabbixproxy stop'),
+ ),
+ 'name' => 'zabbixproxy',
+ 'pidfile' => '/var/run/zabbix/zabbix_proxy.pid'
+ );
+ }
+
+ return $services;
+}
diff --git a/net-mgmt/zabbix-proxy/src/opnsense/mvc/app/controllers/OPNsense/Zabbixproxy/Api/GeneralController.php b/net-mgmt/zabbix-proxy/src/opnsense/mvc/app/controllers/OPNsense/Zabbixproxy/Api/GeneralController.php
new file mode 100644
index 000000000..f46afbf77
--- /dev/null
+++ b/net-mgmt/zabbix-proxy/src/opnsense/mvc/app/controllers/OPNsense/Zabbixproxy/Api/GeneralController.php
@@ -0,0 +1,77 @@
+request->isGet()) {
+ $mdlGeneral = new General();
+ $result['general'] = $mdlGeneral->getNodes();
+ }
+ return $result;
+ }
+
+ public function setAction()
+ {
+ $result = array("result"=>"failed");
+ if ($this->request->isPost()) {
+ // load model and update with provided data
+ $mdlGeneral = new General();
+ $mdlGeneral->setNodes($this->request->getPost("general"));
+
+ // perform validation
+ $valMsgs = $mdlGeneral->performValidation();
+ foreach ($valMsgs as $field => $msg) {
+ if (!array_key_exists("validations", $result)) {
+ $result["validations"] = array();
+ }
+ $result["validations"]["general.".$msg->getField()] = $msg->getMessage();
+ }
+
+ // serialize model to config and save
+ if ($valMsgs->count() == 0) {
+ $mdlGeneral->serializeToConfig();
+ Config::getInstance()->save();
+ $result["result"] = "saved";
+ }
+ }
+ return $result;
+ }
+}
diff --git a/net-mgmt/zabbix-proxy/src/opnsense/mvc/app/controllers/OPNsense/Zabbixproxy/Api/ServiceController.php b/net-mgmt/zabbix-proxy/src/opnsense/mvc/app/controllers/OPNsense/Zabbixproxy/Api/ServiceController.php
new file mode 100644
index 000000000..df610d923
--- /dev/null
+++ b/net-mgmt/zabbix-proxy/src/opnsense/mvc/app/controllers/OPNsense/Zabbixproxy/Api/ServiceController.php
@@ -0,0 +1,148 @@
+request->isPost()) {
+ $backend = new Backend();
+ $response = $backend->configdRun("zabbixproxy start", true);
+ return array("response" => $response);
+ } else {
+ return array("response" => array());
+ }
+ }
+
+ /**
+ * stop zabbixproxy service
+ * @return array
+ */
+ public function stopAction()
+ {
+ if ($this->request->isPost()) {
+ $backend = new Backend();
+ $response = $backend->configdRun("zabbixproxy stop");
+ return array("response" => $response);
+ } else {
+ return array("response" => array());
+ }
+ }
+
+ /**
+ * restart zabbixproxy service
+ * @return array
+ */
+ public function restartAction()
+ {
+ if ($this->request->isPost()) {
+ $backend = new Backend();
+ $response = $backend->configdRun("zabbixproxy restart");
+ return array("response" => $response);
+ } else {
+ return array("response" => array());
+ }
+ }
+
+ /**
+ * retrieve status of zabbixproxy
+ * @return array
+ * @throws \Exception
+ */
+ public function statusAction()
+ {
+ $backend = new Backend();
+ $mdlGeneral = new General();
+ $response = $backend->configdRun("zabbixproxy status");
+
+ if (strpos($response, "not running") > 0) {
+ if ($mdlGeneral->enabled->__toString() == 1) {
+ $status = "stopped";
+ } else {
+ $status = "disabled";
+ }
+ } elseif (strpos($response, "is running") > 0) {
+ $status = "running";
+ } elseif ($mdlGeneral->enabled->__toString() == 0) {
+ $status = "disabled";
+ } else {
+ $status = "unkown";
+ }
+
+
+ return array("status" => $status);
+ }
+
+ /**
+ * reconfigure zabbixproxy, generate config and reload
+ */
+ public function reconfigureAction()
+ {
+ if ($this->request->isPost()) {
+ // close session for long running action
+ $this->sessionClose();
+
+ $mdlGeneral = new General();
+ $backend = new Backend();
+
+ $runStatus = $this->statusAction();
+
+ // stop zabbixproxy if it is running or not
+ $this->stopAction();
+
+ // generate template
+ $backend->configdRun('template reload OPNsense/Zabbixproxy');
+
+ // (res)start daemon
+ if ($mdlGeneral->enabled->__toString() == 1) {
+ $this->startAction();
+ }
+
+ return array("status" => "ok");
+ } else {
+ return array("status" => "failed");
+ }
+ }
+}
diff --git a/net-mgmt/zabbix-proxy/src/opnsense/mvc/app/controllers/OPNsense/Zabbixproxy/GeneralController.php b/net-mgmt/zabbix-proxy/src/opnsense/mvc/app/controllers/OPNsense/Zabbixproxy/GeneralController.php
new file mode 100644
index 000000000..acb4b2fff
--- /dev/null
+++ b/net-mgmt/zabbix-proxy/src/opnsense/mvc/app/controllers/OPNsense/Zabbixproxy/GeneralController.php
@@ -0,0 +1,39 @@
+view->title = gettext("Zabbix-Proxy Settings");
+ $this->view->generalForm = $this->getForm("general");
+ $this->view->pick('OPNsense/Zabbixproxy/general');
+ }
+}
diff --git a/net-mgmt/zabbix-proxy/src/opnsense/mvc/app/controllers/OPNsense/Zabbixproxy/forms/general.xml b/net-mgmt/zabbix-proxy/src/opnsense/mvc/app/controllers/OPNsense/Zabbixproxy/forms/general.xml
new file mode 100644
index 000000000..1e9c6586f
--- /dev/null
+++ b/net-mgmt/zabbix-proxy/src/opnsense/mvc/app/controllers/OPNsense/Zabbixproxy/forms/general.xml
@@ -0,0 +1,116 @@
+
diff --git a/net-mgmt/zabbix-proxy/src/opnsense/mvc/app/models/OPNsense/Zabbixproxy/ACL/ACL.xml b/net-mgmt/zabbix-proxy/src/opnsense/mvc/app/models/OPNsense/Zabbixproxy/ACL/ACL.xml
new file mode 100644
index 000000000..b2a9b16af
--- /dev/null
+++ b/net-mgmt/zabbix-proxy/src/opnsense/mvc/app/models/OPNsense/Zabbixproxy/ACL/ACL.xml
@@ -0,0 +1,9 @@
+
+
+ Services: Zabbix-Proxy
+
+ ui/zabbixproxy/*
+ api/zabbixproxy/*
+
+
+
diff --git a/net-mgmt/zabbix-proxy/src/opnsense/mvc/app/models/OPNsense/Zabbixproxy/General.php b/net-mgmt/zabbix-proxy/src/opnsense/mvc/app/models/OPNsense/Zabbixproxy/General.php
new file mode 100644
index 000000000..a5c5490c7
--- /dev/null
+++ b/net-mgmt/zabbix-proxy/src/opnsense/mvc/app/models/OPNsense/Zabbixproxy/General.php
@@ -0,0 +1,35 @@
+
+ //OPNsense/zabbixproxy/general
+ Zabbix-Proxy configuration
+ 1.0.0
+
+
+ 0
+ Y
+
+
+ 0
+ Y
+
+
+
+ N
+
+
+ 10051
+ N
+
+
+ Zabbix proxy
+ Y
+
+
+ 10051
+ N
+
+
+
+ N
+
+
+
+ N
+
+
+ 5
+ N
+
+
+ 0
+ N
+
+
+ 1
+ N
+
+
+ 5
+ N
+
+
+ 1
+ N
+
+
+ 1
+ N
+
+
+ 1
+ N
+
+
+ 8M
+ N
+
+
+ 16M
+ N
+
+
+ 4M
+ N
+
+
+ 4
+ N
+
+
+
diff --git a/net-mgmt/zabbix-proxy/src/opnsense/mvc/app/models/OPNsense/Zabbixproxy/Menu/Menu.xml b/net-mgmt/zabbix-proxy/src/opnsense/mvc/app/models/OPNsense/Zabbixproxy/Menu/Menu.xml
new file mode 100644
index 000000000..5e657a83c
--- /dev/null
+++ b/net-mgmt/zabbix-proxy/src/opnsense/mvc/app/models/OPNsense/Zabbixproxy/Menu/Menu.xml
@@ -0,0 +1,5 @@
+
diff --git a/net-mgmt/zabbix-proxy/src/opnsense/mvc/app/views/OPNsense/Zabbixproxy/general.volt b/net-mgmt/zabbix-proxy/src/opnsense/mvc/app/views/OPNsense/Zabbixproxy/general.volt
new file mode 100644
index 000000000..237563fe2
--- /dev/null
+++ b/net-mgmt/zabbix-proxy/src/opnsense/mvc/app/views/OPNsense/Zabbixproxy/general.volt
@@ -0,0 +1,61 @@
+{#
+
+OPNsense® is Copyright © 2014 – 2017 by Deciso B.V.
+This file is Copyright © 2017 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-mgmt/zabbix-proxy/src/opnsense/scripts/OPNsense/Zabbixproxy/setup.sh b/net-mgmt/zabbix-proxy/src/opnsense/scripts/OPNsense/Zabbixproxy/setup.sh
new file mode 100644
index 000000000..4ce930e20
--- /dev/null
+++ b/net-mgmt/zabbix-proxy/src/opnsense/scripts/OPNsense/Zabbixproxy/setup.sh
@@ -0,0 +1,15 @@
+#!/bin/sh
+
+# Setup database directory
+mkdir -p /var/db/zabbix
+chown -R zabbix:zabbix /var/db/zabbix
+chmod 755 /var/db/zabbix
+
+# Setup logging
+touch /var/log/zabbix_proxy.log
+chown -R zabbix:zabbix /var/log/zabbix_proxy.log
+
+# Setup PID directory
+mkdir -p /var/run/zabbix
+chown -R zabbix:zabbix /var/run/zabbix
+chmod 755 /var/run/zabbix
diff --git a/net-mgmt/zabbix-proxy/src/opnsense/service/conf/actions.d/actions_zabbixproxy.conf b/net-mgmt/zabbix-proxy/src/opnsense/service/conf/actions.d/actions_zabbixproxy.conf
new file mode 100644
index 000000000..4b117c456
--- /dev/null
+++ b/net-mgmt/zabbix-proxy/src/opnsense/service/conf/actions.d/actions_zabbixproxy.conf
@@ -0,0 +1,29 @@
+[start]
+command:/usr/local/opnsense/scripts/OPNsense/Zabbixproxy/setup.sh;/usr/local/etc/rc.d/zabbix_proxy start
+parameters:
+type:script
+message:starting Zabbix-Proxy
+
+[stop]
+command:/usr/local/etc/rc.d/zabbix_proxy stop; exit 0
+parameters:
+type:script
+message:stopping Zabbix-Proxy
+
+[restart]
+command:/usr/local/opnsense/scripts/OPNsense/Zabbixproxy/setup.sh;/usr/local/etc/rc.d/zabbix_proxy restart
+parameters:
+type:script
+message:restarting Zabbix-Proxy
+
+[reconfigure]
+command:/usr/local/opnsense/scripts/OPNsense/Zabbixproxy/setup.sh;/usr/local/etc/rc.d/zabbix_proxy restart
+parameters:
+type:script
+message:reconfigure Zabbix-Proxy
+
+[status]
+command:/usr/local/etc/rc.d/zabbix_proxy status;exit 0
+parameters:
+type:script_output
+message:request Zabbix-Proxy status
diff --git a/net-mgmt/zabbix-proxy/src/opnsense/service/templates/OPNsense/Zabbixproxy/+TARGETS b/net-mgmt/zabbix-proxy/src/opnsense/service/templates/OPNsense/Zabbixproxy/+TARGETS
new file mode 100644
index 000000000..d9acf9ec4
--- /dev/null
+++ b/net-mgmt/zabbix-proxy/src/opnsense/service/templates/OPNsense/Zabbixproxy/+TARGETS
@@ -0,0 +1,2 @@
+zabbix_proxy:/etc/rc.conf.d/zabbix_proxy
+zabbix_proxy.conf:/usr/local/etc/zabbix3/zabbix_proxy.conf
diff --git a/net-mgmt/zabbix-proxy/src/opnsense/service/templates/OPNsense/Zabbixproxy/zabbix_proxy b/net-mgmt/zabbix-proxy/src/opnsense/service/templates/OPNsense/Zabbixproxy/zabbix_proxy
new file mode 100644
index 000000000..05ec4c26f
--- /dev/null
+++ b/net-mgmt/zabbix-proxy/src/opnsense/service/templates/OPNsense/Zabbixproxy/zabbix_proxy
@@ -0,0 +1,6 @@
+{% if helpers.exists('OPNsense.zabbixproxy.general.enabled') and OPNsense.zabbixproxy.general.enabled == '1' %}
+zabbix_proxy_opnsense_bootup_run="/usr/local/opnsense/scripts/OPNsense/Zabbixproxy/setup.sh"
+zabbix_proxy_enable="YES"
+{% else %}
+zabbix_proxy_enable="NO"
+{% endif %}
diff --git a/net-mgmt/zabbix-proxy/src/opnsense/service/templates/OPNsense/Zabbixproxy/zabbix_proxy.conf b/net-mgmt/zabbix-proxy/src/opnsense/service/templates/OPNsense/Zabbixproxy/zabbix_proxy.conf
new file mode 100644
index 000000000..d6f630c03
--- /dev/null
+++ b/net-mgmt/zabbix-proxy/src/opnsense/service/templates/OPNsense/Zabbixproxy/zabbix_proxy.conf
@@ -0,0 +1,63 @@
+{% if helpers.exists('OPNsense.zabbixproxy.general.enabled') and OPNsense.zabbixproxy.general.enabled == '1' %}
+
+{% if helpers.exists('OPNsense.zabbixproxy.general.proxymode') and OPNsense.zabbixproxy.general.proxymode == '1' %}
+ProxyMode=1
+{% else %}
+ProxyMode=0
+{% endif %}
+{% if helpers.exists('OPNsense.zabbixproxy.general.server') and OPNsense.zabbixproxy.general.server != '' %}
+Server={{ OPNsense.zabbixproxy.general.server }}
+{% endif %}
+{% if helpers.exists('OPNsense.zabbixproxy.general.serverport') and OPNsense.zabbixproxy.general.serverport != '' %}
+ServerPort={{ OPNsense.zabbixproxy.general.serverport }}
+{% endif %}
+{% if helpers.exists('OPNsense.zabbixproxy.general.hostname') and OPNsense.zabbixproxy.general.hostname != '' %}
+Hostname={{ OPNsense.zabbixproxy.general.hostname }}
+{% endif %}
+{% if helpers.exists('OPNsense.zabbixproxy.general.listenport') and OPNsense.zabbixproxy.general.listenport != '' %}
+ListenPort={{ OPNsense.zabbixproxy.general.listenport }}
+{% endif %}
+{% if helpers.exists('OPNsense.zabbixproxy.general.sourceip') and OPNsense.zabbixproxy.general.sourceip != '' %}
+SourceIP={{ OPNsense.zabbixproxy.general.sourceip }}
+{% endif %}
+LogFile=/var/log/zabbix_proxy.log
+PidFile=/var/run/zabbix/zabbix_proxy.pid
+DBName=/var/db/zabbix/zabbix_proxy.db
+{% if helpers.exists('OPNsense.zabbixproxy.general.startpollers') and OPNsense.zabbixproxy.general.startpollers != '' %}
+StartPollers={{ OPNsense.zabbixproxy.general.startpollers }}
+{% endif %}
+{% if helpers.exists('OPNsense.zabbixproxy.general.startipmipollers') and OPNsense.zabbixproxy.general.startipmipollers != '' %}
+StartIPMIPollers={{ OPNsense.zabbixproxy.general.startipmipollers }}
+{% endif %}
+{% if helpers.exists('OPNsense.zabbixproxy.general.startpollersunreachable') and OPNsense.zabbixproxy.general.startpollersunreachable != '' %}
+StartPollersUnreachable={{ OPNsense.zabbixproxy.general.startpollersunreachable }}
+{% endif %}
+{% if helpers.exists('OPNsense.zabbixproxy.general.starttrappers') and OPNsense.zabbixproxy.general.starttrappers != '' %}
+StartTrappers={{ OPNsense.zabbixproxy.general.starttrappers }}
+{% endif %}
+{% if helpers.exists('OPNsense.zabbixproxy.general.startpingers') and OPNsense.zabbixproxy.general.startpingers != '' %}
+StartPingers={{ OPNsense.zabbixproxy.general.startpingers }}
+{% endif %}
+{% if helpers.exists('OPNsense.zabbixproxy.general.startdiscoverers') and OPNsense.zabbixproxy.general.startdiscoverers != '' %}
+StartDiscoverers={{ OPNsense.zabbixproxy.general.startdiscoverers }}
+{% endif %}
+{% if helpers.exists('OPNsense.zabbixproxy.general.starthttppollers') and OPNsense.zabbixproxy.general.starthttppollers != '' %}
+StartHTTPPollers={{ OPNsense.zabbixproxy.general.starthttppollers }}
+{% endif %}
+{% if helpers.exists('OPNsense.zabbixproxy.general.listenip') and OPNsense.zabbixproxy.general.listenip != '' %}
+ListenIP={{ OPNsense.zabbixproxy.general.listenip }}
+{% endif %}
+{% if helpers.exists('OPNsense.zabbixproxy.general.cachesize') and OPNsense.zabbixproxy.general.cachesize != '' %}
+CacheSize={{ OPNsense.zabbixproxy.general.cachesize }}
+{% endif %}
+{% if helpers.exists('OPNsense.zabbixproxy.general.historycachesize') and OPNsense.zabbixproxy.general.historycachesize != '' %}
+HistoryCacheSize={{ OPNsense.zabbixproxy.general.historycachesize }}
+{% endif %}
+{% if helpers.exists('OPNsense.zabbixproxy.general.historyindexcachesize') and OPNsense.zabbixproxy.general.historyindexcachesize != '' %}
+HistoryIndexCacheSize={{ OPNsense.zabbixproxy.general.historyindexcachesize }}
+{% endif %}
+{% if helpers.exists('OPNsense.zabbixproxy.general.timeout') and OPNsense.zabbixproxy.general.timeout != '' %}
+Timeout={{ OPNsense.zabbixproxy.general.timeout }}
+{% endif %}
+
+{% endif %}