Exemple #1
0
        public bool Unblock(BlockedEntry entry)
        {
            var firewallPolicy = (INetFwPolicy2)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FwPolicy2"));
            var policy         = policyFactory.GetPolicy(entry);

            var ruleName = $"{policy.GetRuleName()} [{entry.Protocol}-{String.Join(",", entry.Ports)}]";
            var rules    = GetRules(firewallPolicy, ruleName);
            var toRemove = new List <INetFwRule>();

            foreach (var rule in rules.Where(r => CleanIps(r.RemoteAddresses).Contains(entry.Ip)))
            {
                var ips = CleanIps(rule.RemoteAddresses);

                ips.Remove(entry.Ip);

                if (ips.Count() == 0)
                {
                    toRemove.Add(rule);
                }
                else
                {
                    rule.RemoteAddresses = String.Join(",", ips);
                }
            }

            foreach (var rule in toRemove)
            {
                firewallPolicy.Rules.Remove(rule.Name);
                rules.Remove(rule);
            }

            return(true);
        }
Exemple #2
0
        public void Run()
        {
            var fromDate = GetLastRunDate();

            if (fromDate.Date != DateTime.Now.Date)
            {
                fromDate = DateTime.Today;
            }

            Console.WriteLine($"[{DateTime.Now}] {nameof(BlockService)} - Starting from {fromDate}");

            var badIps  = logFileDataSource.GetBadIps(fromDate);
            var runtime = badIps.LastOrDefault()?.Time.AddSeconds(1) ?? DateTime.Now;

            foreach (var ipEntry in badIps)
            {
                var isBlocked = dataStore.IsIPBlocked(ipEntry.IP, logFileDataSource.GetName(), ipEntry.Ports, ipEntry.Protocol.ToString());

                if (!isBlocked)
                {
                    var blockEntry = new BlockedEntry(ipEntry, logFileDataSource.GetName());
                    blockEntry.IpLocation = ipLocator.GetIpLocation(blockEntry.Ip);

                    var policy = policyFactory.GetPolicy(blockEntry);

                    if (policy.ShouldBlock() && ipBlocker.Block(blockEntry, policy, out var ruleName))
                    {
                        blockEntry.RuleName  = ruleName;
                        blockEntry.IsBLocked = true;
                        dataStore.Add(blockEntry, policy, logFileDataSource.GetName());
                    }
                }
            }

            dataStore.SaveConfigValue("LastRunDate", runtime.ToString());

            Console.WriteLine($"[{DateTime.Now}] {nameof(BlockService)} - Complete");
        }