Exemple #1
0
        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);
            }
        }