You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker部署Flask应用:能否在Gunicorn中配置IP白名单?

解决方案:在Gunicorn层面实现IP白名单拦截

可以在Gunicorn层面实现IP白名单拦截,无需依赖负载均衡器就能提前阻断恶意请求,从源头减少日志占用。以下是两种可行方案:

方案1:自定义Gunicorn中间件(推荐)

通过编写WSGI中间件,在请求到达Flask应用前完成IP校验,直接拒绝非法请求,完全跳过Flask的处理流程,彻底避免这类请求生成日志。

  1. 创建中间件文件ip_middleware.py:
class IPWhitelistMiddleware:
    def __init__(self, app, allowed_ips):
        self.app = app
        self.allowed_ips = allowed_ips

    def __call__(self, environ, start_response):
        client_ip = environ.get('REMOTE_ADDR')
        # 如需支持CIDR网段,可引入ipaddress模块做解析判断
        if client_ip not in self.allowed_ips:
            start_response('403 Forbidden', [('Content-Type', 'text/plain')])
            return [b'Forbidden']
        return self.app(environ, start_response)
  1. 在Gunicorn配置文件gunicorn.conf.py中引入中间件:
from ip_middleware import IPWhitelistMiddleware

allowed_ips = {'192.168.1.1', '10.0.0.5'}  # 替换为你的白名单IP

def post_fork(server, worker):
    server.app = IPWhitelistMiddleware(server.app, allowed_ips)
  1. 启动Gunicorn时指定配置文件:
gunicorn --config gunicorn.conf.py app:app

方案2:日志层面过滤(轻量备选)

如果仅需减少日志输出,不需要完全拦截请求,可通过Gunicorn的日志管道过滤合法IP的请求:

gunicorn app:app --access-logfile - | grep -E '192.168.1.1|10.0.0.5'

注:如需支持CIDR网段过滤,需用awk结合ipcalc工具编写更复杂的过滤脚本。

针对TLS扫描的额外优化

如果恶意请求是针对TLS漏洞的扫描(比如过时协议、非法证书请求),这类请求可能在Gunicorn处理TLS握手阶段就生成日志。此时建议在Docker容器前添加Nginx做反向代理:

  • 由Nginx处理TLS终止,配置严格的TLS协议/加密套件规则,直接拒绝非法TLS请求
  • 在Nginx层面配置IP白名单,彻底阻断恶意IP的请求,不让它们到达Gunicorn
    这种方式在网络请求和TLS处理上的性能比Gunicorn更高效。

内容的提问来源于stack exchange,提问作者finisinfinitatis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 10:52:45