asp.netcore中如何设置ip白名单(代码片段)

dotNET跨平台 dotNET跨平台     2022-12-15     457

关键词:

咨询区

  • MartinM

我想在一个web站点中实现ip白名单功能,在 MVC 时代我只需要在 web.config 中添加如下配置即可。


<security>
  <ipSecurity allowUnlisted="false" denyAction="NotFound">
    <add allowed="true" ipAddress="XX.XX.XX.XX" subnetMask="255.255.255.0"/>
  </ipSecurity>
</security>

但在 AspNetCore 中使用如上配置时,程序启动就会报错。


Unable to start process The web server request failed with status code 500, internal server error

很显然这个 config 配置是有问题的,请问是否有内置或者第三方的组件来实现这个功能?

回答区

  • Ergwun

Damian Bod 写了一篇文章:https://damienbod.com/2016/12/18/implementing-a-client-white-list-using-asp-net-core-middleware/ 来演示如果通过中间件的方式来实现 ip 白名单功能。

他分别给了一个 全局性中间件actionfilter 两种方式来实现,无论哪种方式都需要在 appsetttings.json 中配置可允许访问的 ip 列表,然后根据这个list来检查客户端的ip是否符合?client ip 可以通过 context.Connection.RemoteIpAddress 来获取。

如果你有更精细化的配置,比如说设置ip段,那你可以通过nuget上的 IPAddressRange 包来实现,它支持了多种格式,如:192.168.0.0/24192.168.0.0/255.255.255.0,包括 CIDR 表达式和 IPv6。

参考下面的例子。

  1. appsettings.json:



  "IPAddressWhitelistConfiguration": 
    "AuthorizedIPAddresses": [
      "::1", // IPv6 localhost
      "127.0.0.1", // IPv4 localhost
      "192.168.0.0/16", // Local network
      "10.0.0.0/16", // Local network
    ]
  


  1. IPWhiteListConfiguration.cs:


namespace My.Web.Configuration

    using System.Collections.Generic;

    public class IPWhitelistConfiguration : IIPWhitelistConfiguration
    
        public IEnumerable<string> AuthorizedIPAddresses  get; set; 
    


  1. IIPWhiteListConfiguration.cs:


namespace My.Web.Configuration

    using System.Collections.Generic;

    public interface IIPWhitelistConfiguration
    
        IEnumerable<string> AuthorizedIPAddresses  get; 
    


  1. Startup.cs:


public class Startup

    // ...
    public void ConfigureServices(IServiceCollection services)
    
        // ...
        services.Configure<IPWhitelistConfiguration>(
           this.Configuration.GetSection("IPAddressWhitelistConfiguration"));
        services.AddSingleton<IIPWhitelistConfiguration>(
            resolver => resolver.GetRequiredService<IOptions<IPWhitelistConfiguration>>().Value);
        // ...
    
 

  1. ClientIPAddressFilterAttribute.cs:


namespace My.Web.Filters

    using System.Collections.Generic;
    using System.Linq;
    using System.Net;
    using Microsoft.AspNetCore.Mvc;
    using Microsoft.AspNetCore.Mvc.Filters;
    using NetTools;
    using My.Web.Configuration;

    public class ClientIPAddressFilterAttribute : ActionFilterAttribute
    
        private readonly IEnumerable<IPAddressRange> authorizedRanges;

        public ClientIPAddressFilterAttribute(IIPWhitelistConfiguration configuration)
        
            this.authorizedRanges = configuration.AuthorizedIPAddresses
                .Select(item => IPAddressRange.Parse(item));
        

        public override void OnActionExecuting(ActionExecutingContext context)
        
            var clientIPAddress = context.HttpContext.Connection.RemoteIpAddress;
            if (!this.authorizedRanges.Any(range => range.Contains(clientIPAddress)))
            
                context.Result = new UnauthorizedResult();
            
        
    


点评区

在 website 中设置ip白名单的功能非常常见,nuget上也有很多的开源中间件帮助实现,比如:ClientIpAspNetCoreIIS,我在项目中也有用到白名单的功能,只不过是做到了 nginx 层。

“阿里云”ecs服务器怎么设置ip白名单?

“阿里云”ECS服务器IP白名单设置操作步骤如下:1、登录云盾安全管控平台管理控制台;您也可以在登录阿里云控制台后,将鼠标移至右上角的账户图标打开用户菜单,并单击安全管控,进入云盾安全管控平台管理控制台。2、... 查看详情

nginx配置ip白名单和黑名单(代码片段)

白名单设置,访问根目录location/allow123.34.22.155;allow33.56.32.1/100;denyall;黑名单设置,访问根目录location/deny123.34.22.155;特定目录访问限制location/tree/listallow123.34.22.155;denyall; 查看详情

如何在 NodeJS socket.io 服务器上设置 IP 白名单?

】如何在NodeJSsocket.io服务器上设置IP白名单?【英文标题】:HowtosetanIPwhitelistonaNodeJSsocket.ioserver?【发布时间】:2021-10-1016:13:17【问题描述】:我想将与套接字服务器的连接限制为IP列表,有没有简单的方法可以做到这一点?到现... 查看详情

如何在asp.netcore中获取客户端ip?(代码片段)

