Esempio n. 1
0
        public bool Block(BlockedEntry blockEntry, IPBlockPolicy policy, out string ruleName)
        {
            var firewallPolicy = (INetFwPolicy2)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FwPolicy2"));

            ruleName = $"{policy.GetRuleName()} [{blockEntry.Protocol}-{String.Join(",", blockEntry.Ports)}]";

            var rules = GetRules(firewallPolicy, ruleName);

            var rule = rules.FirstOrDefault(r => CleanIps(r.RemoteAddresses).Count < 1000);

            if (rule != null)
            {
                var ips = CleanIps(rule.RemoteAddresses);

                if (!ips.Contains(blockEntry.Ip))
                {
                    ips.Add(blockEntry.Ip);

                    rule.RemoteAddresses = String.Join(",", ips);
                    ruleName             = rule.Name;
                    Console.WriteLine($"Blocked IP: {blockEntry.Ip}");
                }
                else
                {
                    Console.WriteLine($"IP AlreadyBlocked: {blockEntry.Ip}");
                }
            }
            else
            {
                rule                 = (INetFwRule)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FWRule"));
                rule.Action          = NET_FW_ACTION_.NET_FW_ACTION_BLOCK;
                rule.Description     = $"IPBlocker blocked IP's";
                rule.Direction       = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN;
                rule.Enabled         = true;
                rule.RemoteAddresses = blockEntry.Ip;
                rule.InterfaceTypes  = "All";
                rule.Protocol        = (int)blockEntry.Protocol; //NET_FW_IP_PROTOCOL_.NET_FW_IP_PROTOCOL_TCP / NET_FW_IP_PROTOCOL_.NET_FW_IP_PROTOCOL_UDP
                rule.LocalPorts      = String.Join(",", blockEntry.Ports);
                rule.Name            = GetNextRuleName(rules.Select(r => r.Name).ToList(), ruleName);

                firewallPolicy.Rules.Add(rule);
                rules.Add(rule);

                ruleName = rule.Name;
                Console.WriteLine($"Blocked IP: {blockEntry.Ip}");
            }

            return(true);
        }
Esempio n. 2
0
        public void Add(BlockedEntry blockEntry, IPBlockPolicy policy, string source)
        {
            var record = new BlockedIpRecord
            {
                Source          = source,
                RuleName        = blockEntry.RuleName,
                DateBlocked     = DateTime.Now,
                DateToUnblockIp = policy.GetUnblockDate(),
                Ip         = blockEntry.Ip,
                IpLocation = blockEntry.IpLocation,
                IsBlocked  = blockEntry.IsBLocked,
                Ports      = String.Join(",", blockEntry.Ports),
                Protocol   = blockEntry.Protocol.ToString().ToLower()
            };

            _context.BlockedIpRecords.Add(record);
            _context.SaveChanges();
        }