插件窝 干货文章 Nginx访问控制列表(ACL)的安全设置

Nginx访问控制列表(ACL)的安全设置

Nginx 访问 限制 location 989    来源:    2025-04-20

Nginx访问控制列表(ACL)安全设置指南

Nginx的访问控制列表(ACL)是保护Web应用安全的重要机制。以下是全面的安全设置建议:

1. 基本IP访问控制

# 允许特定IP访问
location /admin {
    allow 192.168.1.100;
    allow 10.0.0.0/24;
    deny all;
}

# 拒绝特定IP
location / {
    deny 123.45.67.89;
    allow all;
}

2. 基于HTTP头的访问控制

# 限制User-Agent
if ($http_user_agent ~* (wget|curl|nikto|sqlmap)) {
    return 403;
}

# 限制Referer
valid_referers none blocked server_names *.example.com;
if ($invalid_referer) {
    return 403;
}

3. 请求方法限制

# 只允许GET和POST方法
location /api {
    limit_except GET POST {
        deny all;
    }
}

4. 请求频率限制

# 限制请求速率
limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;

location / {
    limit_req zone=one burst=20;
}

5. 连接数限制

# 限制单个IP的连接数
limit_conn_zone $binary_remote_addr zone=addr:10m;

location /download {
    limit_conn addr 5;
}

6. 地理位置限制

# 使用GeoIP模块
geo $blocked_country {
    default 0;
    RU 1;  # 阻止俄罗斯IP
    CN 1;  # 阻止中国IP
}

server {
    if ($blocked_country) {
        return 403;
    }
}

7. 文件类型限制

# 禁止访问特定文件类型
location ~* \.(php|sh|pl|py|asp)$ {
    deny all;
}

8. 目录访问控制

# 禁止访问隐藏目录
location ~ /\. {
    deny all;
    access_log off;
    log_not_found off;
}

9. 高级ACL设置

# 结合map模块实现复杂ACL
map $remote_addr $acl {
    default "deny";
    192.168.1.100 "allow";
    10.0.0.0/24 "allow";
}

server {
    if ($acl = "deny") {
        return 403;
    }
}

最佳实践建议

  1. 最小权限原则:只允许必要的访问
  2. 多层防御:结合网络层和应用层ACL
  3. 定期审计:检查ACL规则的有效性
  4. 日志监控:记录所有被拒绝的请求
  5. 动态更新:使用自动化工具管理ACL
  6. 测试验证:部署前充分测试ACL规则

通过合理配置这些ACL规则,可以显著提高Nginx服务器的安全性,防止未授权访问和各种网络攻击。