...ables["REMOTE_ADDR"]来获取客户端IP地址,请问在ASP.NETCore中我该如何实现呢?回答区CodingYourLife如果你用的是.NET5,可以用内部提供的扩展方法来实现获取客户端IP,参考代码如下ÿ 查看详情

gitlab的rack-attack机制和如何设置白名单的记录(代码片段)

...使用源码安装的10.5中文版大纲:gitlabrack-attack机制的作用如何启用和禁用gitlab的rack-attack机制,以及如何配置白名单如果一个ip被错误地拦截,导致了不能访问,如何快速地恢复如果gitlab工作在一个反向代理(或者是负载均衡器)的后边,... 查看详情

winrm如何设置trustedhosts(代码片段)

如果希望WinRM能够建立连接,需要将IP地址设置为白名单。查看当前WinRM的白名单通过在命令行工具中运行下面的命令:Get-ItemWSMan:\\localhost\\Client\\TrustedHosts  上面命令行工具中显示了当前的配置情况设置所有地址下面的命... 查看详情

如何将 AWS Beanstalk IP 列入白名单

】如何将AWSBeanstalkIP列入白名单【英文标题】:HowtoWhitelistAWSBeanstalkIP【发布时间】:2020-03-3111:45:35【问题描述】:我的实用程序部署在AWSbeanstalk上,并将一些数据推送到我们客户的一个数据库服务器中。客户希望将beanstalk实例的... 查看详情

2021-05-19asp.netcore笔试题asp.netcore项目如何设置ip地址和端口号?

ASP.NETCore项目如何设置IP地址和端口号?可以使用Properties文件夹下的launchSettings配置文件来配置不同的启动方式的时候,分别配置IP和端口号。 查看详情

如何在春季安全中IP白名单/oauth/check_token端点

】如何在春季安全中IP白名单/oauth/check_token端点【英文标题】:howtoIPwhitelist/oauth/check_tokenendpointinspringsecurity【发布时间】:2018-09-0705:56:43【问题描述】:我有两个应用程序(战争),一个充当ResourceServer,另一个是我的AuthServer,... 查看详情

云展网教程|如何设置邮箱白名单?

为保证您能正常接收云展网所发邮件,可在邮箱中将[email protected]设置为邮箱白名单,具体设置方法如下:1. 网易邮箱2. QQ邮箱3. Gmail邮箱4. Hotmail邮箱5. 新浪邮箱6. 雅虎邮箱7. 搜狐邮箱8. 139邮箱9.... 查看详情

获取微信openid需要设置白名单吗

参考技术A需要设置白名单。需要一个公众号appid和secret,需要简单配置一下,在菜单最下方点击开发,点击基本配置,白名单这里填写电脑现自身的ip。设置访问微信公众号三方接口被授权获取token权限的白名单ip。 查看详情

postfix收信人白名单设置(代码片段)

...,开启收件人访问控制功能,指定收件人白名单文件,并设置缺省策略为拒绝(reject参数可不填,即不设置缺省),不可换行s 查看详情

如何在 Azure WAF 中将 IP 地址列入白名单

】如何在AzureWAF中将IP地址列入白名单【英文标题】:HowtowhitelistanipaddressinAzureWAF【发布时间】:2020-07-1922:37:19【问题描述】:我有一个使用OWASP3.0规则集的Azure应用程序网关Web应用程序防火墙。我创建了一个自定义策略,因此我... 查看详情

批量屏蔽符合条件的ip地址,支持添加白名单,ip段,增量,大于指定次数的ip(代码片段)

 批量屏蔽符合条件的IP地址,支持添加白名单,IP段,增量 大概的思路是利用sh,从日志中提取出来对应的IP地址,然后再交由python进行对比,判断,最终将需要添加至iptables列表中的IP写入到一个文件中,然后再由sh进行... 查看详情

使用 EKS 与 IP 白名单服务通信

...9-11-2007:17:36【问题描述】:我已经使用eksctl使用所有默认设置设置了EKS集群,现在需要与使用IP白名单的外部服务进行通信。显然,从我的集群向服务发出的请求来自发出请求的任何节点,但是节点列表(及其ips)可以并且将会... 查看详情

如何在负载均衡器 Laravel 后面的 nginx 中将远程 IP 地址列入白名单

】如何在负载均衡器Laravel后面的nginx中将远程IP地址列入白名单【英文标题】:HowtowhitelistremoteipaddressesinnginxbehindaloadbalancerLaravel【发布时间】:2020-10-2013:17:03【问题描述】:我有一个我想通过负载均衡器后面的nginx在我的服务器... 查看详情

如何设置 API url,以便只有 IP 白名单客户端可以访问 API,而 Web 应用程序本身仍然可供所有人访问?

】如何设置APIurl,以便只有IP白名单客户端可以访问API,而Web应用程序本身仍然可供所有人访问?【英文标题】:HowcanIsetAPIurlsuchthattheAPIisaccessibleonlytoIPwhitelistedclientswhilethewebapplicationitselfremainsaccessibletoall?【发布时间】:2021-05-110... 查看详情

ip白名单(代码片段)

 packagecom.ecreditpal.common.util;importlombok.extern.slf4j.Slf4j;importjava.util.ArrayList;importjava.util.HashSet;importjava.util.List;importjava.util.Set;importjava.util.regex.Pattern;/***@Au 查看详情