nginx中对IP封禁的三种方法

2023-05-0114:36:20服务器及运维Comments2,738 views字数 1417阅读模式

Nginx 中可以使用许多不同的方法来实现 IP 封禁,这里介绍三种常见的方法:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/38108.html

1.  使用 Nginx 内置的 ngx_http_access_module 模块文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/38108.html

ngx_http_access_module 模块是 Nginx 内置的模块,它可以用来控制客户端的访问权限,包括允许或禁止某些 IP 访问 Nginx 服务器。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/38108.html

可以在 Nginx 配置文件中设置 allow 和 deny 来限制 IP 访问。例如:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/38108.html

http {文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/38108.html

# ...省略其他配置...文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/38108.html

# 允许所有 IP 访问文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/38108.html

allow all;文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/38108.html

# 禁止 IP 为 192.168.1.100 的访问文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/38108.html

deny 192.168.1.100;文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/38108.html

}文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/38108.html

2.  使用 Nginx 的第三方模块 ngx_http_limit_conn_module文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/38108.html

ngx_http_limit_conn_module 模块可以用于限制连接速率,防止恶意客户端过多连接服务器,可以通过它来防止 DoS 攻击。该模块的原理是通过限制客户端 IP 地址的连接数来控制访问。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/38108.html

使用该模块需要在 Nginx 配置文件中添加以下配置:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/38108.html

http {文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/38108.html

# ...省略其他配置...文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/38108.html

# 按照 IP 限制连接数文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/38108.html

limit_conn_zone $binary_remote_addr zone=conn_limit_per_ip:10m;文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/38108.html

# 每个 IP 最多同时允许 10 个连接文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/38108.html

limit_conn conn_limit_per_ip 10;文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/38108.html

}文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/38108.html

上面的例子中,limit_conn_zone 指令将二进制的远程 IP 地址与一个名为 conn_limit_per_ip 的共享内存区域进行关联,并将其大小限制为 10MB。接下来,limit_conn 指令使用该共享内存区域限制了每个 IP 地址的并发连接数不超过 10 个。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/38108.html

3.  使用第三方模块 ngx_http_accesskey_module文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/38108.html

ngx_http_accesskey_module 可以用于生成特殊的签名,可以用来防止非法访问和恶意攻击。它基于密钥的访问控制机制,只有拥有密钥的客户端才能访问服务器。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/38108.html

使用该模块需要在 Nginx 配置文件中添加以下配置:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/38108.html

http {文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/38108.html

# ...省略其他配置...文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/38108.html

# 指定密钥文件位置和算法文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/38108.html

accesskey on;文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/38108.html

accesskey_hashmethod md5;文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/38108.html

accesskey_arg "key";文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/38108.html

accesskey_signature "$remote_addr|$uri|$arg_key|secret_key";文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/38108.html

# 禁止 IP 为 192.168.1.100 的访问文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/38108.html

deny 192.168.1.100;文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/38108.html

}文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/38108.html

上面的例子中,accesskey 指令开启了密钥访问控制机制。accesskey_hashmethod 指令指定了加密算法为 MD5,accesskey_arg 指令指定了参数名称为 key,accesskey_signature 指令指定了签名的内容,其中包括远程客户端 IP 地址、访问的 URI、请求参数中的 key 值和一个私钥 secret_key。只有在客户端发送包含正确签名的请求时才允许访问。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/38108.html

总结:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/38108.html

以上是三种常见的在 Nginx 中实现 IP 封禁的方法。其中,使用 ngx_http_access_module 模块的方法简单易懂,但是需要手动维护黑名单。使用 ngx_http_limit_conn_module 可以限制客户端的并发连接数,但是需要合理设置参数。使用 ngx_http_accesskey_module 可以生成特殊的签名进行访问控制,但是需要生成和维护密钥。选择何种方法取决于具体的业务需求和实际情况。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/38108.html

  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/yunwei/38108.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定