关于 NGINX 防止主动探测 / 爬虫扫描 HTTPS 的配置方法 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
mikewang
V2EX    NGINX

关于 NGINX 防止主动探测 / 爬虫扫描 HTTPS 的配置方法

  •  
  •   mikewang
    MikeWang000000 2023-10-17 01:22:53 +08:00 4413 次点击
    这是一个创建于 796 天前的主题,其中的信息可能已经有所发展或是发生改变。

    公网上暴露 https 端口,难免会被扫到,有些爬虫还会顺藤摸瓜根据证书找到域名,然后接着扫,在日志里留下 /wp-admin 等等记录。

    虽然这些扫描对我服务影响不大,但是看到还是有点烦,因此想利用 NGINX 配置彻底隐藏我的 https 服务。


    我的环境:

    • 内网正常提供 80 / 443 端口服务,
    • 公网仅开放高位端口,转发至 443 ( https )。

    我的配置 (篇幅原因,放到 pastebin 里了):

    [ https://pastebin.com/embed_iframe/bSBarvY8 ]


    也就是说,这样的配置,在 [ https://域名:端口/路径 ] 里:

    1. https 、指定域名、端口,三者完全匹配才能完成 TLS 握手;
    2. 正确路径才有 HTTP 响应;
    3. 其他情况都是直接关闭 TCP 连接。

    即使网络链路中存在中间人,截获了 SNI 域名,由于没有正确路径,依然不能获得响应。中间人只能判定其中有 TLS 流量,但不能扫描到 HTTPS 。


    我想,这样应该能很好的隐蔽起我的 https 服务,只有知晓全路径的人才能访问得到。不知道这样的配置是不是还存在漏洞,欢迎大家指点讨论~

    18 条回复    2024-09-16 05:00:15 +08:00
    ellermister
        1
    ellermister  
       2023-10-17 02:32:42 +08:00 via Android
    高位端口不常用,我的很多公网服务都被扫描,扫描爬虫都比正常访客要高,日志看的烦。用脚本怕 access.log 拉黑 ip ,也拉不完,感觉没啥面对公网环境完美的办法。
    dann73580
        2
    dann73580  
       2023-10-17 02:44:14 +08:00   1
    我用的办法是直接把常见 idc 段 ip 拉黑名单,简单粗暴疗效好。如百度阿里腾讯层峰的全都 ban 了。
    Conantv2
        3
    Conantv2  
       2023-10-17 02:51:12 +08:00 via iPhone
    我记录 SNI 的同时也记录端口,阁下又该如何应对?
    mikewang
        4
    mikewang  
    OP
       2023-10-17 03:13:31 +08:00 via iPhone
    @Conantv2 还有最后一道路径呀,路径不匹配还是直接 444 关闭连接,没有响应的。
    miyuki
        5
    miyuki  
       2023-10-17 07:14:47 +08:00 via iPhone
    我是 default server 也配置一张随便写域名的证书,iptables 443 白名单 cf 段
    hefish
        6
    hefish  
       2023-10-17 07:21:10 +08:00
    那还转发啥啊,直接在高位端口用就是了。
    grittiness
        7
    grittiness  
       2023-10-17 08:49:51 +08:00
    这和 nginx 直接配置`ssl_reject_handshake on;`有什么区别吗?
    dode
        8
    dode  
       2023-10-17 09:00:57 +08:00
    单独配置一个自行生成的证书作为默认网站,真实网站再独立创建一个 server 跑服务
    dzdh
        9
    dzdh  
       2023-10-17 09:02:57 +08:00
    @mikewang 那你直接 443 访问不存在的路径直接 444 一样的效果啊
    mikewang
        10
    mikewang  
    OP
       2023-10-17 09:15:49 +08:00 via iPhone
    #6 @hefish 可以理解为是 /t/966348 [Nginx 的 444 命令(强制切断 TCP 连接),用于对抗运营商检测家宽开服务是否有帮助?] 的增强实现,我也是受这一贴的启发写的配置。

    #7 @ grittiness 额外加上了路径匹配等规则,404 等情况会直接关闭连接。

    #9 @dzdh 加上了 TLS 拒绝握手,可以避免域名探测。
    ryd994
        11
    ryd994  
       2023-10-17 09:17:22 +08:00
    你想更进一步安全的话可以自己签客户端证书,搞 TLS 双向验证。
    greenskinmonster
        12
    greenskinmonster  
       2023-10-17 09:24:04 +08:00   2
    fail2ban 把短时间内产生大量 4xx 错误码的 IP 都 ban 了

    cat /etc/fail2ban/filter.d/nginx-4xx.cnf

    [Definition]
    failregex = ^<HOST>.*"(GET|POST).*" (404|444|403|400) .*$
    ignoreregex =
    dzdh
        13
    dzdh  
       2023-10-17 09:29:23 +08:00
    @mikewang #10 和 ssl_reject_handshake 有啥区别吗
    shijingshijing
        14
    shijingshijing  
       2023-10-17 09:29:42 +08:00
    @dann73580 哪里能下载 idc 段 ip 列表的?或者有什么规则可以自定义?
    awalkingman
        15
    awalkingman  
       2023-10-17 09:45:22 +08:00
    我是把后缀/wp-admin 之类的爆破路径直接重定向到测试网速下载 1000G 文件的链接
    ysc3839
        16
    ysc3839  
       2023-10-17 13:23:53 +08:00 via Android
    if ($public_ip) 应该能改用 deny 。
    另外 error_page 有坑,在其中一个 server block 配置了 400 =444 ,其他 server block 也会继承,想要域名访问时正常返回 400 就不行了。
    mikewang
        17
    mikewang  
    OP
       2023-10-17 14:56:23 +08:00 via iPhone
    @ysc3839 deny 应该是可以的。关于 400 ,确实存在这个问题。但是目前没能找到更好的方法,因为客户端发送的可能就是垃圾数据,nginx 不能判断站点,只能一并切断。
    echo 123 | nc example.com 12345
    nginx 返回一个 400 响应就暴露了
    sn0wdr1am
        18
    sn0wdr1am  
       2024-09-16 05:00:15 +08:00
    听说 nginx 返回 444 ,效果比较好。
    关于     帮助文档     自助广系统     博客     API     FAQ     Solana     2678 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 09:02 PVG 17:02 LAX 01:02 JFK 04:02
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86