访问控制分类
Nginx访问控制共有两种模式:
基于IP的访问控制 | ngx_http_access_module |
基于用户登录认证 | ngx_http_auth_basic_module |
基于IP的访问控制
ngx_http_access_module
模块允许限制对某些客户端地址的访问。
配置格式
语法:allow address | CIDR | unix: | all;
默认:-
上下文:http,server,location,limit_except
语法:deny address | CIDR | unix: | all;
默认:-
上下文:http,server,location,limit_except
允许指定的网络或地址访问。 如果unix:
被设置,则允许所有UNIX域套接字的访问。
拒绝指定的网络或地址访问。 如果unix:
被设置,则拒绝所有UNIX域套接字的访问。
示例
location / {
deny 192.168.1.1;
allow 192.168.1.0/24;
allow 10.1.1.0/16;
allow 2001:0db8::/32;
deny all;
}
顺序检查规则,直到找到第一个匹配项。 在此示例中,仅对IPv4网络10.1.1.0/16和192.168.1.0/24(地址192.168.1.1除外)和IPv6网络2001:0db8::/32允许访问。在有很多规则的情况下,最好使用ngx_http_geo_module
模块。
局限性
ngx_http_access_module
是根据remote_addr
这个变量来识别客户端IP的,可以使用反向代理绕过这一配置。如下图所示,即使Nginx禁止IP1进行访问,但是通过反向代理后remote_addr的值为IP2。
解决方法
- 采用别的HTTP头信息控制访问,如:
HTTP_X_FORWARD_FOR
- 结合geo模块
- 通过HTTP自定义变量传递
基于用户登录认证
ngx_http_auth_basic_module
模块允许通过使用"HTTP基本身份验证"协议验证用户名和密码来限制对资源的访问。
配置格式
语法:auth_basic string | off;
默认:auth_basic off;
上下文:http, server, location, limit_except
语法: auth_basic_user_file file;
默认: —
上下文: http, server, location, limit_except
按以下格式保留用户名和密码的文件:
name1:password1
name2:password2:comment
name3:password3
文件名可以包含变量。
支持以下几种密码类型:
- 用
crypt()
函数加密;可以使用Apache HTTP Server发行版中的"htpasswd"函数或"openssl passwd"命令生成; - 使用基于MD5的密码算法(apr1)的Apache变体进行哈希处理;可以使用相同的工具生成;
- 由RFC 2307中所述的"{scheme} data"语法(1.0.3)指定;当前实施的方案包括一些软件包使用的PLAIN(不应该使用示例1),SHA(1.3.13)(不应该使用普通SHA-1哈希)和SSHA(盐化的SHA-1哈希。OpenLDAP和Dovecot)。
示例
location / {
auth_basic "Auth access";
auth_basic_user_file /opt/nginxconf/auth_conf;
root html;
index index.html index.htm;
}
# auth_conf 文件使用htpasswd命令生成
# htpasswd -c filepath username
局限性
- 用户信息依赖文件
- 操作管理机械,效率低下
解决方案
- Nginx结合LUA实现高效认证
- Nginx和LDAP打通,利用
nginx-auth-ladp
模块
版权属于:带翅膀的猫
本文链接:https://www.chengpengper.cn/archives/126/
转载时须注明出处及本声明