穷人的高防方案:香港服务器+Cloudflare组合拳实战指南

05-26 13阅读

在当今的网络环境中,小型网站和个人开发者面临着日益严峻的安全威胁:DDoS攻击、恶意爬虫、暴力破解等。商业高防解决方案价格昂贵,对于预算有限的开发者来说难以承受。本文将详细介绍一种经济高效的高防方案:香港服务器配合Cloudflare的免费/付费服务,构建一套完整的安全防护体系,并提供具体的技术实现代码。

方案概述

这套组合方案的核心思路是:

利用香港服务器提供低延迟的主机服务通过Cloudflare提供边缘防护和缓存加速在服务器端实施补充安全措施

这种组合既能享受Cloudflare的全球网络防护,又能保持亚洲地区良好的访问速度,总成本可控制在每月100元人民币以内。

第一部分:Cloudflare基础配置

1.1 域名解析设置

首先需要将域名DNS解析托管到Cloudflare:

# 查询当前域名DNS记录dig +trace example.com# 修改域名注册商处的NS记录为Cloudflare的NS服务器ns1.cloudflare.comns2.cloudflare.com

1.2 Cloudflare安全等级设置

在Cloudflare控制面板中,设置适当的安全等级:

// 通过Cloudflare API设置安全等级const fetch = require('node-fetch');async function setSecurityLevel(zoneId, apiKey, level) {  const response = await fetch(    `https://api.cloudflare.com/client/v4/zones/${zoneId}/settings/security_level`,    {      method: 'PATCH',      headers: {        'Authorization': `Bearer ${apiKey}`,        'Content-Type': 'application/json'      },      body: JSON.stringify({ value: level }) // 可选: 'essentially_off', 'low', 'medium', 'high', 'under_attack'    }  );  return await response.json();}

1.3 防火墙规则配置

配置基本的防火墙规则过滤恶意流量:

# 使用Cloudflare API创建防火墙规则import requestsdef create_firewall_rule(api_key, zone_id, rule_name, action, expression):    url = f"https://api.cloudflare.com/client/v4/zones/{zone_id}/firewall/rules"    headers = {        "Authorization": f"Bearer {api_key}",        "Content-Type": "application/json"    }    data = {        "filter": {            "expression": expression,            "paused": False        },        "action": action,        "description": rule_name    }    response = requests.post(url, headers=headers, json={"rules": [data]})    return response.json()# 示例:阻止已知恶意用户代理create_firewall_rule(    API_KEY,     ZONE_ID,     "Block Bad Bots",    "block",    "(http.user_agent contains \"sqlmap\") or (http.user_agent contains \"nmap\")")

第二部分:香港服务器加固

2.1 基础系统加固

#!/bin/bash# 基础服务器加固脚本# 1. 更新系统apt update && apt upgrade -y# 2. 修改SSH端口并禁用root登录sed -i 's/^#Port 22/Port 2222/' /etc/ssh/sshd_configsed -i 's/^PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_configsystemctl restart sshd# 3. 启用基本防火墙规则ufw allow 2222/tcp   # SSH新端口ufw allow 80/tcp     # HTTPufw allow 443/tcp    # HTTPSufw enable# 4. 安装fail2ban防止暴力破解apt install fail2ban -ysystemctl enable fail2bansystemctl start fail2ban# 5. 配置自动安全更新apt install unattended-upgrades -ydpkg-reconfigure -plow unattended-upgrades

2.2 Nginx防护配置

# /etc/nginx/nginx.conf 部分安全配置http {    # 限制请求大小和缓冲区    client_body_buffer_size 1k;    client_header_buffer_size 1k;    client_max_body_size 1k;    large_client_header_buffers 2 1k;    # 限制请求速率    limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;    # 只允许Cloudflare IP访问    include /etc/nginx/cloudflare.conf;    server {        listen 80;        server_name example.com;        # 只处理来自Cloudflare的流量        allow 103.21.244.0/22;        allow 103.22.200.0/22;        # ...其他CloudflareIP        deny all;        location / {            limit_req zone=one burst=5 nodelay;            proxy_pass http://localhost:8080;            proxy_set_header X-Real-IP $remote_addr;            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;        }    }}

生成Cloudflare IP列表的脚本:

# 获取最新Cloudflare IP列表并生成Nginx配置import requestsdef generate_cloudflare_ips():    v4 = requests.get('https://www.cloudflare.com/ips-v4').text.splitlines()    v6 = requests.get('https://www.cloudflare.com/ips-v6').text.splitlines()    with open('/etc/nginx/cloudflare.conf', 'w') as f:        f.write("# Cloudflare IP ranges\n")        for ip in v4:            f.write(f"allow {ip};\n")        for ip in v6:            f.write(f"allow {ip};\n")        f.write("deny all;\n")generate_cloudflare_ips()

第三部分:高级防护措施

3.1 使用Cloudflare Workers进行边缘防护

