Produtos | Clientes | Depoimentos | Suporte
Bloqueio por IP
Nesta documentação você aprenderá sobre:
Visão Geral
O sistema SinOMS implementa um mecanismo de controle de acesso baseado em endereços IP, permitindo restringir o acesso à API apenas para IPs previamente autorizados. Esta funcionalidade oferece uma camada adicional de segurança, permitindo que contas específicas configurem quais endereços IP podem acessar o sistema.
Só será feita a validação para usuários que não são SINTESE e que existir o parâmetro LOGIN_IP_PERMITIDOS
A validação de IP é executada automaticamente em todas as requisições autenticadas através do filtro de autorização CustomAuthorizeAttribute, garantindo que apenas IPs permitidos tenham acesso aos recursos protegidos. E também no login.
Localização do Código
Projeto(s):
SinOMS.API- Filtro de autorização;SinOMS.BLL- Lógica de validação.
Arquivo(s):
SinOMS.API/Filters/CustomAuthorizeAttribute.cs- Filtro que aplica a validação;SinOMS.BLL/Functions/Util.cs- Métodos de validação de IP.
Namespace(s):
SinOMS.API.FiltersSinOMS.BLL.Functions
Classe(s):
CustomAuthorizeAttribute- Filtro de autorização;Util- Classe utilitária com métodos de validação.
Métodos Principais:
LiberaAcessoPeloIP()- Método principal que verifica se o IP está permitido;ValidaIpEmFaixaCidr(string ipPermitido)- Valida IP único ou múltiplos IPs;ValidaIpUnico(string ipValidar, string ipPermitido)- Valida IP fixo ou CIDR;ObterIpAcesso()- Obtém o IP do cliente da requisição;LogAcessoIp()- Registra tentativas de acesso negadas.
Arquitetura e Design
Padrões Utilizados
Filter Pattern: Utiliza
IAuthorizationFilterpara interceptar requisições antes da execução dos controllers;Strategy Pattern: Suporta múltiplas formas de validação (IP fixo, CIDR, múltiplos IPs);
Fail-Safe Default: Em caso de erro na validação, permite acesso para não bloquear o sistema.
Fluxo de Execução
Interceptação da Requisição
O filtro
CustomAuthorizeAttributeintercepta todas as requisições autenticadas.Verifica se o endpoint permite acesso anônimo (
AllowAnonymousAttribute).Se o usuário está autenticado, prossegue com a validação.
Validação de Usuário Sintese
Usuários com role
CONTAS:SINTESEsão isentos da validação de IP.Para outros usuários, a validação é obrigatória, se existir o parâmetro
LOGIN_IP_PERMITIDOS.
Busca do Parâmetro de Configuração
Busca o parâmetro
LOGIN_IP_PERMITIDOSno cache.O parâmetro pode ser configurado por conta (específico) ou globalmente.
Se o parâmetro estiver vazio, permite acesso (comportamento padrão).
Obtenção do IP do Cliente
Tenta obter o IP do header
X-Client-IP.Se não encontrar, tenta obter do header
X-Forwarded-For.Remove IPs de proxy conhecidos (ex:
3.137.127.228).
Validação do IP
Se o parâmetro contém múltiplos IPs (separados por
;), valida cada um.Para cada IP, verifica se é formato CIDR ou IP fixo.
Se algum IP bater, libera acesso.
Se nenhum IP bater, nega acesso e registra log.
Resposta
Se IP permitido: continua com a requisição normal.
Se IP negado: retorna HTTP 403 (Forbidden) com mensagem "IP não permitido".
Configurações
Parâmetros de Sistema
O mecanismo de restrição por IP depende do parâmetro LOGIN_IP_PERMITIDOS. É importante destacar que este parâmetro não existe por padrão na base de dados e deve ser criado manualmente quando houver a necessidade de aplicar o controle de acesso.
Parâmetro | Tipo | Descrição | Valor atual | Valores possíveis (separar valor por ;) | Nome exibição Web
|
|---|---|---|---|---|---|
| Varchar | Lista de IPs ou faixas CIDR permitidas para acesso ao OMS. Pode ser configurado globalmente ou por conta específica. | Vazio (permite todos por padrão). Caso contrário, preencha com os IPs a serem filtrados. | 192.168.1.100; 10.0.0.0/8; 172.16.0.0/16 | LOGIN_IP_PERMITIDOS |
Formato do Parâmetro LOGIN_IP_PERMITIDOS
O parâmetro aceita os seguintes formatos:
1. IP Fixo (Único)
192.168.1.100Permite acesso apenas deste IP específico
Comparação exata, case-insensitive
2. Formato CIDR (Faixa de Rede)
192.168.1.0/24Permite acesso de todos os IPs na faixa especificada
Formato:
[IP_REDE]/[PREFIXO]Prefixo pode ser de 0 a 32
Exemplos comuns:
/32= 1 IP (192.168.1.100/32 = apenas 192.168.1.100)/24= 256 IPs (192.168.1.0/24 = 192.168.1.0 a 192.168.1.255)/16= 65.536 IPs (192.168.0.0/16 = toda a rede 192.168.x.x)/8= 16.777.216 IPs (192.0.0.0/8 = toda a rede 192.x.x.x)
3. Múltiplos IPs ou Faixas (Separados por Ponto e Vírgula)
192.168.1.100; 10.0.0.0/8; 172.16.0.50; 177.76.215.0/24Permite combinar IPs fixos e faixas CIDR
Separador: ponto e vírgula (
;)Espaços em branco são ignorados
Se qualquer IP/faixa corresponder, o acesso é liberado
Exemplos de Configuração
Exemplo 1: IP Fixo Único
Valor: 177.76.215.100Permite acesso apenas do IP 177.76.215.100
Exemplo 2: Faixa CIDR
Valor: 177.76.215.0/24Permite acesso de todos os IPs de 177.76.215.0 a 177.76.215.255
Exemplo 3: Múltiplos IPs Fixos
Valor: 192.168.1.100; 192.168.1.101; 192.168.1.102Permite acesso de três IPs específicos
Exemplo 4: Combinação de IP Fixo e Faixas CIDR
Valor: 192.168.1.100; 10.0.0.0/8; 172.16.0.0/16Permite acesso de:
IP fixo:
192.168.1.100Toda a rede privada
10.x.x.x(10.0.0.0 a 10.255.255.255)Toda a rede privada
172.16.x.x(172.16.0.0 a 172.16.255.255)
Exemplo 5: Rede Interna Completa
Valor: 192.168.0.0/16; 10.0.0.0/8; 172.16.0.0/12Permite acesso de todas as redes privadas padrão (RFC 1918)
Configuração por Conta
O parâmetro LOGIN_IP_PERMITIDOS pode ser configurado de duas formas:
Globalmente: Aplicado a todas as contas que não possuem configuração específica
Por Conta: Configuração específica para uma conta, sobrepondo a configuração global
Como Configurar:
Acesse o cadastro de parâmetros do sistema
Busque ou crie o parâmetro
LOGIN_IP_PERMITIDOSPara configuração global: deixe o campo "Conta" vazio
Para configuração por conta: selecione a conta específica
Preencha o valor conforme os formatos descritos acima
Configurações de Aplicação
Não são necessárias configurações adicionais em appsettings.json ou Web.config. A funcionalidade utiliza apenas o parâmetro do banco de dados.
Configurações de Banco de Dados
Não foram criadas novas tabelas, stored procedures ou functions. A funcionalidade utiliza a estrutura existente de parâmetros do sistema.
Validação de IP
IP Fixo
Validação por comparação exata do endereço IP:
Formato:
192.168.1.100Comparação case-insensitive
Deve corresponder exatamente ao IP do cliente
Formato CIDR (Classless Inter-Domain Routing)
Validação por faixa de rede usando notação CIDR:
Formato:
192.168.1.0/24Permite definir uma faixa de IPs permitidos
Prefixo pode variar de 0 a 32 bits
Exemplos:
/24= 256 IPs (192.168.1.0 a 192.168.1.255)/16= 65.536 IPs (192.168.0.0 a 192.168.255.255)/32= 1 IP (equivalente a IP fixo)
Múltiplos IPs
Suporte para múltiplos IPs ou faixas CIDR separados por ponto e vírgula:
Formato:
192.168.1.100; 10.0.0.0/8; 172.16.0.50Valida cada IP/faixa individualmente
Se qualquer um corresponder, libera acesso
Espaços em branco são ignorados
Dependências
Serviços Internos
Util: Classe utilitária com métodos de validação;ParametrosService: Serviço para buscar parâmetros do sistema (com cache);LogCentralizado: Serviço para registro de logs de segurança.
Bibliotecas Externas
System.Net: Para parsing e validação de endereços IP (IPAddress);Microsoft.AspNetCore.Mvc.Filters: Para implementação de filtros de autorização.
Tratamento de Erros
Erro na Validação
Em caso de exceção durante a validação, o sistema permite acesso por padrão;
Erro é registrado no log centralizado para análise;
Mensagem de log:
"Erro ao validar acesso por IP: {ex.Message}";Este comportamento evita bloqueios acidentais do sistema.
IP Inválido
Se o IP do cliente não puder ser parseado, a validação retorna
false;Se o formato CIDR estiver incorreto, a validação retorna
false;Tentativas de acesso negadas são registradas em log.
Log de Acesso Negado
Quando um acesso é negado, o sistema registra:
Conta do usuário;
IP que tentou acessar;
IPs configurados no parâmetro;
Controller e Action acessados;
Headers da requisição (exceto Authorization).
Performance e Otimizações
Cache de Parâmetros
Parâmetros são buscados do cache (
BuscarValorParametroCacheAsync);Reduz consultas ao banco de dados;
Melhora performance em requisições frequentes.
Validação Eficiente
Validação de IP fixo é O(1) - comparação direta;
Validação CIDR é O(1) - operações bitwise otimizadas;
Suporte a múltiplos IPs interrompe na primeira correspondência.
Segurança
Isenção para Usuários Sintese
Usuários com role
CONTAS:SINTESEnão são validados por IP;Permite acesso administrativo mesmo de IPs não configurados.
Headers de Proxy
Sistema verifica headers
X-Client-IPeX-Forwarded-For;Remove IPs de proxy conhecidos da string;
Suporta ambientes com load balancers e proxies reversos.
Logs de Auditoria
Todas as tentativas de acesso negadas são registradas;
Facilita investigação de tentativas de acesso não autorizadas;
Inclui informações completas da requisição.
Testes
Instruções e Pré-requisitos para Testes:
Ambiente de desenvolvimento/homologação configurado
Acesso ao sistema de cadastro de parâmetros
Conta de teste configurada (não pode ser usuário Sintese)
Conhecimento do IP atual da máquina de teste
Ferramenta para fazer requisições HTTP (Postman, curl, ou similar)
Token de autenticação válido
Como Obter o IP Atual
Windows (PowerShell):
(Invoke-WebRequest -Uri "https://api.ipify.org").ContentLinux/Mac:
curl https://api.ipify.orgNavegador: Acesse:
What Is My IP Address? See Your Current Public IP
Cenários de Teste
Teste 1: Acesso Permitido - IP Fixo
Objetivo: Validar que um IP fixo configurado permite acesso
Passos para Execução:
Obtenha o IP atual da máquina de teste
Configure o parâmetro
LOGIN_IP_PERMITIDOScom o IP fixo (ex:192.168.1.100)Faça uma requisição autenticada para qualquer endpoint da API
Verifique que a requisição retorna status 200 (sucesso)
Resultado Esperado:
Requisição é processada normalmente
Nenhum erro 403 (Forbidden)
Critérios de Aceite
Requisição retorna status 200
Dados são retornados corretamente
Nenhum log de acesso negado é gerado
Teste 2: Acesso Negado - IP Não Configurado
Objetivo: Validar que um IP não configurado é bloqueado
Passos para Execução:
Configure o parâmetro
LOGIN_IP_PERMITIDOScom um IP diferente do atual (ex:192.168.1.200)Faça uma requisição autenticada para qualquer endpoint da API
Verifique a resposta
Resultado Esperado:
Requisição retorna status 403 (Forbidden)
Mensagem:
"IP não permitido"Log de acesso negado é registrado
Critérios de Aceite:
Requisição retorna status 403
Mensagem de erro é clara
Log de acesso negado é registrado no sistema
Teste 3: Acesso Permitido - Formato CIDR
Objetivo: Validar que faixas CIDR funcionam corretamente
Passos para Execução:
Obtenha o IP atual (ex:
192.168.1.100)Configure o parâmetro com faixa CIDR que inclua o IP (ex:
192.168.1.0/24)Faça uma requisição autenticada
Repita com diferentes prefixos CIDR (
/32,/24,/16,/8)
Resultado Esperado:
Requisições são processadas normalmente
Todos os prefixos que incluem o IP permitem acesso
Critérios de Aceite:
/24permite acesso quando IP está na faixa/16permite acesso quando IP está na faixa/32permite acesso apenas para IP exatoPrefixos que não incluem o IP bloqueiam acesso
Teste 4: Acesso Permitido - Múltiplos IPs
Objetivo: Validar que múltiplos IPs separados por ponto e vírgula funcionam
Passos para Execução:
Obtenha o IP atual
Configure o parâmetro com múltiplos IPs, incluindo o atual (ex:
192.168.1.50; 192.168.1.100; 192.168.1.200)Faça uma requisição autenticada
Teste com IP que está na lista e outro que não está
Resultado Esperado:
IP na lista permite acesso
IP fora da lista bloqueia acesso
Critérios de Aceite:
Múltiplos IPs fixos funcionam corretamente
Combinação de IPs fixos e CIDR funciona
Espaços em branco são ignorados
Teste 5: Isenção para Usuário Sintese
Objetivo: Validar que usuários Sintese não são validados por IP
Passos para Execução:
Configure o parâmetro
LOGIN_IP_PERMITIDOScom um IP diferente do atualFaça login com usuário que possui role
CONTAS:SINTESEFaça requisições autenticadas
Resultado Esperado:
Acesso é permitido mesmo com IP não configurado
Nenhuma validação de IP é executada
Critérios de Aceite:
Usuário Sintese acessa normalmente
Não há validação de IP para este usuário
Teste 6: Parâmetro Vazio (Permite Todos)
Objetivo: Validar comportamento quando parâmetro não está configurado
Passos para Execução:
Remova ou deixe vazio o parâmetro
LOGIN_IP_PERMITIDOSFaça requisições autenticadas de qualquer IP
Resultado Esperado:
Todos os IPs têm acesso permitido
Sistema funciona normalmente
Critérios de Aceite: