mirror of
https://github.com/netbirdio/plugins.git
synced 2026-05-22 18:44:07 -07:00
plugins: remove obsolete, switch to 24.1 branch, sync
This commit is contained in:
@@ -7,7 +7,6 @@ Copyright (c) 2023 Bernhard Frenking <bernhard@frenking.eu>
|
||||
Copyright (c) 2023 Cannon Matthews <cannonmatthews@google.com>
|
||||
Copyright (c) 2019 Cloudfence - Julio Camargo (JCC)
|
||||
Copyright (c) 2005-2006 Colin Smith <ethethlay@gmail.com>
|
||||
Copyright (c) 2020 D. Domig
|
||||
Copyright (c) 2021 Dan Lundqvist
|
||||
Copyright (c) 2021 David Berry
|
||||
Copyright (c) 2017-2018 David Harrigan
|
||||
@@ -50,7 +49,6 @@ Copyright (c) 2021 Nicola Pellegrini
|
||||
Copyright (c) 2022 Nikolaj Brinch Jørgensen
|
||||
Copyright (c) 2021 Nim G
|
||||
Copyright (c) 2023 Oliver Hartl
|
||||
Copyright (c) 2022 Patrik Kernstock <patrik@kernstock.net>
|
||||
Copyright (c) 2022 Robbert Rijkse
|
||||
Copyright (c) 2023 sattamjh
|
||||
Copyright (c) 2004-2012 Scott Ullrich <sullrich@gmail.com>
|
||||
|
||||
+1
-1
@@ -45,7 +45,7 @@ VERSIONBIN= ${LOCALBASE}/sbin/opnsense-version
|
||||
_PLUGIN_ABI!= ${VERSIONBIN} -a
|
||||
PLUGIN_ABI?= ${_PLUGIN_ABI}
|
||||
.else
|
||||
PLUGIN_ABI?= 23.7
|
||||
PLUGIN_ABI?= 24.1
|
||||
.endif
|
||||
|
||||
PHPBIN= ${LOCALBASE}/bin/php
|
||||
|
||||
@@ -47,7 +47,6 @@ misc/theme-rebellion -- A suitably dark theme
|
||||
misc/theme-tukan -- The tukan theme - blue/white
|
||||
misc/theme-vicuna -- The vicuna theme - blue sapphire
|
||||
net/chrony -- Chrony time synchronisation
|
||||
net/firewall -- Firewall API supplemental package (pending removal)
|
||||
net/freeradius -- RADIUS Authentication, Authorization and Accounting Server
|
||||
net/frr -- The FRRouting Protocol Suite
|
||||
net/ftp-proxy -- Control ftp-proxy processes
|
||||
@@ -64,10 +63,8 @@ net/siproxd -- Siproxd is a proxy daemon for the SIP protocol
|
||||
net/sslh -- sslh configuration front-end
|
||||
net/tayga -- Tayga NAT64
|
||||
net/udpbroadcastrelay -- Control ubpbroadcastrelay processes
|
||||
net/upnp -- Universal Plug and Play Service
|
||||
net/upnp -- Universal Plug and Play (UPnP IGD & PCP/NAT-PMP) Service
|
||||
net/vnstat -- Network traffic monitor
|
||||
net/wireguard -- WireGuard VPN service kernel implementation (pending removal)
|
||||
net/wireguard-go -- WireGuard VPN service Go implementation (pending removal)
|
||||
net/wol -- Wake on LAN Service
|
||||
net/zerotier -- Virtual Networks That Just Work
|
||||
net-mgmt/collectd -- Collect system and application performance metrics periodically
|
||||
@@ -94,7 +91,6 @@ security/tinc -- Tinc VPN
|
||||
security/tor -- The Onion Router
|
||||
security/wazuh-agent -- Agent for the open source security platform Wazuh
|
||||
sysutils/apcupsd -- APCUPSD - APC UPS daemon
|
||||
sysutils/api-backup -- EoL, core endpoint is /api/core/backup/download/this (pending removal)
|
||||
sysutils/apuled -- PC Engine APU LED control (development only)
|
||||
sysutils/dec-hw -- Deciso hardware specific information
|
||||
sysutils/dmidecode -- Display hardware information on the dashboard
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
PLUGIN_NAME= firewall
|
||||
PLUGIN_VERSION= 1.5
|
||||
PLUGIN_COMMENT= Firewall API supplemental package
|
||||
PLUGIN_OBSOLETE= yes
|
||||
PLUGIN_MAINTAINER= ad@opnsense.org
|
||||
PLUGIN_TIER= 2
|
||||
|
||||
.include "../../Mk/plugins.mk"
|
||||
@@ -1,4 +0,0 @@
|
||||
This package extends the standard OPNsense firewall system with endpoints for machine to machine management tasks.
|
||||
Gui components are initially only intended to ease testing and to explain current functionality.
|
||||
|
||||
In the long term this might replace the default firewall in OPNsense.
|
||||
@@ -1,48 +0,0 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* Copyright (C) 2020 Deciso B.V.
|
||||
* 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.
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @param $fw
|
||||
*/
|
||||
function pfplugin_firewall($fw)
|
||||
{
|
||||
$mdlFilter = new OPNsense\Firewall\Filter();
|
||||
foreach ($mdlFilter->rules->rule->sortedBy(["sequence"]) as $key => $rule) {
|
||||
$content = $rule->serialize();
|
||||
$content["#ref"] = "ui/firewall/filter#" . (string)$rule->getAttributes()['uuid'];
|
||||
$fw->registerFilterRule($rule->getPriority(), $content);
|
||||
}
|
||||
|
||||
foreach ($mdlFilter->snatrules->rule->sortedBy(["sequence"]) as $key => $rule) {
|
||||
$fw->registerSNatRule(50, $rule->serialize());
|
||||
}
|
||||
foreach ($mdlFilter->npt->rule->sortedBy(["sequence"]) as $key => $rule) {
|
||||
$fw->registerNptRule(50, $rule->serialize());
|
||||
}
|
||||
}
|
||||
-178
@@ -1,178 +0,0 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* Copyright (C) 2020 Deciso B.V.
|
||||
* 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.
|
||||
*/
|
||||
namespace OPNsense\Firewall\Api;
|
||||
|
||||
use OPNsense\Base\ApiMutableModelControllerBase;
|
||||
use OPNsense\Core\Backend;
|
||||
use OPNsense\Core\Config;
|
||||
use OPNsense\Firewall\Alias;
|
||||
use OPNsense\Firewall\Category;
|
||||
|
||||
/**
|
||||
* Class FilterBaseController implements actions for various types
|
||||
* @package OPNsense\Firewall\Api
|
||||
*/
|
||||
abstract class FilterBaseController extends ApiMutableModelControllerBase
|
||||
{
|
||||
protected static $internalModelName = 'filter';
|
||||
protected static $internalModelClass = 'OPNsense\Firewall\Filter';
|
||||
protected static $categorysource = null;
|
||||
|
||||
/**
|
||||
* list categories and usage
|
||||
* @return array
|
||||
*/
|
||||
public function listCategoriesAction()
|
||||
{
|
||||
$response = ['rows' => []];
|
||||
$catcount = [];
|
||||
if (!empty(static::$categorysource)) {
|
||||
$node = $this->getModel();
|
||||
foreach (explode('.', static::$categorysource) as $ref) {
|
||||
$node = $node->$ref;
|
||||
}
|
||||
foreach ($node->iterateItems() as $item) {
|
||||
if (!empty((string)$item->categories)) {
|
||||
foreach (explode(',', (string)$item->categories) as $cat) {
|
||||
if (!isset($catcount[$cat])) {
|
||||
$catcount[$cat] = 0;
|
||||
}
|
||||
$catcount[$cat] += 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
foreach ((new Category())->categories->category->iterateItems() as $key => $category) {
|
||||
$response['rows'][] = [
|
||||
"uuid" => $key,
|
||||
"name" => (string)$category->name,
|
||||
"color" => (string)$category->color,
|
||||
"used" => isset($catcount[$key]) ? $catcount[$key] : 0
|
||||
];
|
||||
}
|
||||
array_multisort(array_column($response['rows'], "name"), SORT_ASC, SORT_NATURAL, $response['rows']);
|
||||
|
||||
return $response;
|
||||
}
|
||||
|
||||
/**
|
||||
* list of available network options
|
||||
* @return array
|
||||
*/
|
||||
public function listNetworkSelectOptionsAction()
|
||||
{
|
||||
$result = [
|
||||
'single' => [
|
||||
'label' => gettext("Single host or Network")
|
||||
],
|
||||
'aliases' => [
|
||||
'label' => gettext("Aliases"),
|
||||
'items' => []
|
||||
],
|
||||
'networks' => [
|
||||
'label' => gettext("Networks"),
|
||||
'items' => [
|
||||
'any' => gettext('any'),
|
||||
'(self)' => gettext("This Firewall")
|
||||
]
|
||||
]
|
||||
];
|
||||
foreach ((Config::getInstance()->object())->interfaces->children() as $ifname => $ifdetail) {
|
||||
$descr = htmlspecialchars(!empty($ifdetail->descr) ? $ifdetail->descr : strtoupper($ifname));
|
||||
$result['networks']['items'][$ifname] = $descr . " " . gettext("net");
|
||||
if (!isset($ifdetail->virtual)) {
|
||||
$result['networks']['items'][$ifname . "ip"] = $descr . " " . gettext("address");
|
||||
}
|
||||
}
|
||||
foreach ((new Alias())->aliases->alias->iterateItems() as $alias) {
|
||||
if (strpos((string)$alias->type, "port") === false) {
|
||||
$result['aliases']['items'][(string)$alias->name] = (string)$alias->name;
|
||||
}
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
|
||||
public function applyAction($rollback_revision = null)
|
||||
{
|
||||
if ($this->request->isPost()) {
|
||||
if ($rollback_revision != null) {
|
||||
// background rollback timer
|
||||
(new Backend())->configdpRun('pfplugin rollback_timer', [$rollback_revision], true);
|
||||
}
|
||||
return array("status" => (new Backend())->configdRun('filter reload'));
|
||||
} else {
|
||||
return array("status" => "error");
|
||||
}
|
||||
}
|
||||
|
||||
public function cancelRollbackAction($rollback_revision)
|
||||
{
|
||||
if ($this->request->isPost()) {
|
||||
return array(
|
||||
"status" => (new Backend())->configdpRun('pfplugin cancel_rollback', [$rollback_revision])
|
||||
);
|
||||
} else {
|
||||
return array("status" => "error");
|
||||
}
|
||||
}
|
||||
|
||||
public function savepointAction()
|
||||
{
|
||||
if ($this->request->isPost()) {
|
||||
// trigger a save, so we know revision->time matches our running config
|
||||
Config::getInstance()->save();
|
||||
return array(
|
||||
"status" => "ok",
|
||||
"retention" => (string)Config::getInstance()->backupCount(),
|
||||
"revision" => (string)Config::getInstance()->object()->revision->time
|
||||
);
|
||||
} else {
|
||||
return array("status" => "error");
|
||||
}
|
||||
}
|
||||
|
||||
public function revertAction($revision)
|
||||
{
|
||||
if ($this->request->isPost()) {
|
||||
Config::getInstance()->lock();
|
||||
$filename = Config::getInstance()->getBackupFilename($revision);
|
||||
if (!$filename) {
|
||||
Config::getInstance()->unlock();
|
||||
return ["status" => gettext("unknown (or removed) savepoint")];
|
||||
}
|
||||
$this->getModel()->rollback($revision);
|
||||
Config::getInstance()->unlock();
|
||||
(new Backend())->configdRun('filter reload');
|
||||
return ["status" => "ok"];
|
||||
} else {
|
||||
return array("status" => "error");
|
||||
}
|
||||
}
|
||||
}
|
||||
-67
@@ -1,67 +0,0 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* Copyright (C) 2020 Deciso B.V.
|
||||
* 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.
|
||||
*/
|
||||
namespace OPNsense\Firewall\Api;
|
||||
|
||||
class FilterController extends FilterBaseController
|
||||
{
|
||||
protected static $categorysource = "rules.rule";
|
||||
|
||||
public function searchRuleAction()
|
||||
{
|
||||
$category = $this->request->get('category');
|
||||
$filter_funct = function ($record) use ($category) {
|
||||
return empty($category) || array_intersect(explode(',', $record->categories), $category);
|
||||
};
|
||||
return $this->searchBase("rules.rule", ['enabled', 'sequence', 'description'], "sequence", $filter_funct);
|
||||
}
|
||||
|
||||
public function setRuleAction($uuid)
|
||||
{
|
||||
return $this->setBase("rule", "rules.rule", $uuid);
|
||||
}
|
||||
|
||||
public function addRuleAction()
|
||||
{
|
||||
return $this->addBase("rule", "rules.rule");
|
||||
}
|
||||
|
||||
public function getRuleAction($uuid = null)
|
||||
{
|
||||
return $this->getBase("rule", "rules.rule", $uuid);
|
||||
}
|
||||
|
||||
public function delRuleAction($uuid)
|
||||
{
|
||||
return $this->delBase("rules.rule", $uuid);
|
||||
}
|
||||
|
||||
public function toggleRuleAction($uuid, $enabled = null)
|
||||
{
|
||||
return $this->toggleBase("rules.rule", $uuid, $enabled);
|
||||
}
|
||||
}
|
||||
@@ -1,72 +0,0 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* Copyright (C) 2023 Deciso B.V.
|
||||
* 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.
|
||||
*/
|
||||
namespace OPNsense\Firewall\Api;
|
||||
|
||||
class NptController extends FilterBaseController
|
||||
{
|
||||
protected static $categorysource = "npt.rule";
|
||||
|
||||
public function searchRuleAction()
|
||||
{
|
||||
$category = $this->request->get('category');
|
||||
$filter_funct = function ($record) use ($category) {
|
||||
return empty($category) || array_intersect(explode(',', $record->categories), $category);
|
||||
};
|
||||
return $this->searchBase(
|
||||
"npt.rule",
|
||||
['enabled', 'sequence', 'source_net', 'destination_net', 'trackif', 'description'],
|
||||
"sequence",
|
||||
$filter_funct
|
||||
);
|
||||
}
|
||||
|
||||
public function setRuleAction($uuid)
|
||||
{
|
||||
return $this->setBase("rule", "npt.rule", $uuid);
|
||||
}
|
||||
|
||||
public function addRuleAction()
|
||||
{
|
||||
return $this->addBase("rule", "npt.rule");
|
||||
}
|
||||
|
||||
public function getRuleAction($uuid = null)
|
||||
{
|
||||
return $this->getBase("rule", "npt.rule", $uuid);
|
||||
}
|
||||
|
||||
public function delRuleAction($uuid)
|
||||
{
|
||||
return $this->delBase("npt.rule", $uuid);
|
||||
}
|
||||
|
||||
public function toggleRuleAction($uuid, $enabled = null)
|
||||
{
|
||||
return $this->toggleBase("npt.rule", $uuid, $enabled);
|
||||
}
|
||||
}
|
||||
-67
@@ -1,67 +0,0 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* Copyright (C) 2020 Deciso B.V.
|
||||
* 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.
|
||||
*/
|
||||
namespace OPNsense\Firewall\Api;
|
||||
|
||||
class SourceNatController extends FilterBaseController
|
||||
{
|
||||
protected static $categorysource = "snatrules.rule";
|
||||
|
||||
public function searchRuleAction()
|
||||
{
|
||||
$category = $this->request->get('category');
|
||||
$filter_funct = function ($record) use ($category) {
|
||||
return empty($category) || array_intersect(explode(',', $record->categories), $category);
|
||||
};
|
||||
return $this->searchBase("snatrules.rule", ['enabled', 'sequence', 'description'], "sequence", $filter_funct);
|
||||
}
|
||||
|
||||
public function setRuleAction($uuid)
|
||||
{
|
||||
return $this->setBase("rule", "snatrules.rule", $uuid);
|
||||
}
|
||||
|
||||
public function addRuleAction()
|
||||
{
|
||||
return $this->addBase("rule", "snatrules.rule");
|
||||
}
|
||||
|
||||
public function getRuleAction($uuid = null)
|
||||
{
|
||||
return $this->getBase("rule", "snatrules.rule", $uuid);
|
||||
}
|
||||
|
||||
public function delRuleAction($uuid)
|
||||
{
|
||||
return $this->delBase("snatrules.rule", $uuid);
|
||||
}
|
||||
|
||||
public function toggleRuleAction($uuid, $enabled = null)
|
||||
{
|
||||
return $this->toggleBase("snatrules.rule", $uuid, $enabled);
|
||||
}
|
||||
}
|
||||
@@ -1,50 +0,0 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* Copyright (C) 2020 Deciso B.V.
|
||||
* 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.
|
||||
*/
|
||||
namespace OPNsense\Firewall;
|
||||
|
||||
class FilterController extends \OPNsense\Base\IndexController
|
||||
{
|
||||
public function indexAction()
|
||||
{
|
||||
$this->view->pick('OPNsense/Firewall/filter');
|
||||
$this->view->SavePointBtns = true;
|
||||
$this->view->ruleController = "filter";
|
||||
$this->view->gridFields = [
|
||||
[
|
||||
'id' => 'enabled', 'formatter' => 'rowtoggle' ,'width' => '6em', 'heading' => gettext('Enabled')
|
||||
],
|
||||
[
|
||||
'id' => 'sequence','width' => '9em', 'heading' => gettext('Sequence')
|
||||
],
|
||||
[
|
||||
'id' => 'description', 'heading' => gettext('Description')
|
||||
]
|
||||
];
|
||||
$this->view->formDialogFilterRule = $this->getForm("dialogFilterRule");
|
||||
}
|
||||
}
|
||||
@@ -1,59 +0,0 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* Copyright (C) 2023 Deciso B.V.
|
||||
* 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.
|
||||
*/
|
||||
namespace OPNsense\Firewall;
|
||||
|
||||
class NptController extends \OPNsense\Base\IndexController
|
||||
{
|
||||
public function indexAction()
|
||||
{
|
||||
$this->view->pick('OPNsense/Firewall/filter');
|
||||
$this->view->ruleController = "npt";
|
||||
$this->view->gridFields = [
|
||||
[
|
||||
'id' => 'enabled', 'formatter' => 'rowtoggle' ,'width' => '6em', 'heading' => gettext('Enabled')
|
||||
],
|
||||
[
|
||||
'id' => 'sequence','width' => '9em', 'heading' => gettext('Sequence')
|
||||
],
|
||||
[
|
||||
'id' => 'source_net', 'heading' => gettext('Internal IPv6 Prefix')
|
||||
],
|
||||
[
|
||||
'id' => 'destination_net', 'heading' => gettext('External IPv6 Prefix')
|
||||
],
|
||||
[
|
||||
'id' => 'trackif', 'heading' => gettext('Track if')
|
||||
],
|
||||
[
|
||||
'id' => 'description', 'heading' => gettext('Description')
|
||||
]
|
||||
];
|
||||
|
||||
$this->view->formDialogFilterRule = $this->getForm("dialogNptRule");
|
||||
}
|
||||
}
|
||||
-50
@@ -1,50 +0,0 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* Copyright (C) 2020 Deciso B.V.
|
||||
* 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.
|
||||
*/
|
||||
namespace OPNsense\Firewall;
|
||||
|
||||
class SourceNatController extends \OPNsense\Base\IndexController
|
||||
{
|
||||
public function indexAction()
|
||||
{
|
||||
$this->view->pick('OPNsense/Firewall/filter');
|
||||
$this->view->SavePointBtns = true;
|
||||
$this->view->ruleController = "source_nat";
|
||||
$this->view->gridFields = [
|
||||
[
|
||||
'id' => 'enabled', 'formatter' => 'rowtoggle' ,'width' => '6em', 'heading' => gettext('Enabled')
|
||||
],
|
||||
[
|
||||
'id' => 'sequence','width' => '9em', 'heading' => gettext('Sequence')
|
||||
],
|
||||
[
|
||||
'id' => 'description', 'heading' => gettext('Description')
|
||||
]
|
||||
];
|
||||
$this->view->formDialogFilterRule = $this->getForm("dialogSNatRule");
|
||||
}
|
||||
}
|
||||
-114
@@ -1,114 +0,0 @@
|
||||
<form>
|
||||
<field>
|
||||
<id>rule.enabled</id>
|
||||
<label>enabled</label>
|
||||
<type>checkbox</type>
|
||||
<help>Enable this rule</help>
|
||||
</field>
|
||||
<field>
|
||||
<id>rule.sequence</id>
|
||||
<label>Sequence</label>
|
||||
<type>text</type>
|
||||
</field>
|
||||
<field>
|
||||
<id>rule.action</id>
|
||||
<label>Action</label>
|
||||
<type>dropdown</type>
|
||||
<help>Choose what to do with packets that match the criteria specified below.
|
||||
Hint: the difference between block and reject is that with reject, a packet (TCP RST or ICMP port unreachable for UDP) is returned to the sender, whereas with block the packet is dropped silently. In either case, the original packet is discarded.
|
||||
</help>
|
||||
</field>
|
||||
<field>
|
||||
<id>rule.quick</id>
|
||||
<label>Quick</label>
|
||||
<type>checkbox</type>
|
||||
<help>
|
||||
If a packet matches a rule specifying quick, then that rule is considered the last matching rule and the specified action is taken.
|
||||
When a rule does not have quick enabled, the last matching rule wins.
|
||||
</help>
|
||||
</field>
|
||||
<field>
|
||||
<id>rule.interface</id>
|
||||
<label>Interface</label>
|
||||
<type>select_multiple</type>
|
||||
</field>
|
||||
<field>
|
||||
<id>rule.direction</id>
|
||||
<label>Direction</label>
|
||||
<type>dropdown</type>
|
||||
<help>
|
||||
Direction of the traffic. The default policy is to filter inbound traffic, which sets the policy to the interface originally receiving the traffic.
|
||||
</help>
|
||||
</field>
|
||||
<field>
|
||||
<id>rule.ipprotocol</id>
|
||||
<label>TCP/IP Version</label>
|
||||
<type>dropdown</type>
|
||||
</field>
|
||||
<field>
|
||||
<id>rule.protocol</id>
|
||||
<label>Protocol</label>
|
||||
<type>dropdown</type>
|
||||
</field>
|
||||
<field>
|
||||
<id>rule.source_net</id>
|
||||
<label>Source</label>
|
||||
<type>text</type>
|
||||
</field>
|
||||
<field>
|
||||
<id>rule.source_port</id>
|
||||
<label>Source port</label>
|
||||
<type>text</type>
|
||||
<advanced>true</advanced>
|
||||
<help>Source port number or well known name (imap, imaps, http, https, ...), for ranges use a dash</help>
|
||||
</field>
|
||||
<field>
|
||||
<id>rule.source_not</id>
|
||||
<label>Source / Invert</label>
|
||||
<type>checkbox</type>
|
||||
<help>Use this option to invert the sense of the match.</help>
|
||||
</field>
|
||||
<field>
|
||||
<id>rule.destination_net</id>
|
||||
<label>Destination</label>
|
||||
<type>text</type>
|
||||
</field>
|
||||
<field>
|
||||
<id>rule.destination_not</id>
|
||||
<label>Destination / Invert</label>
|
||||
<type>checkbox</type>
|
||||
<help>Use this option to invert the sense of the match.</help>
|
||||
</field>
|
||||
<field>
|
||||
<id>rule.destination_port</id>
|
||||
<label>Destination port</label>
|
||||
<type>text</type>
|
||||
<help>Destination port number or well known name (imap, imaps, http, https, ...), for ranges use a dash</help>
|
||||
</field>
|
||||
<field>
|
||||
<id>rule.gateway</id>
|
||||
<label>Gateway</label>
|
||||
<type>dropdown</type>
|
||||
<help>
|
||||
Leave as 'default' to use the system routing table. Or choose a gateway to utilize policy based routing.
|
||||
</help>
|
||||
</field>
|
||||
<field>
|
||||
<id>rule.log</id>
|
||||
<label>Log</label>
|
||||
<type>checkbox</type>
|
||||
<help>Log packets that are handled by this rule</help>
|
||||
</field>
|
||||
<field>
|
||||
<id>rule.categories</id>
|
||||
<label>Categories</label>
|
||||
<type>select_multiple</type>
|
||||
<style>tokenize</style>
|
||||
<help>For grouping purposes you may select multiple groups here to organize items.</help>
|
||||
</field>
|
||||
<field>
|
||||
<id>rule.description</id>
|
||||
<label>Description</label>
|
||||
<type>text</type>
|
||||
</field>
|
||||
</form>
|
||||
-53
@@ -1,53 +0,0 @@
|
||||
<form>
|
||||
<field>
|
||||
<id>rule.enabled</id>
|
||||
<label>enabled</label>
|
||||
<type>checkbox</type>
|
||||
<help>Enable this rule</help>
|
||||
</field>
|
||||
<field>
|
||||
<id>rule.sequence</id>
|
||||
<label>Sequence</label>
|
||||
<type>text</type>
|
||||
</field>
|
||||
<field>
|
||||
<id>rule.log</id>
|
||||
<label>Log</label>
|
||||
<type>checkbox</type>
|
||||
<help>Log packets that are handled by this rule</help>
|
||||
</field>
|
||||
<field>
|
||||
<id>rule.interface</id>
|
||||
<label>Interface</label>
|
||||
<type>dropdown</type>
|
||||
</field>
|
||||
<field>
|
||||
<id>rule.source_net</id>
|
||||
<label>Internal IPv6 Prefix (source)</label>
|
||||
<type>text</type>
|
||||
</field>
|
||||
<field>
|
||||
<id>rule.destination_net</id>
|
||||
<label>External IPv6 Prefix (target)</label>
|
||||
<type>text</type>
|
||||
<help>Enter the external IPv6 prefix for this network prefix translation. Leave empty to auto-detect the prefix address using the specified tracking interface instead. The prefix size specified for the internal prefix will also be applied to the external prefix.</help>
|
||||
</field>
|
||||
<field>
|
||||
<id>rule.trackif</id>
|
||||
<label>Track interface</label>
|
||||
<type>dropdown</type>
|
||||
<help>Use prefix defined on the selected interface instead of the interface this rule applies to when target prefix is not provided.</help>
|
||||
</field>
|
||||
<field>
|
||||
<id>rule.categories</id>
|
||||
<label>Categories</label>
|
||||
<type>select_multiple</type>
|
||||
<style>tokenize</style>
|
||||
<help>For grouping purposes you may select multiple groups here to organize items.</help>
|
||||
</field>
|
||||
<field>
|
||||
<id>rule.description</id>
|
||||
<label>Description</label>
|
||||
<type>text</type>
|
||||
</field>
|
||||
</form>
|
||||
-101
@@ -1,101 +0,0 @@
|
||||
<form>
|
||||
<field>
|
||||
<id>rule.enabled</id>
|
||||
<label>enabled</label>
|
||||
<type>checkbox</type>
|
||||
<help>Enable this rule</help>
|
||||
</field>
|
||||
<field>
|
||||
<id>rule.nonat</id>
|
||||
<label>Do not NAT</label>
|
||||
<type>checkbox</type>
|
||||
<help>Enabling this option will disable NAT for traffic matching this rule and stop processing Outbound NAT rules.</help>
|
||||
</field>
|
||||
<field>
|
||||
<id>rule.sequence</id>
|
||||
<label>Sequence</label>
|
||||
<type>text</type>
|
||||
</field>
|
||||
<field>
|
||||
<id>rule.interface</id>
|
||||
<label>Interface</label>
|
||||
<type>dropdown</type>
|
||||
</field>
|
||||
<field>
|
||||
<id>rule.ipprotocol</id>
|
||||
<label>TCP/IP Version</label>
|
||||
<type>dropdown</type>
|
||||
</field>
|
||||
<field>
|
||||
<id>rule.protocol</id>
|
||||
<label>Protocol</label>
|
||||
<type>dropdown</type>
|
||||
</field>
|
||||
<field>
|
||||
<id>rule.source_net</id>
|
||||
<label>Source</label>
|
||||
<type>text</type>
|
||||
</field>
|
||||
<field>
|
||||
<id>rule.source_port</id>
|
||||
<label>Source port</label>
|
||||
<type>text</type>
|
||||
<advanced>true</advanced>
|
||||
<help>Source port number or well known name (imap, imaps, http, https, ...), for ranges use a dash</help>
|
||||
</field>
|
||||
<field>
|
||||
<id>rule.source_not</id>
|
||||
<label>Source / Invert</label>
|
||||
<type>checkbox</type>
|
||||
<help>Use this option to invert the sense of the match.</help>
|
||||
</field>
|
||||
<field>
|
||||
<id>rule.destination_net</id>
|
||||
<label>Destination</label>
|
||||
<type>text</type>
|
||||
</field>
|
||||
<field>
|
||||
<id>rule.destination_not</id>
|
||||
<label>Destination / Invert</label>
|
||||
<type>checkbox</type>
|
||||
<help>Use this option to invert the sense of the match.</help>
|
||||
</field>
|
||||
<field>
|
||||
<id>rule.destination_port</id>
|
||||
<label>Destination port</label>
|
||||
<type>text</type>
|
||||
<help>Destination port number or well known name (imap, imaps, http, https, ...), for ranges use a dash</help>
|
||||
</field>
|
||||
<field>
|
||||
<id>rule.target</id>
|
||||
<label>Translation / target</label>
|
||||
<type>text</type>
|
||||
<help>
|
||||
Packets matching this rule will be mapped to the IP address given here.
|
||||
</help>
|
||||
</field>
|
||||
<field>
|
||||
<id>rule.target_port</id>
|
||||
<label>Translation port</label>
|
||||
<type>text</type>
|
||||
<help>Destination port number or well known name (imap, imaps, http, https, ...)</help>
|
||||
</field>
|
||||
<field>
|
||||
<id>rule.log</id>
|
||||
<label>Log</label>
|
||||
<type>checkbox</type>
|
||||
<help>Log packets that are handled by this rule</help>
|
||||
</field>
|
||||
<field>
|
||||
<id>rule.categories</id>
|
||||
<label>Categories</label>
|
||||
<type>select_multiple</type>
|
||||
<style>tokenize</style>
|
||||
<help>For grouping purposes you may select multiple groups here to organize items.</help>
|
||||
</field>
|
||||
<field>
|
||||
<id>rule.description</id>
|
||||
<label>Description</label>
|
||||
<type>text</type>
|
||||
</field>
|
||||
</form>
|
||||
@@ -1,23 +0,0 @@
|
||||
<acl>
|
||||
<page-filter-api>
|
||||
<name>Firewall: Automation: Filter</name>
|
||||
<patterns>
|
||||
<pattern>ui/firewall/filter/*</pattern>
|
||||
<pattern>api/firewall/filter/*</pattern>
|
||||
</patterns>
|
||||
</page-filter-api>
|
||||
<page-filter-snat-api>
|
||||
<name>Firewall: Automation: Source NAT</name>
|
||||
<patterns>
|
||||
<pattern>ui/firewall/source_nat/*</pattern>
|
||||
<pattern>api/firewall/source_nat/*</pattern>
|
||||
</patterns>
|
||||
</page-filter-snat-api>
|
||||
<page-firewall-nat-npt>
|
||||
<name>Firewall: Automation: NPTv6</name>
|
||||
<patterns>
|
||||
<pattern>ui/firewall/npt/*</pattern>
|
||||
<pattern>api/firewall/npt/*</pattern>
|
||||
</patterns>
|
||||
</page-firewall-nat-npt>
|
||||
</acl>
|
||||
-138
@@ -1,138 +0,0 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* Copyright (C) 2020 Deciso B.V.
|
||||
* 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.
|
||||
*/
|
||||
|
||||
namespace OPNsense\Firewall\FieldTypes;
|
||||
|
||||
use OPNsense\Core\Config;
|
||||
use OPNsense\Base\FieldTypes\ArrayField;
|
||||
use OPNsense\Base\FieldTypes\ContainerField;
|
||||
|
||||
/**
|
||||
* Class FilterRuleContainerField
|
||||
* @package OPNsense\Firewall\FieldTypes
|
||||
*/
|
||||
class FilterRuleContainerField extends ContainerField
|
||||
{
|
||||
/**
|
||||
* map rules
|
||||
* @return array
|
||||
*/
|
||||
public function serialize()
|
||||
{
|
||||
$result = array();
|
||||
$map_manual = ['source_net', 'source_not', 'source_port', 'destination_net', 'destination_not',
|
||||
'destination_port', 'enabled', 'description', 'sequence', 'action'];
|
||||
// 1-on-1 map (with type conversion if needed)
|
||||
foreach ($this->iterateItems() as $key => $node) {
|
||||
if (!in_array($key, $map_manual)) {
|
||||
if (is_a($node, "OPNsense\\Base\\FieldTypes\\BooleanField")) {
|
||||
$result[$key] = !empty((string)$node);
|
||||
} elseif (is_a($node, "OPNsense\\Base\\FieldTypes\\ProtocolField")) {
|
||||
if ((string)$node != 'any') {
|
||||
$result[$key] = (string)$node;
|
||||
}
|
||||
} else {
|
||||
$result[$key] = (string)$node;
|
||||
}
|
||||
}
|
||||
}
|
||||
// source / destination mapping
|
||||
$result['source'] = array();
|
||||
if (!empty((string)$this->source_net)) {
|
||||
$result['source']['network'] = (string)$this->source_net;
|
||||
if (!empty((string)$this->source_not)) {
|
||||
$result['source']['not'] = true;
|
||||
}
|
||||
if (!empty((string)$this->source_port)) {
|
||||
$result['source']['port'] = (string)$this->source_port;
|
||||
}
|
||||
}
|
||||
$result['destination'] = array();
|
||||
if (!empty((string)$this->destination_net)) {
|
||||
$result['destination']['network'] = (string)$this->destination_net;
|
||||
if (!empty((string)$this->destination_not)) {
|
||||
$result['destination']['not'] = true;
|
||||
}
|
||||
if (!empty((string)$this->destination_port)) {
|
||||
$result['destination']['port'] = (string)$this->destination_port;
|
||||
}
|
||||
}
|
||||
// field mappings and differences
|
||||
$result['disabled'] = empty((string)$this->enabled);
|
||||
$result['descr'] = (string)$this->description;
|
||||
$result['type'] = (string)$this->action;
|
||||
if (strpos((string)$this->interface, ",") !== false) {
|
||||
$result['floating'] = true;
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* rule priority is threaded equally to the legacy rules, first "floating" then groups and single interface
|
||||
* rules are handled last
|
||||
* @return int priority in the ruleset, sequence should determine sort order.
|
||||
*/
|
||||
public function getPriority()
|
||||
{
|
||||
$configObj = Config::getInstance()->object();
|
||||
$interface = (string)$this->interface;
|
||||
if (strpos($interface, ",") !== false) {
|
||||
// floating (multiple interfaces involved)
|
||||
return 1000;
|
||||
} elseif (
|
||||
!empty($configObj->interfaces) &&
|
||||
!empty($configObj->interfaces->$interface) &&
|
||||
!empty($configObj->interfaces->$interface->type) &&
|
||||
$configObj->interfaces->$interface->type == 'group'
|
||||
) {
|
||||
// group type
|
||||
return 2000;
|
||||
} else {
|
||||
// default
|
||||
return 3000;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Class FilterRuleField
|
||||
* @package OPNsense\Firewall\FieldTypes
|
||||
*/
|
||||
class FilterRuleField extends ArrayField
|
||||
{
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
public function newContainerField($ref, $tagname)
|
||||
{
|
||||
$container_node = new FilterRuleContainerField($ref, $tagname);
|
||||
$parentmodel = $this->getParentModel();
|
||||
$container_node->setParentModel($parentmodel);
|
||||
return $container_node;
|
||||
}
|
||||
}
|
||||
-111
@@ -1,111 +0,0 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* Copyright (C) 2020 Deciso B.V.
|
||||
* 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.
|
||||
*/
|
||||
|
||||
namespace OPNsense\Firewall\FieldTypes;
|
||||
|
||||
use OPNsense\Base\FieldTypes\ArrayField;
|
||||
use OPNsense\Base\FieldTypes\ContainerField;
|
||||
|
||||
/**
|
||||
* Class SourceNatRuleContainerField
|
||||
* @package OPNsense\Firewall\FieldTypes
|
||||
*/
|
||||
class SourceNatRuleContainerField extends ContainerField
|
||||
{
|
||||
/**
|
||||
* map source nat rules
|
||||
* @return array
|
||||
*/
|
||||
public function serialize()
|
||||
{
|
||||
$result = [];
|
||||
$source_mapper = [
|
||||
'enabled' => false,
|
||||
'source_net' => false,
|
||||
'source_not' => false,
|
||||
'source_port' => 'sourceport',
|
||||
'destination_net' => false,
|
||||
'destination_not' => false,
|
||||
'destination_port' => 'dstport',
|
||||
'target_port' => 'natport',
|
||||
'description' => 'descr'
|
||||
];
|
||||
// 1-on-1 map (with type conversion if needed)
|
||||
foreach ($this->iterateItems() as $key => $node) {
|
||||
$target_fieldname = isset($source_mapper[$key]) ? $source_mapper[$key] : $key;
|
||||
if ($target_fieldname) {
|
||||
if (is_a($node, "OPNsense\\Base\\FieldTypes\\BooleanField")) {
|
||||
$result[$target_fieldname] = !empty((string)$node);
|
||||
} elseif (is_a($node, "OPNsense\\Base\\FieldTypes\\ProtocolField")) {
|
||||
if ((string)$node != 'any') {
|
||||
$result[$target_fieldname] = (string)$node;
|
||||
}
|
||||
} else {
|
||||
$result[$target_fieldname] = (string)$node;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$result['disabled'] = empty((string)$this->enabled);
|
||||
// source / destination mapping, doesn't use port construct like it would for rules.
|
||||
$result['source'] = array();
|
||||
if (!empty((string)$this->source_net)) {
|
||||
$result['source']['network'] = (string)$this->source_net;
|
||||
if (!empty((string)$this->source_not)) {
|
||||
$result['source']['not'] = true;
|
||||
}
|
||||
}
|
||||
$result['destination'] = array();
|
||||
if (!empty((string)$this->destination_net)) {
|
||||
$result['destination']['network'] = (string)$this->destination_net;
|
||||
if (!empty((string)$this->destination_not)) {
|
||||
$result['destination']['not'] = true;
|
||||
}
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Class SourceNatRuleField
|
||||
* @package OPNsense\Firewall\FieldTypes
|
||||
*/
|
||||
class SourceNatRuleField extends ArrayField
|
||||
{
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
public function newContainerField($ref, $tagname)
|
||||
{
|
||||
$container_node = new SourceNatRuleContainerField($ref, $tagname);
|
||||
$parentmodel = $this->getParentModel();
|
||||
$container_node->setParentModel($parentmodel);
|
||||
return $container_node;
|
||||
}
|
||||
}
|
||||
@@ -1,164 +0,0 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* Copyright (C) 2020 Deciso B.V.
|
||||
* 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.
|
||||
*/
|
||||
|
||||
namespace OPNsense\Firewall;
|
||||
|
||||
use OPNsense\Core\Config;
|
||||
use Phalcon\Messages\Message;
|
||||
use OPNsense\Base\BaseModel;
|
||||
use OPNsense\Firewall\Util;
|
||||
|
||||
class Filter extends BaseModel
|
||||
{
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
public function performValidation($validateFullModel = false)
|
||||
{
|
||||
$config = Config::getInstance()->object();
|
||||
|
||||
// standard model validations
|
||||
$messages = parent::performValidation($validateFullModel);
|
||||
foreach ([$this->rules->rule, $this->snatrules->rule] as $rules) {
|
||||
foreach ($rules->iterateItems() as $rule) {
|
||||
if ($validateFullModel || $rule->isFieldChanged()) {
|
||||
// port / protocol validation
|
||||
if (!empty((string)$rule->source_port) && !in_array($rule->protocol, ['TCP', 'UDP'])) {
|
||||
$messages->appendMessage(new Message(
|
||||
gettext("Source ports are only valid for tcp or udp type rules."),
|
||||
$rule->source_port->__reference
|
||||
));
|
||||
}
|
||||
if (!empty((string)$rule->destination_port) && !in_array($rule->protocol, ['TCP', 'UDP'])) {
|
||||
$messages->appendMessage(new Message(
|
||||
gettext("Destination ports are only valid for tcp or udp type rules."),
|
||||
$rule->destination_port->__reference
|
||||
));
|
||||
}
|
||||
// validate protocol family
|
||||
$dest_is_addr = Util::isSubnet($rule->destination_net) || Util::isIpAddress($rule->destination_net);
|
||||
$dest_proto = strpos($rule->destination_net, ':') === false ? "inet" : "inet6";
|
||||
if ($dest_is_addr && $dest_proto != $rule->ipprotocol) {
|
||||
$messages->appendMessage(new Message(
|
||||
gettext("Destination address type should match selected TCP/IP protocol version."),
|
||||
$rule->destination_net->__reference
|
||||
));
|
||||
}
|
||||
$src_is_addr = Util::isSubnet($rule->source_net) || Util::isIpAddress($rule->source_net);
|
||||
$src_proto = strpos($rule->source_net, ':') === false ? "inet" : "inet6";
|
||||
if ($src_is_addr && $src_proto != $rule->ipprotocol) {
|
||||
$messages->appendMessage(new Message(
|
||||
gettext("Source address type should match selected TCP/IP protocol version."),
|
||||
$rule->source_net->__reference
|
||||
));
|
||||
}
|
||||
// Additional source nat validations
|
||||
if ($rule->target !== null) {
|
||||
$target_is_addr = Util::isSubnet($rule->target) || Util::isIpAddress($rule->target);
|
||||
$target_proto = strpos($rule->target, ':') === false ? "inet" : "inet6";
|
||||
if ($target_is_addr && $target_proto != $rule->ipprotocol) {
|
||||
$messages->appendMessage(new Message(
|
||||
gettext("Target address type should match selected TCP/IP protocol version."),
|
||||
$rule->target->__reference
|
||||
));
|
||||
}
|
||||
if (!empty((string)$rule->target_port) && !in_array($rule->protocol, ['TCP', 'UDP'])) {
|
||||
$messages->appendMessage(new Message(
|
||||
gettext("Target ports are only valid for tcp or udp type rules."),
|
||||
$rule->target_port->__reference
|
||||
));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
foreach ($this->npt->rule->iterateItems() as $rule) {
|
||||
if ($validateFullModel || $rule->isFieldChanged()) {
|
||||
if (!empty((string)$rule->trackif)) {
|
||||
if (!empty((string)$rule->destination_net)) {
|
||||
$messages->appendMessage(new Message(
|
||||
gettext('A track interface is only allowed without an external prefix.'),
|
||||
$rule->trackif->__reference
|
||||
));
|
||||
}
|
||||
|
||||
if (
|
||||
(empty($config->interfaces->{$rule->interface}->ipaddrv6) ||
|
||||
$config->interfaces->{$rule->interface}->ipaddrv6 != 'dhcp6') ||
|
||||
empty($config->interfaces->{$rule->trackif}->{'track6-interface'}) ||
|
||||
$config->interfaces->{$rule->trackif}->{'track6-interface'} != (string)$rule->interface
|
||||
) {
|
||||
$messages->appendMessage(new Message(
|
||||
gettext('This interface is not tracking the current rule interface.'),
|
||||
$rule->trackif->__reference
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
if (!empty((string)$rule->destination_net) && !empty((string)$rule->source_net)) {
|
||||
/* defaults to /128 */
|
||||
$dparts = explode('/', (string)$rule->destination_net . '/128');
|
||||
$sparts = explode('/', (string)$rule->source_net . '/128');
|
||||
if ($dparts[1] != $sparts[1]) {
|
||||
$messages->appendMessage(new Message(
|
||||
gettext("External subnet should match internal subnet."),
|
||||
$rule->destination_net->__reference
|
||||
));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return $messages;
|
||||
}
|
||||
|
||||
/**
|
||||
* Rollback this model to a previous version.
|
||||
* Make sure to remove this object afterwards, since its contents won't be updated.
|
||||
* @param $revision float|string revision number
|
||||
* @return bool action performed (backup revision existed)
|
||||
*/
|
||||
public function rollback($revision)
|
||||
{
|
||||
$filename = Config::getInstance()->getBackupFilename($revision);
|
||||
if ($filename) {
|
||||
// fiddle with the dom, copy OPNsense->Firewall->Filter from backup to current config
|
||||
$sourcexml = simplexml_load_file($filename);
|
||||
if ($sourcexml->OPNsense->Firewall->Filter) {
|
||||
$sourcedom = dom_import_simplexml($sourcexml->OPNsense->Firewall->Filter);
|
||||
$targetxml = Config::getInstance()->object();
|
||||
$targetdom = dom_import_simplexml($targetxml->OPNsense->Firewall->Filter);
|
||||
$node = $targetdom->ownerDocument->importNode($sourcedom, true);
|
||||
$targetdom->parentNode->replaceChild($node, $targetdom);
|
||||
Config::getInstance()->save();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user