From 41cd1b22461acdca1ea3bfa4fb5252d8e6099eb7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vin=C3=ADcius=20Lima?= Date: Mon, 8 Apr 2024 11:41:05 -0300 Subject: [PATCH] feat: Adicionar o suporte para portas remotas nas regras de IP. --- src/NetWindowsFirewall/NetWindowsFirewall.cs | 58 +++++++++++++------- 1 file changed, 39 insertions(+), 19 deletions(-) diff --git a/src/NetWindowsFirewall/NetWindowsFirewall.cs b/src/NetWindowsFirewall/NetWindowsFirewall.cs index 021b71f..0aae6ba 100644 --- a/src/NetWindowsFirewall/NetWindowsFirewall.cs +++ b/src/NetWindowsFirewall/NetWindowsFirewall.cs @@ -44,18 +44,21 @@ public NetWindowsFirewall() /// /// O nome da regra de permissão a ser adicionada. /// O endereço de IP que será permitido na regra de permissão a ser adicionada. - public void AddAllowInIpRule(string name, IPAddress ipAddress) => - AddIpRule(name, ipAddress, NET_FW_ACTION_.NET_FW_ACTION_ALLOW, NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN); + /// As portas remotas (TCP) da regra a ser adicionada. + public void AddAllowInIpRule(string name, IPAddress ipAddress, string remotePorts = "") => + AddIpRule(name, ipAddress, NET_FW_ACTION_.NET_FW_ACTION_ALLOW, NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN, + remotePorts); /// /// Adiciona uma nova regra de permissão (de entrada e saída) para um endereço de IP no Firewall do Windows. /// /// O nome da regra de permissão a ser adicionada. /// O endereço de IP que será permitido na regra de permissão a ser adicionada. - public void AddAllowIpRule(string name, IPAddress ipAddress) + /// As portas remotas (TCP) da regra a ser adicionada. + public void AddAllowIpRule(string name, IPAddress ipAddress, string remotePorts = "") { - AddAllowInIpRule(name, ipAddress); - AddAllowOutIpRule(name, ipAddress); + AddAllowInIpRule(name, ipAddress, remotePorts); + AddAllowOutIpRule(name, ipAddress, remotePorts); } /// @@ -64,34 +67,41 @@ public void AddAllowIpRule(string name, IPAddress ipAddress) /// O nome da regra de permissão a ser adicionada. /// O endereço de IP que será permitido na regra de permissão a ser adicionada. /// A direção da regra de bloqueio a ser adicionada. - public void AddAllowIpRule(string name, IPAddress ipAddress, NET_FW_RULE_DIRECTION_ direction) => - AddIpRule(name, ipAddress, NET_FW_ACTION_.NET_FW_ACTION_ALLOW, direction); + /// As portas remotas (TCP) da regra a ser adicionada. + public void AddAllowIpRule(string name, IPAddress ipAddress, NET_FW_RULE_DIRECTION_ direction, + string remotePorts = "") => + AddIpRule(name, ipAddress, NET_FW_ACTION_.NET_FW_ACTION_ALLOW, direction, remotePorts); /// /// Adiciona uma nova regra de permissão (de saída) para um endereço de IP no Firewall do Windows. /// /// O nome da regra de permissão a ser adicionada. /// O endereço de IP que será permitido na regra de permissão a ser adicionada. - public void AddAllowOutIpRule(string name, IPAddress ipAddress) => - AddIpRule(name, ipAddress, NET_FW_ACTION_.NET_FW_ACTION_ALLOW, NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_OUT); + /// As portas remotas (TCP) da regra a ser adicionada. + public void AddAllowOutIpRule(string name, IPAddress ipAddress, string remotePorts = "") => + AddIpRule(name, ipAddress, NET_FW_ACTION_.NET_FW_ACTION_ALLOW, NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_OUT, + remotePorts); /// /// Adiciona uma nova regra de bloqueio (de entrada) para um endereço de IP no Firewall do Windows. /// /// O nome da regra de bloqueio a ser adicionada. /// O endereço de IP que será bloqueado na regra de bloqueio a ser adicionada. - public void AddBlockInIpRule(string name, IPAddress ipAddress) => - AddIpRule(name, ipAddress, NET_FW_ACTION_.NET_FW_ACTION_BLOCK, NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN); + /// As portas remotas (TCP) da regra a ser adicionada. + public void AddBlockInIpRule(string name, IPAddress ipAddress, string remotePorts = "") => + AddIpRule(name, ipAddress, NET_FW_ACTION_.NET_FW_ACTION_BLOCK, NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN, + remotePorts); /// /// Adiciona uma nova regra de bloqueio (de entrada e saída) para um endereço de IP no Firewall do Windows. /// /// O nome da regra de bloqueio a ser adicionada. /// O endereço de IP que será bloqueado na regra de bloqueio a ser adicionada. - public void AddBlockIpRule(string name, IPAddress ipAddress) + /// As portas remotas (TCP) da regra a ser adicionada. + public void AddBlockIpRule(string name, IPAddress ipAddress, string remotePorts = "") { - AddBlockInIpRule(name, ipAddress); - AddBlockOutIpRule(name, ipAddress); + AddBlockInIpRule(name, ipAddress, remotePorts); + AddBlockOutIpRule(name, ipAddress, remotePorts); } /// @@ -100,16 +110,19 @@ public void AddBlockIpRule(string name, IPAddress ipAddress) /// O nome da regra de bloqueio a ser adicionada. /// O endereço de IP que será bloqueado na regra de bloqueio a ser adicionada. /// A direção da regra de bloqueio a ser adicionada. - public void AddBlockIpRule(string name, IPAddress ipAddress, NET_FW_RULE_DIRECTION_ direction) => - AddIpRule(name, ipAddress, NET_FW_ACTION_.NET_FW_ACTION_BLOCK, direction); + /// As portas remotas (TCP) da regra a ser adicionada. + public void AddBlockIpRule(string name, IPAddress ipAddress, NET_FW_RULE_DIRECTION_ direction, + string remotePorts = "") => + AddIpRule(name, ipAddress, NET_FW_ACTION_.NET_FW_ACTION_BLOCK, direction, remotePorts); /// /// Adiciona uma nova regra de bloqueio (de saída) para um endereço de IP no Firewall do Windows. /// /// O nome da regra de bloqueio a ser adicionada. /// O endereço de IP que será bloqueado na regra de bloqueio a ser adicionada. - public void AddBlockOutIpRule(string name, IPAddress ipAddress) => - AddIpRule(name, ipAddress, NET_FW_ACTION_.NET_FW_ACTION_BLOCK, NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_OUT); + /// As portas remotas (TCP) da regra a ser adicionada. + public void AddBlockOutIpRule(string name, IPAddress ipAddress, string remotePorts = "") => + AddIpRule(name, ipAddress, NET_FW_ACTION_.NET_FW_ACTION_BLOCK, NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_OUT, remotePorts); /// /// Adiciona uma nova regra para um endereço de IP no Firewall do Windows. @@ -119,8 +132,9 @@ public void AddBlockIpRule(string name, IPAddress ipAddress) /// A ação da regra a ser adicionada. /// A direção da regra a ser adicionada. /// A descrição da regra a ser adicionada. + /// As portas remotas (TCP) da regra a ser adicionada. private void AddIpRule(string name, IPAddress ipAddress, NET_FW_ACTION_ action, NET_FW_RULE_DIRECTION_ direction, - string description = "") + string description = "", string remotePorts = "") { INetFwRule rule = GetNewRule(); @@ -132,6 +146,12 @@ public void AddBlockIpRule(string name, IPAddress ipAddress) rule.Name = name; rule.RemoteAddresses = ipAddress.ToString(); + if (!string.IsNullOrWhiteSpace(remotePorts)) + { + rule.Protocol = (int)NET_FW_IP_PROTOCOL_.NET_FW_IP_PROTOCOL_TCP; + rule.RemotePorts = remotePorts; + } + AddRule(rule); }