From c719dc0b1dd696e0cd6b51f09ee13c8263375f7c Mon Sep 17 00:00:00 2001 From: tbrehm <t.brehm@ispconfig.org> Date: Wed, 07 Sep 2011 05:57:38 -0400 Subject: [PATCH] Fixed a warning in maildrop plugin. --- server/plugins-available/ufw_firewall_plugin.inc.php | 1008 +++++++++++++++++++++++++++++----------------------------- 1 files changed, 504 insertions(+), 504 deletions(-) diff --git a/server/plugins-available/ufw_firewall_plugin.inc.php b/server/plugins-available/ufw_firewall_plugin.inc.php index 4eb1e1f..be10cf6 100644 --- a/server/plugins-available/ufw_firewall_plugin.inc.php +++ b/server/plugins-available/ufw_firewall_plugin.inc.php @@ -1,504 +1,504 @@ -<?php - -/* -Copyright (c) 2007, Till Brehm, projektfarm Gmbh -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - * 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. - * Neither the name of ISPConfig nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT OWNER OR CONTRIBUTORS 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. -*/ - -class ufw_firewall_plugin { - - var $plugin_name = 'ufw_firewall_plugin'; - var $class_name = 'ufw_firewall_plugin'; - - //* This function is called during ispconfig installation to determine - // if a symlink shall be created for this plugin. - function onInstall() { - global $conf; - if ($conf['ufw']['installed'] == true && $conf['services']['firewall'] == true) { - return true; - } else { - return false; - } - - } - - - /* - This function is called when the plugin is loaded - */ - - function onLoad() { - global $app; - - /* - Register for the events - */ - - $app->plugins->registerEvent('firewall_insert',$this->plugin_name,'insert_basic'); - $app->plugins->registerEvent('firewall_update',$this->plugin_name,'update_basic'); - $app->plugins->registerEvent('firewall_delete',$this->plugin_name,'update_basic'); - - $app->plugins->registerEvent('firewall_forward_insert',$this->plugin_name,'insert_forward'); - $app->plugins->registerEvent('firewall_forward_update',$this->plugin_name,'update_forward'); - $app->plugins->registerEvent('firewall_forward_delete',$this->plugin_name,'update_forward'); - - $app->plugins->registerEvent('firewall_filter_insert',$this->plugin_name,'insert_filter'); - $app->plugins->registerEvent('firewall_filter_update',$this->plugin_name,'update_filter'); - $app->plugins->registerEvent('firewall_filter_delete',$this->plugin_name,'delete_filter'); - - $app->plugins->registerEvent('server_insert',$this->plugin_name,'updateSettings'); - $app->plugins->registerEvent('server_update',$this->plugin_name,'updateSettings'); - - - - } - - - function insert_basic($event_name,$data) { - global $app, $conf; - - $this->update_basic($event_name,$data); - - } - - function update_basic($event_name,$data) { - global $app, $conf; - - $tcp_ports = ''; - $udp_ports = ''; - - $delete_rule = ($data["new"]["active"] == "n" ? "delete " : ""); - /* - $ports = explode(',',$data["new"]["tcp_port"]); - if(is_array($ports)) { - foreach($ports as $p) { - if(strstr($p,':')) { - $p_parts = explode(':',$p); - $p_clean = intval($p_parts[0]).':'.intval($p_parts[1]); - } else { - $p_clean = intval($p); - } - - //system("ufw $delete_rule allow " . $p_clean . "/tcp"); - - } - }*/ - - system("ufw $delete_rule allow out" . $data["new"]["tcp_port"] . "/tcp"); - system("ufw $delete_rule allow in" . $data["new"]["tcp_port"] . "/tcp"); - system("ufw $delete_rule allow out" . $data["new"]["udp_port"] . "/udp"); - system("ufw $delete_rule allow in" . $data["new"]["udp_port"] . "/udp"); - //$tcp_ports = trim($tcp_ports); - /* - $ports = explode(',',$data["new"]["udp_port"]); - if(is_array($ports)) { - foreach($ports as $p) { - if(strstr($p,':')) { - $p_parts = explode(':',$p); - $p_clean = intval($p_parts[0]).':'.intval($p_parts[1]); - } else { - $p_clean = intval($p); - } - - - } - } - - system("ufw $delete_rule allow " . $p_clean . "/udp"); - */ - - if($data["new"]["active"] == 'y') { - exec('/etc/init.d/ufw force-reload'); - $app->log('Restarting the firewall',LOGLEVEL_DEBUG); - } else { - exec('/etc/init.d/ufw force-reload'); - $app->log('Flushing the firewall',LOGLEVEL_DEBUG); - } - - - } - - - function insert_filter($event_name,$data) { - global $app, $conf; - - $this->update_filter($event_name,$data); - - } - - function getCidr($mask) { - $long = ip2long($mask); - $base = ip2long('255.255.255.255'); - return 32-log(($long ^ $base)+1,2); - } - - function update_filter($event_name,$data) { - global $app, $conf; - - $app->uses("getconf"); - $server_config = $app->getconf->get_server_config($conf["server_id"], 'ufw'); - $network = $server_config["ufw_network"]; - - $records = $app->db->queryAllRecords( - "SELECT - protocol, - IF - (src_from_port=src_to_port, src_from_port, CONCAT(src_from_port, ':',src_to_port)) - AS - src_port, - IF - (dst_from_port=dst_to_port, dst_from_port, CONCAT(dst_from_port, ':',dst_to_port)) - AS - dst_port, - IF - (src_ip='0.0.0.0','any',src_ip) - AS - src_ip, - IF - (dst_ip='0.0.0.0','any',dst_ip) - AS - dst_ip, - src_netmask, - dst_netmask, - inbound_policy, - outbound_policy, - rule_id, - active - FROM - firewall_filter - ORDER BY - rule_id - ASC"); - - $commands = array(); - foreach ($records as $record) { - $src_netmask = $this->getCidr($record["src_netmask"]); - $dst_netmask = $this->getCidr($record["dst_netmask"]); - $src_port = ($record["src_port"] == "0:65535" ? "" : " port " .$record["src_port"]); - $dst_port = ($record["dst_port"] == "0:65535" ? "" : " port " . $record["dst_port"]); - $src_ip = ($record["src_ip"] == "any" ? "any" : $record["src_ip"] . "/" . $src_netmask); - $dst_ip = ($record["dst_ip"] == "any" ? "any" : $record["dst_ip"] . "/" . $dst_netmask); - //$protocol = $record["protocol"]; - $delete = ($record["active"] == "n" ? true : false); - //$protocols = array_split($record["protocol"]); - //$inbound = ($record["inbound"] == 0 ? "deny " : "allow"); - //$outbound = ($record["outbound"] == 0 ? "deny out" : "allow out"); - - //foreach ($protocols as $protocol) { - - - $ufw = new UFW(); - //$ufw->setDelete($record["active"] == "n"); - $ufw->setRuleID($record["rule_id"]); - $ufw->setSrcIP($src_ip); - $ufw->setDstIP($dst_ip); - $ufw->setSrcPort($src_port); - $ufw->setDstPort($dst_port); - $ufw->setInboundPolicy($record["inbound_policy"]); - $ufw->setOutboundPolicy($record["outbound_policy"]); - $ufw->setProtocol($record["protocol"]); - $ufw->setNetwork($network); - - if ($delete) { - $ufw->delete(); - } else { - $ufw->insert(); - } - //} - - /* - if ($record["active"] == 'n') { - $inbound = ($record["inbound"] == 0 ? "deny " : "allow"); - $outbound = ($record["outbound"] == 0 ? "deny out" : "allow out"); - array_push($commands, "ufw deny proto udp from $src_ip $src_port to $dst_ip $dst_port"); - if ($protocol == "tcp/udp") { - array_push($commands, "ufw delete $inbound proto udp from $src_ip $src_port to $dst_ip $dst_port"); - array_push($commands, "ufw delete $outbound proto udp from $src_ip $src_port to $dst_ip $dst_port"); - array_push($commands, "ufw delete $inbound proto tcp from $src_ip $src_port to $dst_ip $dst_port"); - array_push($commands, "ufw delete $outbound proto tcp from $src_ip $src_port to $dst_ip $dst_port"); - } else { - array_push($commands, "ufw delete $inbound proto $protocol from $src_ip $src_port to $dst_ip $dst_port"); - array_push($commands, "ufw delete $outbound proto $protocol from $src_ip $src_port to $dst_ip $dst_port"); - } - } elseif ($record["inbound"] == 0) { - if ($protocol == "tcp/udp") { - array_push($commands, "ufw deny proto udp from $src_ip $src_port to $dst_ip $dst_port"); - array_push($commands, "ufw deny proto tcp from $src_ip $src_port to $dst_ip $dst_port"); - } else { - array_push($commands, "ufw deny proto $protocol from $src_ip $src_port to $dst_ip $dst_port"); - } - - } elseif ($record["outbound"] == 0) { - if ($protocol == "tcp/udp") { - array_push($commands, "ufw deny out proto udp from $network to any $dst_port"); - array_push($commands, "ufw deny out proto tcp from $network to any $dst_port"); - } else { - array_push($commands, "ufw deny out proto $protocol from $network to any $dst_port"); - } - }*/ - - - } - - /* - - $records = $app->db->queryAllRecords( - "SELECT - protocol, - IF - (src_from_port=src_to_port, src_from_port, CONCAT(src_from_port, ':',src_to_port)) - AS - src_port, - IF - (dst_from_port=dst_to_port, dst_from_port, CONCAT(dst_from_port, ':',dst_to_port)) - AS - dst_port, - IF - (src_ip='0.0.0.0','any',src_ip) - AS - src_ip, - IF - (dst_ip='0.0.0.0','any',dst_ip) - AS - dst_ip, - src_netmask, - dst_netmask, - inbound, - outbound, - active - FROM - firewall_filter - WHERE - inbound=1 - OR - outbound=1 - AND - active='y'"); - - - foreach ($records as $record) { - $src_netmask = $this->getCidr($record["src_netmask"]); - $dst_netmask = $this->getCidr($record["dst_netmask"]); - $src_port = ($record["src_port"] == "0:65535" ? "" : " port " .$record["src_port"]); - $dst_port = ($record["dst_port"] == "0:65535" ? "" : " port " . $record["dst_port"]); - $src_ip = ($record["src_ip"] == "any" ? "any" : $record["src_ip"] . "/" . $src_netmask); - $dst_ip = ($record["dst_ip"] == "any" ? "any" : $record["dst_ip"] . "/" . $dst_netmask); - $protocol = $record["protocol"]; - $outbound = ($record["outbound"] == 1 ? "out" : ""); - - - - if ($record["inbound"] == 1) { - if ($protocol == "tcp/udp") { - array_push($commands, "ufw allow proto udp from $src_ip $src_port to $dst_ip $dst_port"); - array_push($commands, "ufw allow proto tcp from $src_ip $src_port to $dst_ip $dst_port"); - } else { - array_push($commands, "ufw allow proto $protocol from $src_ip $src_port to $dst_ip $dst_port"); - } - - } elseif ($record["outbound"] == 1) { - if ($protocol == "tcp/udp") { - array_push($commands, "ufw allow out proto udp from $network to any $dst_port"); - array_push($commands, "ufw allow out proto tcp from $network to any $dst_port"); - } else { - array_push($commands, "ufw allow out proto $protocol from $network to any $dst_port"); - } - } - - - } - - foreach ($commands as $command) { - system($command); - } - */ - } - - function insert_forward($event_name,$data) { - global $app, $conf; - - $this->update_filter($event_name,$data); - - } - - function update_forward($event_name,$data) { - global $app, $conf; - - - - } - - //update server config - - function backupConfigs() - { - copy('/etc/default/ufw','/etc/default/ufw~'); - copy('/etc/ufw/ufw.conf','/etc/ufw/ufw.conf~'); - copy('/etc/ufw/before.rules','/etc/ufw/before.rules~'); - } - - function updateSettings($event_name,$data) { - global $app, $conf; - - // get the config - $app->uses("getconf"); - $server_config = $app->getconf->get_server_config($conf["server_id"], 'ufw'); - - - if(is_dir('/etc/ufw') && is_file('/etc/default/ufw')) { - $this->backupConfigs(); - - $app->load('tpl'); - - $ufw_tpl = new tpl(); - $ufw_tpl->newTemplate("ufw.conf.master"); - - $ufw_tpl->setVar('enable',($server_config["ufw_enable"] == "" ? "no" : $server_config["ufw_enable"])); - $ufw_tpl->setVar('log_level',$server_config["ufw_log_level"]); - - - file_put_contents('/etc/ufw/ufw.conf',$ufw_tpl->grab()); - unset($ufw_tpl); - - $app->log("Changed UFW settings",LOGLEVEL_DEBUG); - - $ufw_tpl = new tpl(); - $ufw_tpl->newTemplate("ufw.default.master"); - - $ufw_tpl->setVar('ipv6',$server_config["ufw_ipv6"] == "" ? "no" : $server_config["ufw_ipv6"]); - $ufw_tpl->setVar('default_input_policy',$server_config["ufw_default_input_policy"]); - $ufw_tpl->setVar('default_output_policy',$server_config["ufw_default_output_policy"]); - $ufw_tpl->setVar('default_forward_policy',$server_config["ufw_default_forward_policy"]); - $ufw_tpl->setVar('default_application_policy',$server_config["ufw_default_application_policy"]); - $ufw_tpl->setVar('manage_builtins',$server_config["ufw_manage_builtins"] == "" ? "no" : $server_config["ufw_manage_builtins"]); - - file_put_contents('/etc/default/ufw',$ufw_tpl->grab()); - unset($ufw_tpl); - - $app->log("Changed default UFW settings",LOGLEVEL_DEBUG); - - $app->services->restartServiceDelayed('ufw','--force-reload'); - - } else { - $app->log("Ubuntu Uncomplicated Firewall configuration not available for this linux distribution.",LOGLEVEL_DEBUG); - } - - } - - - - -} // end class - -class UFW { - - var $_delete = false; - var $_ufwCmd = "ufw"; - var $_inboundPolicy = "allow"; - var $_outboundPolicy = "allow"; - var $_protocol = "tcp"; - var $_ruleID = 1; - var $_srcIP; - var $_dstIP; - var $_srcPort; - var $_dstPort; - var $_network = "0.0.0.0/24"; - - function UFW() { - - } - - function setDelete($delete) { - $this->_delete = $delete; - } - - function setInboundPolicy($policy) { - $this->_inboundPolicy = $policy; - } - - function setOutboundPolicy($policy) { - $this->_outboundPolicy = $policy; - } - - function setProtocol($protocol) { - $this->_outboundPolicy = $protocol; - } - - function setRuleID($id) { - $this->_ruleID = $id; - } - - function setSrcIP($ip) { - $this->_srcIP = $ip; - } - - function setDstIP($ip) { - $this->_dstIP = $ip; - } - - function setSrcPort($port) { - $this->_srcPort = $port; - } - - function setDstPort($port) { - $this->_dstPort = $port; - } - - function setNetwork($network) { - $this->_network = $network; - } - - - function insert() { - $protocols = split("/",$this->_protocol); - foreach ($protocols as $protocol) { - $inbound = sprintf("ufw insert %s %s proto %s from %s port %s to %s port %s ", $this->_ruleID, $this->_inboundPolicy, $protocol, $this->_srcIP, $this->_srcPort, $this->_dstIP, $this->_dstPort); - $outbound = sprintf("ufw insert %s %s proto %s from %s port %s to %s port %s ", $this->_ruleID, $this->_outboundPolicy, $protocol, $this->_network, $this->_srcPort, $this->_dstIP, $this->_dstPort); - - echo $inbound."\n"; - echo $outbound."\n"; - system($inbound); - system($outbound); - } - } - - function delete() { - $protocols = split("/",$this->_protocol); - foreach ($protocols as $protocol) { - $inbound = sprintf("ufw delete %s proto %s from %s port %s to %s port %s ", $this->_ruleID, $this->_inboundPolicy, $protocol, $this->_srcIP, $this->_srcPort, $this->_dstIP, $this->_dstPort); - $outbound = sprintf("ufw delete %s proto %s from %s port %s to %s port %s ", $this->_ruleID, $this->_outboundPolicy, $protocol, $this->_network, $this->_srcPort, $this->_dstIP, $this->_dstPort); - - echo $inbound."\n"; - echo $outbound."\n"; - - system($inbound); - system($outbound); - } - } - -} - -?> +<?php + +/* +Copyright (c) 2007, Till Brehm, projektfarm Gmbh +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + * 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. + * Neither the name of ISPConfig nor the names of its contributors + may be used to endorse or promote products derived from this software without + specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT OWNER OR CONTRIBUTORS 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. +*/ + +class ufw_firewall_plugin { + + var $plugin_name = 'ufw_firewall_plugin'; + var $class_name = 'ufw_firewall_plugin'; + + //* This function is called during ispconfig installation to determine + // if a symlink shall be created for this plugin. + function onInstall() { + global $conf; + if ($conf['ufw']['installed'] == true && $conf['services']['firewall'] == true) { + return true; + } else { + return false; + } + + } + + + /* + This function is called when the plugin is loaded + */ + + function onLoad() { + global $app; + + /* + Register for the events + */ + + $app->plugins->registerEvent('firewall_insert',$this->plugin_name,'insert_basic'); + $app->plugins->registerEvent('firewall_update',$this->plugin_name,'update_basic'); + $app->plugins->registerEvent('firewall_delete',$this->plugin_name,'update_basic'); + + $app->plugins->registerEvent('firewall_forward_insert',$this->plugin_name,'insert_forward'); + $app->plugins->registerEvent('firewall_forward_update',$this->plugin_name,'update_forward'); + $app->plugins->registerEvent('firewall_forward_delete',$this->plugin_name,'update_forward'); + + $app->plugins->registerEvent('firewall_filter_insert',$this->plugin_name,'insert_filter'); + $app->plugins->registerEvent('firewall_filter_update',$this->plugin_name,'update_filter'); + $app->plugins->registerEvent('firewall_filter_delete',$this->plugin_name,'delete_filter'); + + $app->plugins->registerEvent('server_insert',$this->plugin_name,'updateSettings'); + $app->plugins->registerEvent('server_update',$this->plugin_name,'updateSettings'); + + + + } + + + function insert_basic($event_name,$data) { + global $app, $conf; + + $this->update_basic($event_name,$data); + + } + + function update_basic($event_name,$data) { + global $app, $conf; + + $tcp_ports = ''; + $udp_ports = ''; + + $delete_rule = ($data["new"]["active"] == "n" ? "delete " : ""); + /* + $ports = explode(',',$data["new"]["tcp_port"]); + if(is_array($ports)) { + foreach($ports as $p) { + if(strstr($p,':')) { + $p_parts = explode(':',$p); + $p_clean = intval($p_parts[0]).':'.intval($p_parts[1]); + } else { + $p_clean = intval($p); + } + + //system("ufw $delete_rule allow " . $p_clean . "/tcp"); + + } + }*/ + + system("ufw $delete_rule allow out" . $data["new"]["tcp_port"] . "/tcp"); + system("ufw $delete_rule allow in" . $data["new"]["tcp_port"] . "/tcp"); + system("ufw $delete_rule allow out" . $data["new"]["udp_port"] . "/udp"); + system("ufw $delete_rule allow in" . $data["new"]["udp_port"] . "/udp"); + //$tcp_ports = trim($tcp_ports); + /* + $ports = explode(',',$data["new"]["udp_port"]); + if(is_array($ports)) { + foreach($ports as $p) { + if(strstr($p,':')) { + $p_parts = explode(':',$p); + $p_clean = intval($p_parts[0]).':'.intval($p_parts[1]); + } else { + $p_clean = intval($p); + } + + + } + } + + system("ufw $delete_rule allow " . $p_clean . "/udp"); + */ + + if($data["new"]["active"] == 'y') { + exec('/etc/init.d/ufw force-reload'); + $app->log('Restarting the firewall',LOGLEVEL_DEBUG); + } else { + exec('/etc/init.d/ufw force-reload'); + $app->log('Flushing the firewall',LOGLEVEL_DEBUG); + } + + + } + + + function insert_filter($event_name,$data) { + global $app, $conf; + + $this->update_filter($event_name,$data); + + } + + function getCidr($mask) { + $long = ip2long($mask); + $base = ip2long('255.255.255.255'); + return 32-log(($long ^ $base)+1,2); + } + + function update_filter($event_name,$data) { + global $app, $conf; + + $app->uses("getconf"); + $server_config = $app->getconf->get_server_config($conf["server_id"], 'ufw'); + $network = $server_config["ufw_network"]; + + $records = $app->db->queryAllRecords( + "SELECT + protocol, + IF + (src_from_port=src_to_port, src_from_port, CONCAT(src_from_port, ':',src_to_port)) + AS + src_port, + IF + (dst_from_port=dst_to_port, dst_from_port, CONCAT(dst_from_port, ':',dst_to_port)) + AS + dst_port, + IF + (src_ip='0.0.0.0','any',src_ip) + AS + src_ip, + IF + (dst_ip='0.0.0.0','any',dst_ip) + AS + dst_ip, + src_netmask, + dst_netmask, + inbound_policy, + outbound_policy, + rule_id, + active + FROM + firewall_filter + ORDER BY + rule_id + ASC"); + + $commands = array(); + foreach ($records as $record) { + $src_netmask = $this->getCidr($record["src_netmask"]); + $dst_netmask = $this->getCidr($record["dst_netmask"]); + $src_port = ($record["src_port"] == "0:65535" ? "" : " port " .$record["src_port"]); + $dst_port = ($record["dst_port"] == "0:65535" ? "" : " port " . $record["dst_port"]); + $src_ip = ($record["src_ip"] == "any" ? "any" : $record["src_ip"] . "/" . $src_netmask); + $dst_ip = ($record["dst_ip"] == "any" ? "any" : $record["dst_ip"] . "/" . $dst_netmask); + //$protocol = $record["protocol"]; + $delete = ($record["active"] == "n" ? true : false); + //$protocols = array_split($record["protocol"]); + //$inbound = ($record["inbound"] == 0 ? "deny " : "allow"); + //$outbound = ($record["outbound"] == 0 ? "deny out" : "allow out"); + + //foreach ($protocols as $protocol) { + + + $ufw = new UFW(); + //$ufw->setDelete($record["active"] == "n"); + $ufw->setRuleID($record["rule_id"]); + $ufw->setSrcIP($src_ip); + $ufw->setDstIP($dst_ip); + $ufw->setSrcPort($src_port); + $ufw->setDstPort($dst_port); + $ufw->setInboundPolicy($record["inbound_policy"]); + $ufw->setOutboundPolicy($record["outbound_policy"]); + $ufw->setProtocol($record["protocol"]); + $ufw->setNetwork($network); + + if ($delete) { + $ufw->delete(); + } else { + $ufw->insert(); + } + //} + + /* + if ($record["active"] == 'n') { + $inbound = ($record["inbound"] == 0 ? "deny " : "allow"); + $outbound = ($record["outbound"] == 0 ? "deny out" : "allow out"); + array_push($commands, "ufw deny proto udp from $src_ip $src_port to $dst_ip $dst_port"); + if ($protocol == "tcp/udp") { + array_push($commands, "ufw delete $inbound proto udp from $src_ip $src_port to $dst_ip $dst_port"); + array_push($commands, "ufw delete $outbound proto udp from $src_ip $src_port to $dst_ip $dst_port"); + array_push($commands, "ufw delete $inbound proto tcp from $src_ip $src_port to $dst_ip $dst_port"); + array_push($commands, "ufw delete $outbound proto tcp from $src_ip $src_port to $dst_ip $dst_port"); + } else { + array_push($commands, "ufw delete $inbound proto $protocol from $src_ip $src_port to $dst_ip $dst_port"); + array_push($commands, "ufw delete $outbound proto $protocol from $src_ip $src_port to $dst_ip $dst_port"); + } + } elseif ($record["inbound"] == 0) { + if ($protocol == "tcp/udp") { + array_push($commands, "ufw deny proto udp from $src_ip $src_port to $dst_ip $dst_port"); + array_push($commands, "ufw deny proto tcp from $src_ip $src_port to $dst_ip $dst_port"); + } else { + array_push($commands, "ufw deny proto $protocol from $src_ip $src_port to $dst_ip $dst_port"); + } + + } elseif ($record["outbound"] == 0) { + if ($protocol == "tcp/udp") { + array_push($commands, "ufw deny out proto udp from $network to any $dst_port"); + array_push($commands, "ufw deny out proto tcp from $network to any $dst_port"); + } else { + array_push($commands, "ufw deny out proto $protocol from $network to any $dst_port"); + } + }*/ + + + } + + /* + + $records = $app->db->queryAllRecords( + "SELECT + protocol, + IF + (src_from_port=src_to_port, src_from_port, CONCAT(src_from_port, ':',src_to_port)) + AS + src_port, + IF + (dst_from_port=dst_to_port, dst_from_port, CONCAT(dst_from_port, ':',dst_to_port)) + AS + dst_port, + IF + (src_ip='0.0.0.0','any',src_ip) + AS + src_ip, + IF + (dst_ip='0.0.0.0','any',dst_ip) + AS + dst_ip, + src_netmask, + dst_netmask, + inbound, + outbound, + active + FROM + firewall_filter + WHERE + inbound=1 + OR + outbound=1 + AND + active='y'"); + + + foreach ($records as $record) { + $src_netmask = $this->getCidr($record["src_netmask"]); + $dst_netmask = $this->getCidr($record["dst_netmask"]); + $src_port = ($record["src_port"] == "0:65535" ? "" : " port " .$record["src_port"]); + $dst_port = ($record["dst_port"] == "0:65535" ? "" : " port " . $record["dst_port"]); + $src_ip = ($record["src_ip"] == "any" ? "any" : $record["src_ip"] . "/" . $src_netmask); + $dst_ip = ($record["dst_ip"] == "any" ? "any" : $record["dst_ip"] . "/" . $dst_netmask); + $protocol = $record["protocol"]; + $outbound = ($record["outbound"] == 1 ? "out" : ""); + + + + if ($record["inbound"] == 1) { + if ($protocol == "tcp/udp") { + array_push($commands, "ufw allow proto udp from $src_ip $src_port to $dst_ip $dst_port"); + array_push($commands, "ufw allow proto tcp from $src_ip $src_port to $dst_ip $dst_port"); + } else { + array_push($commands, "ufw allow proto $protocol from $src_ip $src_port to $dst_ip $dst_port"); + } + + } elseif ($record["outbound"] == 1) { + if ($protocol == "tcp/udp") { + array_push($commands, "ufw allow out proto udp from $network to any $dst_port"); + array_push($commands, "ufw allow out proto tcp from $network to any $dst_port"); + } else { + array_push($commands, "ufw allow out proto $protocol from $network to any $dst_port"); + } + } + + + } + + foreach ($commands as $command) { + system($command); + } + */ + } + + function insert_forward($event_name,$data) { + global $app, $conf; + + $this->update_filter($event_name,$data); + + } + + function update_forward($event_name,$data) { + global $app, $conf; + + + + } + + //update server config + + function backupConfigs() + { + copy('/etc/default/ufw','/etc/default/ufw~'); + copy('/etc/ufw/ufw.conf','/etc/ufw/ufw.conf~'); + copy('/etc/ufw/before.rules','/etc/ufw/before.rules~'); + } + + function updateSettings($event_name,$data) { + global $app, $conf; + + // get the config + $app->uses("getconf"); + $server_config = $app->getconf->get_server_config($conf["server_id"], 'ufw'); + + + if(is_dir('/etc/ufw') && is_file('/etc/default/ufw')) { + $this->backupConfigs(); + + $app->load('tpl'); + + $ufw_tpl = new tpl(); + $ufw_tpl->newTemplate("ufw.conf.master"); + + $ufw_tpl->setVar('enable',($server_config["ufw_enable"] == "" ? "no" : $server_config["ufw_enable"])); + $ufw_tpl->setVar('log_level',$server_config["ufw_log_level"]); + + + file_put_contents('/etc/ufw/ufw.conf',$ufw_tpl->grab()); + unset($ufw_tpl); + + $app->log("Changed UFW settings",LOGLEVEL_DEBUG); + + $ufw_tpl = new tpl(); + $ufw_tpl->newTemplate("ufw.default.master"); + + $ufw_tpl->setVar('ipv6',$server_config["ufw_ipv6"] == "" ? "no" : $server_config["ufw_ipv6"]); + $ufw_tpl->setVar('default_input_policy',$server_config["ufw_default_input_policy"]); + $ufw_tpl->setVar('default_output_policy',$server_config["ufw_default_output_policy"]); + $ufw_tpl->setVar('default_forward_policy',$server_config["ufw_default_forward_policy"]); + $ufw_tpl->setVar('default_application_policy',$server_config["ufw_default_application_policy"]); + $ufw_tpl->setVar('manage_builtins',$server_config["ufw_manage_builtins"] == "" ? "no" : $server_config["ufw_manage_builtins"]); + + file_put_contents('/etc/default/ufw',$ufw_tpl->grab()); + unset($ufw_tpl); + + $app->log("Changed default UFW settings",LOGLEVEL_DEBUG); + + $app->services->restartServiceDelayed('ufw','--force-reload'); + + } else { + $app->log("Ubuntu Uncomplicated Firewall configuration not available for this linux distribution.",LOGLEVEL_DEBUG); + } + + } + + + + +} // end class + +class UFW { + + var $_delete = false; + var $_ufwCmd = "ufw"; + var $_inboundPolicy = "allow"; + var $_outboundPolicy = "allow"; + var $_protocol = "tcp"; + var $_ruleID = 1; + var $_srcIP; + var $_dstIP; + var $_srcPort; + var $_dstPort; + var $_network = "0.0.0.0/24"; + + function UFW() { + + } + + function setDelete($delete) { + $this->_delete = $delete; + } + + function setInboundPolicy($policy) { + $this->_inboundPolicy = $policy; + } + + function setOutboundPolicy($policy) { + $this->_outboundPolicy = $policy; + } + + function setProtocol($protocol) { + $this->_outboundPolicy = $protocol; + } + + function setRuleID($id) { + $this->_ruleID = $id; + } + + function setSrcIP($ip) { + $this->_srcIP = $ip; + } + + function setDstIP($ip) { + $this->_dstIP = $ip; + } + + function setSrcPort($port) { + $this->_srcPort = $port; + } + + function setDstPort($port) { + $this->_dstPort = $port; + } + + function setNetwork($network) { + $this->_network = $network; + } + + + function insert() { + $protocols = split("/",$this->_protocol); + foreach ($protocols as $protocol) { + $inbound = sprintf("ufw insert %s %s proto %s from %s port %s to %s port %s ", $this->_ruleID, $this->_inboundPolicy, $protocol, $this->_srcIP, $this->_srcPort, $this->_dstIP, $this->_dstPort); + $outbound = sprintf("ufw insert %s %s proto %s from %s port %s to %s port %s ", $this->_ruleID, $this->_outboundPolicy, $protocol, $this->_network, $this->_srcPort, $this->_dstIP, $this->_dstPort); + + echo $inbound."\n"; + echo $outbound."\n"; + system($inbound); + system($outbound); + } + } + + function delete() { + $protocols = split("/",$this->_protocol); + foreach ($protocols as $protocol) { + $inbound = sprintf("ufw delete %s proto %s from %s port %s to %s port %s ", $this->_ruleID, $this->_inboundPolicy, $protocol, $this->_srcIP, $this->_srcPort, $this->_dstIP, $this->_dstPort); + $outbound = sprintf("ufw delete %s proto %s from %s port %s to %s port %s ", $this->_ruleID, $this->_outboundPolicy, $protocol, $this->_network, $this->_srcPort, $this->_dstIP, $this->_dstPort); + + echo $inbound."\n"; + echo $outbound."\n"; + + system($inbound); + system($outbound); + } + } + +} + +?> -- Gitblit v1.9.1