V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
sevenandeleven
V2EX  ›  Python

Python Bottle 框架

  •  
  •   sevenandeleven · 2022-12-08 11:15:59 +08:00 · 2673 次点击
    这是一个创建于 748 天前的主题,其中的信息可能已经有所发展或是发生改变。

    以 bottle 框架起了一个简单的 web 服务,用 docker 容器运行,查看容器日志的时候发现有很多不知名的 ip 访问攻击,请问一下,怎么能阻止这些攻击

    15 条回复    2022-12-09 09:17:31 +08:00
    janxin
        1
    janxin  
       2022-12-08 11:17:27 +08:00
    不允许公网访问?
    dayeye2006199
        2
    dayeye2006199  
       2022-12-08 11:19:02 +08:00
    sevenandeleven
        3
    sevenandeleven  
    OP
       2022-12-08 13:16:53 +08:00
    @janxin 我自己就是公网访问的
    sevenandeleven
        4
    sevenandeleven  
    OP
       2022-12-08 13:18:12 +08:00
    @dayeye2006199 nginx 是前端在配置的,应该只是做了个反向代理
    julyclyde
        5
    julyclyde  
       2022-12-08 14:43:48 +08:00   ❤️ 1
    这事和 python 无关也和 bottle 无关
    sevenandeleven
        6
    sevenandeleven  
    OP
       2022-12-08 15:17:59 +08:00
    @julyclyde 那和啥有关,我想看看 bottle 框架有没有什么方法去拦截
    ruanimal
        7
    ruanimal  
       2022-12-08 15:18:05 +08:00
    @julyclyde 由此可得,lz 搜索解决方案时关键词应该也选得不好
    ipwx
        8
    ipwx  
       2022-12-08 16:14:10 +08:00   ❤️ 1
    首先,楼主要搞清楚到底要做什么。
    ----

    如果你是按 “访问频率” 确定访问者是不是在攻击,并且希望拦截访问次数太多的用户。那么在一个 tcp 连接建立之前你并不知道它的 ip ,因此只有当 tcp 连接建立之后你才可能进行拦截。tcp 连接建立之后的网络协议栈是:

    nginx ( tcp 协议 => http 协议 ) => bottle ( 看你配置,可能是 tcp => http ,或者 unix domain => wsgi 都有可能)

    换句话说你第一个拦截的机会出现在 nginx 这里。如果你 nginx 不拦截它,那么你的 bottle 总会接受请求并进行处理。

    python 处理请求的速度是 nginx 的十倍以上!哪怕只是简单的 http 连接!
    python 处理请求的速度是 nginx 的十倍以上!哪怕只是简单的 http 连接!
    python 处理请求的速度是 nginx 的十倍以上!哪怕只是简单的 http 连接!

    所以如果楼主不在 nginx 这一层进行拦截,那么总感觉没有做好这件事。
    ipwx
        9
    ipwx  
       2022-12-08 16:14:22 +08:00
    写错了,python 处理行秋比 nginx 慢十倍。
    ipwx
        10
    ipwx  
       2022-12-08 16:17:26 +08:00
    顺便 nginx 流控本来就有相关模块。

    https://chenyongjun.vip/articles/81
    westoy
        11
    westoy  
       2022-12-08 16:20:29 +08:00
    没屏蔽掉容器暴露的那个端口吧, 那个不是在 INPUT 上拦截的

    https://docs.docker.com/network/iptables/
    sevenandeleven
        12
    sevenandeleven  
    OP
       2022-12-08 16:29:05 +08:00
    @ipwx 因为我起的服务会间断性 502 ,然后日志文件没有捕捉到,并不是因为我接口的原因导致的,然后我查看 docker 容器日志的时候,发现有很多未知名的 ip 在不断发请求,我就在想是不是因为这个原因导致的 502 ,然后想阻止拦截一下
    sevenandeleven
        13
    sevenandeleven  
    OP
       2022-12-08 16:35:35 +08:00
    @westoy 感谢,我去试一下
    locoz
        14
    locoz  
       2022-12-08 21:30:06 +08:00
    首先,根据你的描述和你后面的回复,你这个服务虽然需要能从公网访问,但大概率并不是提供公共服务的,而是你自己用的。如果是这种情况,你完全可以通过对 IP 或请求内包含的其他特征类字段做白名单,或者是通过各类传统 VPN 或 ZeroTier 之类的 SDN 或 FRP 之类的转发工具来实现只有你自己能访问的效果。

    其次,公网上存在着大量的网络空间测绘程序、各种搜索引擎或特定研究项目的爬虫,以及各种全网扫描并利用漏洞的攻击程序,只要你的服务直接对公网开放,就必然会出现这种情况。有陌生 IP 访问并不等于被攻击,绝大多数的访问只是探测一下而已,是无害的。

    如果你是看到了那种攻击程序,在对你的服务进行大量同类请求、尝试利用漏洞的话,前面也有人告诉你了可以做流控来限制。当然还是前面说的,如果你这个服务并不是公共服务,只是你自己用,那你完全可以使用那些工具做到不直接对公网开放的效果,从根源上避免被外人访问的问题。
    julyclyde
        15
    julyclyde  
       2022-12-09 09:17:31 +08:00
    @ipwx 你说的其实是耗时十倍吧
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1002 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 22:18 · PVG 06:18 · LAX 14:18 · JFK 17:18
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.