Nginx 禁止IP访问 只允许域名访问,以及Nginx防盗链设置

这篇具有很好参考价值的文章主要介绍了Nginx 禁止IP访问 只允许域名访问,以及Nginx防盗链设置。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、Nginx 禁止IP访问 只允许域名访问

1.1 背景及用途

       我们在使用的时候会遇到很多的恶意IP攻击,这个时候就要用到Nginx 禁止IP访问了。今天要在Nginx上设置禁止通过IP访问服务器,只能通过域名访问,这样做是为了避免别人把未备案的域名解析到自己的服务器IP而导致服务器被断网。

1.2 设置方式

       下面我们就先看看Nginx的默认虚拟主机在用户通过IP访问,或者通过未设置的域名访问(比如有人把他自己的域名指向了你的ip)的时 候生效最关键的一点是,在server的设置里面添加这一行:

listen 80 default;
后面的default参数表示这个是默认虚拟主机。
Nginx 禁止IP访问这个设置非常有用。

       比如别人通过ip或者未知域名访问你的网站的时候,你希望禁止显示任何有效内容,可以给他返回500或者403.目前国内很多机房都要求网站主关闭空主机头,防止未备案的域名指向过来造成麻烦。就可以这样设置:

在nginx.conf文件修改如下:

server {
    listen 80 default;
    return 403;
}

这里是在接收到ip访问或非指定域名访问时会返回403错误。

也可以把这些流量收集起来,导入到自己的网站,只要做以下跳转设置就可以:

server { 
  listen 80 default; 
  rewrite ^(.*) http://www.youdomain.com permanent; 
}

二、Nginx防盗链设置

2.1 背景及用途

       盗链在如今的互联网世界无处不在,盗图,盗视频、盗文章等等,都是通过获取正规网站的图片、视频、文章等的 url 地址,直接放到自己网站上使用而未经授权。 盗资源是黑产界以最小成本获取最高利益的一个常用手段。比如笔者最近考虑买房,在贝壳网上有房源的真是户型图以及VR。某些房产中介直接会盗用贝壳网上的真实户型图来骗取点击。因此,对于任何一个大型网站而言,做好防盗措施,避免自身利益受损是至关重要的。Nginx 在代理这类静态资源(图片、视频、文章等)时,可以通过配置实现防盗连的功能。

2.2 如何防盗链?

       前面介绍到,盗链是直接使用正规网站保存图片、视频等的 URL 以获取相应的资源。最简单的防盗想法就是根据客户端请求资源时所携带的一些关键信息来验证请求的合法性,比如客户端 IP、请求 URL 中携带的 referer,如果不合法则直接拒绝请求。此外,由于这些基础信息都可以伪造,因此这样的基础手段也不一定安全。此外,还有登录认证、使用 cookie 等其他防盗连手段。另外,针对特定场景,比如流媒体直播中还有更为高级的防盗手段包括时间戳防盗链、swf 防盗链、回源鉴权防盗链等。

2.3 refer模块防盗

       Nginx 用于实现防盗链功能的模块为 refer 模块,其依据的原理是: 如果网站盗用了你的图片,那么用户在点击或者查看这个盗链内容时,发送 http 请求的头部中的 referer 字段将为该盗版网站的 url。这样我们通过获取这个头部信息,知道 http 发起请求的页面,然后判断这个地址是否是我们的合法页面,不是则判断为盗链。‘

一个简单的 Nginx 防盗链配置如下:

