惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园_首页
博客园 - Franky
大猫的无限游戏
大猫的无限游戏
博客园 - 三生石上(FineUI控件)
量子位
博客园 - 聂微东
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
S
SegmentFault 最新的问题
Apple Machine Learning Research
Apple Machine Learning Research
爱范儿
爱范儿
V
Visual Studio Blog
雷峰网
雷峰网
T
Tailwind CSS Blog
宝玉的分享
宝玉的分享
Blog — PlanetScale
Blog — PlanetScale
有赞技术团队
有赞技术团队
博客园 - 叶小钗
Microsoft Azure Blog
Microsoft Azure Blog
T
The Blog of Author Tim Ferriss
U
Unit 42
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
小众软件
小众软件
阮一峰的网络日志
阮一峰的网络日志
Y
Y Combinator Blog

吹比💨

NFS 服务引发的一次“诡异”应急响应 银狐使用WDAC来对抗杀软 浏览器第三方Cookie保护导致无法使用Github.dev 使用pushState伪造浏览器地址栏 一次排查网站劫持过程流水账 手动导出 Microsoft Authenticator 中的2FA密钥 FrontJS网站错误监控插件存在弹窗广告 宝塔面板可能存在未知漏洞的分析与处置方法 CDN厂商解决域前置问题 中文域名那些事 TLS握手指纹(JA3/JA3S)检测恶意软件流量 [A-Z]{2}\d{2}.cc 团伙的一些公开信息 Azure旗下奇怪的静态托管服务 Csrf与浏览器第三方Cookie策略的问题 Pppoe密码嗅探 Publicsuffix那些事 一次有意思的域名追踪 CobaltStrike通信中host字段的获取 XFF那些事 CORB那些事 Referrer Policy那些事 使用CloudFlare来为网站开启客户端证书验证 DNS那些事 用flask来在线管理你的iptables 屏蔽掉向日葵的有效方法 帝国cms在防止内容采集方面做的工作 身份验证器是如何验证我们的身份? 利用GoogleAppsScript自动回复短信实现保号 Nginx实用模块 有关跨域请求的一些记录
使用CloudFlare的IP Lists功能来做访问控制
榆木 · 2023-09-02 · via 吹比💨

功能介绍

Use lists to refer to a group of items (such as IP addresses) collectively, by name, in rule expressions of Cloudflare products. You can create your own custom lists or use lists managed by Cloudflare, such as Managed IP Lists.

相关文档链接: https://developers.cloudflare.com/waf/tools/lists/create-dashboard/

由于免费版本只有一个IP列表可以用,所以此处我将它用作白名单可信IP的作用,不要局限思想于此用法。

用法

可以在CloudFlare的各种规则表达式中使用该功能。举例:

  1. 直接通过CloudFlare的WAF功能来编写规则 如图,可以直接对IP源地址与创建的列表的逻辑关系来采取一些措施。可以灵活结果其他字段,例如host是自己的个人笔记域名,Url包括/wp-admin/等。
  2. 在转换规则中使用列表功能来修改一些请求 如图所示,当IP在我定义的可信列表中时候,为请求设置一个特殊的自定义HTTP标头。然后就可以在源站通过识别此字段做一些访问控制(把上面的WAF功能直接通过源站相关配置来实现)。
server
{
        listen 80;
        root /var/www/html;

        location /
        {
                
                if ($http_trusted_request != 1)
                {
                        # 不可信的请求
                }
                
                # 可信的请求
         
                
        }
}

结合Github Actions

可以结合Github Actions来方便我们实时同步最新的可信IP列表

import requests
ips=[]
with open("ips.txt")as f:
    for line in f.readlines():
        line = line.strip()
        if len(line.split(","))==2:
            ips.append({'ip':line.split(",")[0].strip(),'comment':line.split(",")[1].strip()})

headers = {
    'Authorization': 'Bearer XXXXXX',
}
print(ips)
response = requests.put('https://api.cloudflare.com/client/v4/accounts/<ACCOUNT_ID>/rules/lists/<LIST_ID>/items', headers=headers, json=ips).json()
print(response)

因为我是在私有仓库来跑的,所以直接将CloudFlare Api的凭证写到了代码里,如果有公开仓库的需求,可以使用Actions secrets
ips.txt的内容可以是这样

workflow的写法很简单,就是执行这个脚本即可

name: update trustip
on:
  push:
    branches:
      - main
jobs:
  build:
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        python-version: [3.9]
    steps:
    - uses: actions/checkout@v2
    - name: Set up Python ${{ matrix.python-version }}
      uses: actions/setup-python@v2
      with:
        python-version: ${{ matrix.python-version }}
    - name: Install dependencies
      run: |
        python -m pip install --upgrade pip
        python -m pip install requests
        python main.py

详细的接口说明见:https://developers.cloudflare.com/waf/tools/lists/lists-api/endpoints/