From 5319b8e53bfc1267bb3cfcddf29ec3e9f1fa82fb Mon Sep 17 00:00:00 2001 From: Ad Schellevis Date: Mon, 31 Oct 2016 19:03:07 +0100 Subject: [PATCH] (filter) move out some more static rules --- src/etc/inc/filter.inc | 21 --------------- src/etc/inc/filter.lib.inc | 27 +++++++++++++++++++ .../library/OPNsense/Firewall/FilterRule.php | 21 ++++++++++----- 3 files changed, 41 insertions(+), 28 deletions(-) diff --git a/src/etc/inc/filter.inc b/src/etc/inc/filter.inc index b3ad0f6bf..b7dcc01e8 100644 --- a/src/etc/inc/filter.inc +++ b/src/etc/inc/filter.inc @@ -2503,27 +2503,6 @@ function filter_rules_generate(&$FilterIflist) $log['pass'] = !isset($config['syslog']['nologdefaultpass']) ? "log" : ""; $ipfrules .= <<'inet46', 'label' => 'Default deny rule', 'quick' => false), $defaults['block'] ); + + // IPv6 ICMP requirements + $fw->registerFilterRule(1, + array('ipprotocol'=>'inet6', 'protocol' => 'ipv6-icmp', 'icmp6-type' => '1,2,135,136', + 'statetype' => 'keep', 'label' => 'IPv6 requirements (ICMP)'), + $defaults['pass'] + ); + // Allow only bare essential icmpv6 packets + $fw->registerFilterRule(1, + array('ipprotocol'=>'inet6', 'protocol' => 'ipv6-icmp', 'icmp6-type' => '129,133,134,135,136', + 'statetype' => 'keep', 'label' => 'IPv6 requirements (ICMP)', 'from' => 'fe80::/10', + 'to' => 'fe80::/10,ff02::/16', 'direction' => 'out' ), + $defaults['pass'] + ); + $fw->registerFilterRule(1, + array('ipprotocol'=>'inet6', 'protocol' => 'ipv6-icmp', 'icmp6-type' => '128,133,134,135,136', + 'statetype' => 'keep', 'label' => 'IPv6 requirements (ICMP)', 'from' => 'fe80::/10', + 'to' => 'fe80::/10,ff02::/16', 'direction' => 'in' ), + $defaults['pass'] + ); + $fw->registerFilterRule(1, + array('ipprotocol'=>'inet6', 'protocol' => 'ipv6-icmp', 'icmp6-type' => '128,133,134,135,136', + 'statetype' => 'keep', 'label' => 'IPv6 requirements (ICMP)', 'from' => 'ff02::/16', + 'to' => 'fe80::/10', 'direction' => 'in' ), + $defaults['pass'] + ); + } diff --git a/src/opnsense/mvc/app/library/OPNsense/Firewall/FilterRule.php b/src/opnsense/mvc/app/library/OPNsense/Firewall/FilterRule.php index 41161a746..35a866efa 100644 --- a/src/opnsense/mvc/app/library/OPNsense/Firewall/FilterRule.php +++ b/src/opnsense/mvc/app/library/OPNsense/Firewall/FilterRule.php @@ -41,14 +41,15 @@ class FilterRule private $procorder = array( 'disabled' => 'parseIsComment', 'type' => 'parseType', + 'direction' => 'parseReplaceSimple,any:', 'log' => 'parseBool,log', 'quick' => 'parseBool,quick', 'interface' => 'parseInterface', 'ipprotocol' => 'parsePlain', - 'protocol' => 'parseReplaceSimple,tcp/udp:{tcp udp}', - 'from' => 'parsePlain', - 'to' => 'parsePlain', - 'icmp6-type' => 'parsePlain,{,}', + 'protocol' => 'parseReplaceSimple,tcp/udp:{tcp udp},proto ', + 'from' => 'parsePlain,from {,}', + 'to' => 'parsePlain,to {,}', + 'icmp6-type' => 'parsePlain,icmp6-type {,}', 'state' => 'parseState', 'label' => 'parsePlain,label ","' ); @@ -79,15 +80,21 @@ class FilterRule * @param string $map * @return string */ - private function parseReplaceSimple($value, $map) + private function parseReplaceSimple($value, $map, $prefix="", $suffix="") { + $retval = $value; foreach (explode('|', $map) as $item) { $tmp = explode(':', $item); if ($tmp[0] == $value) { - return $tmp[1] . " "; + $retval = $tmp[1] . " "; + break; } } - return $value . " "; + if (!empty($retval)) { + return $prefix . $retval . $suffix . " "; + } else { + return ""; + } } /**