server {
        listen   80;
        server_name  youdomain.com;

        valid_referers none blocked *.youdomain.org www.youdomain.com/nginx server_names ~\.baidu\.;
        if ($invalid_referer) {
            return 499;
        }
        location / {
            root   html;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
}
  • none: 允许缺失 referer 头部的请求访问
  • blocked:referer 这个字段,但是其值被防火墙或者是代理给删除了
  • server_names: 若 referer 中的站点域名和 server_names 中的某个域名匹配,则允许访问
  • 任意字符或者正则表达式

Nginx 会通过查看 referer 字段和 valid_referers 后面的 referer 列表进行匹配,如果匹配到了就将内置的变量$invalid_referer值设置为0,否则设置该值为1

2.4 secure_link模块防盗

       前面这种简单检查 referer 头部值的防盗链方法过于脆弱,盗用者很容易通过伪造 referer 的值轻而易举跳过防盗措施。在 Nginx 中有一种更为高级的防盗方式,即基于 secure_link 模块,该模块能够检查请求链接的权限以及是否过期,多用于下载服务器防盗链。这个模块默认未编译进 Nginx,需要在源码编译时候使用 --with-secure_link_module 添加。

该模块的通过验证 URL 中的哈希值的方式防盗链。它的防盗过程如下:

  • 由服务器或者 Nginx 生成安全的加密后的 URL, 返回给客户端;
  • 客户端使用安全的 URL 访问 Nginx,获取图片等资源,由 Nginx 的 secure_link 变量判断是否验证通过;

       通过配置 secure_link, secure_link_md5 指令,可实现对链接进行权限以及过期检查判断的功能。

referer 模块中的 $invalid_referer 变量一样,secure_link 模块也是通过内置变量 KaTeX parse error: Expected ‘EOF’, got ‘判’ at position 14: secure_link 判断验证是否通过。secure_link 的值有如下三种情况:

  • 空字符串: 验证不通过
  • 0: URL 过期
  • 1: 验证通过

secure_link_md5 指令生成生成合法的 URL 。例如:

secure_link_md5 "$secure_link_expires$uri$remote_addr secret";

如果 Nginx 中secure_link_md5 是上述配置,那么生成合法 url 的命令如下:

# 2023-04-19 17:00:00 转换成时间戳为1681894800
echo -n '1681894800/test.png127.0.0.1 secret' | \
    openssl md5 -binary | openssl base64 | tr +/ -_ | tr -d =

通过上述命令,我们得到了一个 md5 值:cPnjBG9bAZvY_jbPOj13mA,这个非常重要。接下来,构造合的 URL 和指令 secure_link 相关。如果 secure_link 指令的配置如下:

secure_link $arg_md5,$arg_expires;

那么我们的请求的 url 中必须带上 md5 和 expires 参数,例如:

http://192.168.1.10:9008/test.png?md5=cPnjBG9bAZvY_jbPOj13mA&expires=1681894800

对于 Nginx 中的校验配置示例如下:

location ~* .(gif|jpg|png|swf|flv|mp4)$  {
    secure_link $arg_md5,$arg_expires;
    secure_link_md5 "$secure_link_expires$uri$remote_addr secret";# 空字符串,校验不通过
    if ($secure_link = "") {
        return 403;
    }
    # 时间过期
    if ($secure_link = "0") {
        return 410 "URL过期,请重新生成";
    }
    root /root/test;
}

2.5 小结

       一般的 Nginx 防盗链手段都是通过 referer 字段来判断请求的来源地,由此去判定请求是否合法。但是该字段容易伪造,所以很少用该方法实现防盗功能。而Nginx 的 secure_link 模块主要是使用 hash 算法加密方式,一般用于图片、视频下载,生成下载 URL,安全性高。此外,我们也可以使用一些第三方的模块增强 Nginx 的防盗链功能,比如常用的第三放模块 ngx_http_accesskey_module 可用于实现文件下载的防盗功能。文章来源地址https://www.toymoban.com/news/detail-516156.html

到了这里,关于Nginx 禁止IP访问 只允许域名访问,以及Nginx防盗链设置的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • windows防火墙出站规则只允许访问指定域名ip,其他出站ip全部阻止的方法

    需求背景: 公司内网的windows服务器因业务需要只需访问互联网指定的域名ip,其他的因出于系统网络安全考虑需要屏蔽阻止业务无关的其他所有域名和ip的访问。 实现方案: 在windows防火墙中进行设置,如果安装其他网络防火墙会存在安全隐患,公司不允许安装私人或非法的

    2023年04月08日
    浏览(32)
  • Nginx配置只允许部分ip访问

           前几天解答一个需求,公司的服务器映射的外网ip被恶意的绑定了域名了,导致人家可以通过域名直接访问我们的测试服务,运营商觉得我们绑定未备案域名,联系我们让我们整改,简单的处理就是只允许通过外网ip访问,过滤掉域名访问方式。       简单处理如下:

    2024年02月11日
    浏览(37)
  • Nginx配置禁止特定IP和端口访问

    Nginx是一款常用的高性能Web服务器和反向代理服务器。它通过灵活的配置文件能够实现各种功能,包括限制特定IP地址和端口的访问。本文将详细介绍如何使用Nginx配置禁止特定IP和端口的访问。 首先,确保你已经正确安装和配置了Nginx。以下是一个简单的Nginx配置文件示例:

    2024年02月02日
    浏览(30)
  • Nginx禁止某个IP或者IP段访问的方法

    当Nginx代理了很多网站时,我们想让一部分人能访问,一部分人访问不了;那么我们可以来到每个网站的Nginx代理配置文件,针对某个网站单独设置:禁止或允许IP或IP段访问网站。 例:配置文件 如果想禁止某个准确的IP,deny 后直接加IP(deny xxx.xxx.xxx.xxx;) 即可。 上面的配置

    2024年02月11日
    浏览(38)
  • 设置Redis允许使用IP访问

    问题: 可以使用127.0.0.1配置并访问使用Redis,但是换成IP地址就无法访问 解决: 打开安装目录下 redis.windows.config 文件(linux对应redis.conf文件)将 NETWORK 下 \\\" bind 127.0.0.1 \\\" 注释掉或修改为 \\\" bind 0.0.0.0 \\\" (使其他主机可以连接),并将 \\\" protected-modehou yes \\\" 改为 \\\" protected-mode no \\\"(

    2024年02月10日
    浏览(40)
  • centos设置允许访问的ip

    参考: https://www.lmlphp.com/user/64466/article/item/1159141/ https://blog.csdn.net/yangjiehuan/article/details/9253855 https://blog.csdn.net/qq_36746838/article/details/132298722 https://www.cnblogs.com/zhongguiyao/p/14082004.html 对服务器ssh登录限制: vim /etc/ssh/sshd_config 在尾部加一行(允许所有ip登录) AllowUsers root@* 或者(

    2024年02月07日
    浏览(32)
  • 用 Nginx 禁止国外 IP 访问我的网站...

    先来说说为啥要写这篇文章,之前看了下 Nginx 的访问日志,发现每天有好多国外的 IP 地址来访问我的网站,并且访问的内容基本上都是恶意的。因此我决定禁止国外 IP 来访问我的网站。 想要实现这个功能有很多方法,下面我就来介绍基于 Nginx 的 ngx_http_geoip2 模块来禁止国外

    2024年02月13日
    浏览(31)
  • Nginx或Apache禁止某些IP段访问的两种方法

    修改Nginx配置文件nginx.conf Nginx配置访问IP可以修改nginx.conf文件,只需要在server中添加allow和deny的IP即可,如下: server {     listen       80;     server_name  localhost;     allow all;     deny 123.123.123.123;     error_page   500 502 503 504  /50x.html; }   注意!上面的配置中allow必须在deny的前

    2024年02月03日
    浏览(34)
  • window10设置防火墙只允许某些ip访问

    工作中进行测试,需要嵌入式设备通过网线直连电脑进行TCP通讯,但在使用过程中发现总是连接失败,但电脑ping设备的IP是可以ping通的,而嵌入式设备不能操作一些像ping的网络测试指令,就很无奈。 后来通过设置防火墙,发现是防火墙的原因。 可以通过设置入站规则来解决

    2024年02月16日
    浏览(37)
  • nginx 前后的分离 (ip/域名)访问 负载均衡

    首先前端随便访问后端的一个端口,后端监听这个端口进行服务转发。 比如:8888 然后nginx在我们的服务器上部署两个后端 这里我用docker部署了两个 当然你也可以在两个服务器上面部署两个后端,只要在nginx配置代理的时候修改一下ip就可以了。 nginx配置

    2024年04月29日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包