// 部署在Cloudflare Worker上的边缘防护脚本addEventListener('fetch', event => {  event.respondWith(handleRequest(event.request))})async function handleRequest(request) {  // 1. 检查User-Agent  const ua = request.headers.get('user-agent') || ''  const badBots = ['sqlmap', 'nmap', 'hydra', 'nikto']  if (badBots.some(bot => ua.toLowerCase().includes(bot))) {    return new Response('Access denied', { status: 403 })  }  // 2. 限制请求方法  if (!['GET', 'POST', 'HEAD'].includes(request.method)) {    return new Response('Method not allowed', { status: 405 })  }  // 3. 验证来源IP  const ip = request.headers.get('cf-connecting-ip')  const badIPs = await getBlockedIPs()  if (badIPs.includes(ip)) {    return new Response('IP blocked', { status: 403 })  }  // 4. 转发合法请求  return fetch(request)}// 从KV存储获取被封禁的IP列表async function getBlockedIPs() {  // 这里可以连接到你的数据库或KV存储  return ['1.1.1.1', '2.2.2.2'] // 示例}

3.2 服务器端实时防护

# 使用Python实现简单的实时流量分析from collections import defaultdictimport timeclass RequestAnalyzer:    def __init__(self, threshold=100, interval=60):        self.threshold = threshold        self.interval = interval        self.request_counts = defaultdict(int)        self.blocked_ips = set()    def log_request(self, ip):        current_time = time.time()        self.request_counts[(ip, int(current_time // self.interval))] += 1        # 检查是否超过阈值        count = sum(            v for (k_ip, k_time), v in self.request_counts.items()            if k_ip == ip and current_time - k_time * self.interval < self.interval        )        if count > self.threshold and ip not in self.blocked_ips:            self.blocked_ips.add(ip)            # 这里可以调用API将IP添加到Cloudflare防火墙规则            print(f"Blocking IP: {ip}")            return False        return True# 示例使用analyzer = RequestAnalyzer(threshold=50, interval=60)if analyzer.log_request("192.168.1.1"):    # 处理正常请求    passelse:    # 拒绝请求    pass

第四部分:监控与自动化

4.1 使用Prometheus和Grafana监控

# docker-compose.yml for monitoringversion: '3'services:  prometheus:    image: prom/prometheus    ports:      - "9090:9090"    volumes:      - ./prometheus.yml:/etc/prometheus/prometheus.yml  grafana:    image: grafana/grafana    ports:      - "3000:3000"  node_exporter:    image: prom/node-exporter    ports:      - "9100:9100"

对应的Prometheus配置:

# prometheus.ymlglobal:  scrape_interval: 15sscrape_configs:  - job_name: 'node'    static_configs:      - targets: ['node_exporter:9100']  - job_name: 'nginx'    metrics_path: '/stub_status'    static_configs:      - targets: ['nginx:80']

4.2 自动化防护脚本

#!/bin/bash# 自动防护脚本# 1. 监控异常请求并自动封禁tail -f /var/log/nginx/access.log | grep --line-buffered ' 404 ' | awk '{print $1}' | \while read ip; do    if [ $(grep -c $ip /tmp/blocked.ips) -eq 0 ]; then        echo $ip >> /tmp/blocked.ips        # 调用Cloudflare API封禁IP        curl -X POST "https://api.cloudflare.com/client/v4/user/firewall/access_rules/rules" \             -H "Authorization: Bearer $CF_API_KEY" \             -H "Content-Type: application/json" \             --data "{\"mode\":\"block\",\"configuration\":{\"target\":\"ip\",\"value\":\"$ip\"},\"notes\":\"Automatic block due to suspicious activity\"}"    fidone

第五部分:成本分析与优化

5.1 成本明细

香港服务器:阿里云轻量应用服务器(1核1G,30M带宽)约$10/月Cloudflare:免费版足够基本防护,专业版$20/月提供更多功能域名:普通.com域名约$10/年

5.2 性能优化技巧

缓存策略优化:调整Cloudflare缓存规则,减少回源请求

// Cloudflare Worker缓存优化addEventListener('fetch', event => {  event.respondWith(cacheFirst(event.request))})async function cacheFirst(request) {  const cache = caches.default  let response = await cache.match(request)  if (!response) {    response = await fetch(request)    // 对静态资源设置缓存    if (request.url.endsWith('.js') || request.url.endsWith('.css')) {      response = new Response(response.body, response)      response.headers.append('Cache-Control', 'max-age=86400')      event.waitUntil(cache.put(request, response.clone()))    }  }  return response}

负载均衡:当流量增长时,可以添加更多香港服务器实例

香港服务器加Cloudflare的组合提供了一种经济高效的高防解决方案。通过本文介绍的技术措施,可以在有限的预算下构建起多层次的防护体系:

Cloudflare提供边缘防护,过滤大多数恶意流量香港服务器确保亚洲地区良好的访问速度服务器端补充防护措施形成纵深防御自动化监控和响应机制提高防护效率

这套方案特别适合中小型网站、个人开发者和初创企业,能够在控制成本的同时提供企业级的安全防护能力。随着业务增长,可以逐步升级Cloudflare套餐和服务器配置,实现平滑扩展。

免责声明:本文来自网站作者,不代表CIUIC的观点和立场,本站所发布的一切资源仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。客服邮箱:ciuic@ciuic.com

目录[+]

您是本站第14142名访客 今日有21篇新文章

微信号复制成功

打开微信,点击右上角"+"号,添加朋友,粘贴微信号,搜索即可!