private static void OpenFirewallPort(string name, int port) { try { //Type tNetFwPolicy2 = Type.GetTypeFromProgID("HNetCfg.FwPolicy2"); //NetFwTypeLib.INetFwPolicy2 fwPolicy2 = (NetFwTypeLib.INetFwPolicy2)Activator.CreateInstance(tNetFwPolicy2); //var currentProfiles = fwPolicy2.CurrentProfileTypes; NetFwTypeLib.INetFwRule2 rule = (NetFwTypeLib.INetFwRule2)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FWRule")); rule.Name = name; rule.Enabled = true; rule.Protocol = 6; // TCP rule.LocalPorts = port.ToString(); //rule.Profiles = currentProfiles; NetFwTypeLib.INetFwPolicy2 policy = (NetFwTypeLib.INetFwPolicy2)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FwPolicy2")); rule.Profiles = policy.CurrentProfileTypes; policy.Rules.Add(rule); } catch (Exception ex) { TraceLogger.Instance.WriteException(ex); } }
private void FirewallButton_Click(object sender, RoutedEventArgs e) { if (SaveAll() == false) { return; } try { var fw = (NetFwTypeLib.INetFwMgr)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FwMgr")); if (fw == null || fw.LocalPolicy.CurrentProfile.FirewallEnabled == false) { MessageBox.Show("Can't set firewall rules. Windows Firewall diabled. Please enable firewall.", "Firewall", MessageBoxButton.OK, MessageBoxImage.Warning); return; } // check firewall rules NetFwTypeLib.INetFwPolicy2 firewallPolicy = (NetFwTypeLib.INetFwPolicy2)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FwPolicy2")); if (firewallPolicy != null) { firewallPolicy.Rules.Remove(fRuleNscaName); firewallPolicy.Rules.Remove(fRuleNrpeName); Nagios.Net.Client.Nsca.NscaSettings nsca = _appConfig.GetSection("nscaSettings") as Nagios.Net.Client.Nsca.NscaSettings; if (nsca != null) { NetFwTypeLib.INetFwRule nscaRule = (NetFwTypeLib.INetFwRule)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FWRule")); if (nscaRule != null) { nscaRule.Protocol = (int)NetFwTypeLib.NET_FW_IP_PROTOCOL_.NET_FW_IP_PROTOCOL_TCP; nscaRule.Action = NetFwTypeLib.NET_FW_ACTION_.NET_FW_ACTION_ALLOW; nscaRule.Description = "Used to allow Nagios Net client send NSCA messages to Nagios server"; nscaRule.Direction = NetFwTypeLib.NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_OUT; nscaRule.Enabled = true; nscaRule.InterfaceTypes = "All"; nscaRule.Name = fRuleNscaName; nscaRule.RemoteAddresses = nsca.NscaAddress; nscaRule.RemotePorts = nsca.Port.ToString(); firewallPolicy.Rules.Add(nscaRule); } } Nagios.Net.Client.Nrpe.NrpeSettings nrpe = _appConfig.GetSection("nrpeSettings") as Nagios.Net.Client.Nrpe.NrpeSettings; if (nrpe != null) { NetFwTypeLib.INetFwRule nrpeRule = (NetFwTypeLib.INetFwRule)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FWRule")); if (nrpeRule != null) { nrpeRule.Protocol = (int)NetFwTypeLib.NET_FW_IP_PROTOCOL_.NET_FW_IP_PROTOCOL_TCP; nrpeRule.Action = NetFwTypeLib.NET_FW_ACTION_.NET_FW_ACTION_ALLOW; nrpeRule.Description = "Used to allow Nagios Net client receive NRPE commands and send replies to Nagios server"; nrpeRule.Direction = NetFwTypeLib.NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN; nrpeRule.Enabled = true; nrpeRule.InterfaceTypes = "All"; nrpeRule.Name = fRuleNrpeName; StringBuilder fhs = new StringBuilder(); foreach (Nagios.Net.Client.Nrpe.FilteredHost fh in nrpe.Hosts) { if (fhs.Length > 0) { fhs.Append(","); } fhs.Append(fh.Host); } nrpeRule.RemoteAddresses = fhs.Length > 0 ? fhs.ToString() : "*"; nrpeRule.LocalAddresses = nrpe.IP.ToUpper().Contains("ANY") ? "*" : nrpe.IP; nrpeRule.LocalPorts = nrpe.Port.ToString(); firewallPolicy.Rules.Add(nrpeRule); } } } } catch (Exception ex) { MessageBox.Show(ex.Message, "Firewall Rules", MessageBoxButton.OK, MessageBoxImage.Error); } }