文档
CloudFront: aws版CF使用方法及自选IP探索(附可用IP)

CloudFront: aws版CF使用方法及自选IP探索(附可用IP)

教程cloudfront自选ipCloudFront: aws版CF使用方法及自选IP探索(附可用IP)home again2020 - 12 - 142024 - 10 - 21CF创建在aws后台直接搜:CloudFront 来到CF面板,开始创建第一个CF。出现的第一个页面涉及到很多选项,有的

教程cloudfront自选ip

CloudFront: aws版CF使用方法及自选IP探索(附可用IP)

home again

CF创建

在aws后台直接搜:CloudFront 来到CF面板,开始创建第一个CF。出现的第一个页面涉及到很多选项,有的还比较复杂繁琐,很多人都被拦在这里。
创建aws的CF,首先要关注两个东西:源域名和备用域名。原域名就是你的源站,可以是网站代理服务器等你想要加速的服务。因为CF不支持源站为IP格式,所以你先要弄个域名。备用域名就是你绑定并可以使用CF的域名。
CloudFront: aws版CF使用方法及自选IP探索(附可用IP)

举例:服务器1.1.1.1上搭建了v2ray,然后创建域名cf – behind.mebi.me解析到1.1.1.1。那么原域名填写cf – behind.mebi.me,另外我还需一个域名cf – front.mebi.me,先不用解析,把这个域名填到备用域名 。

接下来解决一些小问题。
CF的国内IP只支持443端口(暂不讨论能扫到80端口的IP),这就要求搭建的v2传输方式必须带有tls,cdn加速又必须用ws,所以传输方式就定死了,只能ws+tls 。

最低源ssl协议

选TLSv1,版本越小越好,版本高了对你搭建的要求就高了。原协议策略选择仅HTTPS。CF可以支持源站任意端口,利用这点我们可以在一台服务器上搭建多个v2并且都走CF。
CloudFront: aws版CF使用方法及自选IP探索(附可用IP)

查看协议策略

选择HTTP和HTTPS。这图是我别人博客拿的。如果我们要自选国内IP,选择将HTTP重定向到HTTPS基本屁用没有,因为CF的国内IP基本不支持80端口,哪来的重定向 。
CloudFront: aws版CF使用方法及自选IP探索(附可用IP)

关于SSL证书选择

如果你选择CF给的域名,格式 xxxxxxxxx.cloudfront.net,就选择默认CloudFront证书。如果你用自己域名 cf-front.mebi.me,加上我们自选的国内ip只开放443端口,我们必须要上传证书。
CloudFront: aws版CF使用方法及自选IP探索(附可用IP)

默认自定义ssl证书是灰色点不了,我们先要点使用acm请求或导入证书,我们可以通过aws来申请cf – front.mebi.me的证书,也可以把自己申请的证书导入。证书申请成功或者导入的证书有效之后,刷新创建cf的页面,当证书与填写的备用域名匹配,自定义ssl证书才可选 。

我们可以借助certbot免费申请通配符证书,这样可以解决创建多个CF要导入多次ssl证书的麻烦。不用担心有效期只有90天,借助crontab就可以实现自动续签。但是你的CF能活满90天吗?

wget https://dl.eff.org/certbot-auto
chmod a+x certbot - auto
./certbot-auto certonly

前面说了aws也可以申请证书,我试过申请 * .域名 的形式,但好像这玩意不是通配符域名 ?

自选IP

原理

CF的节点打开,在响应的header里Server字段值为CloudFront,利用这方法我们可以用脚本自动检测CF的IP 。
CloudFront: aws版CF使用方法及自选IP探索(附可用IP)

脚本的大致思路是找到CF的所有IP段,然后用zmap工具检测这些IP的443端口通不通,保留通的IP再进行header里Server字段值的判断,值为CloudFront即为CF。

扫描脚本

脚本运行条件:python3环境、numpy和requests模块、另加zmap工具。python3环境可以改为python环境,只需要把脚本的queue模块名改成Queue,第十四行也改成Queue。zmap工具也可以是masscan或者nmap,这两种工具下面有介绍。

Ubuntu/Debian系统

apt-get install zmap python3 -y
apt-get install python3-pip
pip3 install requests
pip3 install numpy

CentOS系统

yum install gcc+ gcc-c++ make python3
wget ftp://ftp.gnu.org/gnu/gengetopt/gengetopt-2.22.6.tar.gz
tar -zvxf gengetopt-2.22.6.tar.gz
cd is gengetopt-2.22.6 gengetopt-2.22.6
./configure
make
make install
cd .. && git clone https://github.com/zmap/zmap
cd zmap/
cmake .
make -j4
make install
pip3 install requests
pip3 install numpy

此脚本全复制自cloudfront_nodecat,这里仅做为备份和参考。

# code = utf-8
import threading
import request
import queue
import sy
import re
import os
import numpy as np

#
def bThread(iplist ):
threadl = []
global q
q = queue.Queue()
for host in iplist:
q.put(host)

for x in range(0, int(SETTHREAD)):
threadl.append(tThread(q ) )

for t in threadl:
t.start()
for t in threadl:
t.join ( )

#create thread
class tThread(threading.Thread):
def _ _ init__(self , queue ):
threading . Thread.__init__(self )
self.queue = q

def run(self):
while not self.queue.empty ( ):
host = self.queue.get ( )
try:
checkServer(host)
except :
continue


def checkalive ( ):
print('\n[Step1] Scanning alive servers:\n')
zmap = os.popen('zmap -w ' + SETIPLIST + ' -p 443 -B 30M')
global IPLIST
IPLIST = zmap.read().splitlines()

def checkServer(host):
header ={'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36'}
aimurl = "http://"+host+":443"
response = requests.get(url = aimurl , header = header , timeout=10 )
serverText = response.headers['server']
if ( serverText = = " CloudFront " ):
print("NewNode:" + host +" has been catched!\n")
if MUTEX.acquire(3 ):
with open("result.txt","a+ " ) as file :
file.write(host+"\n")
file.close()
MUTEX.release()

if __name__ == '__main__':
os.system("clear")
print('\n############# Cloud Front Scan ################')
print ( ' # author Madlifer|blog : https://vicho.me # ' )
print('###############################################\n')
global SETIPLIST
global SETTHREAD
global MUTEX
MUTEX = threading.Lock()
SETIPLIST = sys.argv[1 ]
SETTHREAD = sys.argv[2 ]
checkalive()
print('\n[Step2 is Start ] start Scanning edge nodes:\n ' )
bThread(IPLIST)
print('\n[WOW] Winner Winner Chicken Dinner!\n')

在脚本的同级目录下新建iplist.txt,将cf的ip段放进去。运行 :

python3 scan.py iplist.txt 200

上面的200表示python检测Server字段的多进程数量,越大进程越大速度越快。你还可以修改扫描脚本scan.py第43行内,把 – b 30M参数调到更大,那么zmap工具扫描的更快。速度快能减省时间但牺牲准确度,这个度自己把握。速度越快有可能会被你的服务商视为扫描攻击,有劝退的风险 。

国内ip段

自测zmap这工具不太准,有很多IP的443端口开着的但却扫不到。zmap速度是快但是丢掉了准确率,可以使用其他替代工具masscan和nmap。

nmap工具

nmap工具可以提供很详细的扫描情况但是速度最慢,如果需要提高速度就用如下参数,这是我自己试验出来的速度不错,这段命令是可以直接放到扫描脚本scan.py的第43行替换zmap。虽然速度有所提升但是还是比较慢,还有就是没有扫描进度 。

nmap -sS -Pn --open --min-hostgroup 100 --min-parallelism 100 -n -T4 -iL iplist.txt -p443 -vv | awk '/Discovered open port 443\/tcp/{print $6}'

nmap安装
可以直接安装。

masscan工具

masscan速度处于zmap和nmap两者之间,准确度也处于两者之间。masscan可以兼容部分nmap参数。以下命令也可以直接替换zmap。

masscan/bin/masscan -sS -Pn -n -p443 --rate 500 -iL iplist.txt | awk '{print $6}'

masscan安装
CentOS

yum install git gcc make libpcap-devel
git clone https://github.com/robertdavidgraham/masscan
cd masscan
make

Debian/Ubuntu

apt-get install git gcc make libpcap-dev
git clone https://github.com/robertdavidgraham/masscan
cd masscan
make

masscan工具在masscan目录下的bin/masscan中。

给几个IP段

CF的国内IP质量挺高,有很多idc机房和大厂,但是断流你说难不难。给几个IP段自己去扫吧,很多都是我12月份自己扫的,新鲜的很。话说我为什么这么无私?不断流速度直接拉顶,断流让你欲哭无泪,谁用谁知道 。

12月24日扫到两个Ucloud广州BGP:106.75.167.14、106.75.173.101

    江苏电信
    58.221.56.0/24
    58.221.36.0/24

    北京BGP
    106.75.4.162
    106.75.16.214
    106.75.34.130
    106.75.90.226
    106.75.99.152
    106.75.119.188
    106.75.120.201

    广州BGP
    106.75.130.199
    106.75.136.107
    106.75.139.38
    106.75.141.189
    106.75.146.128
    106.75.173.101
    106.75.145.227

    上海BGP
    106.75.213.165
    106.75.226.254
    106.75.216.223
    106.75.231.127
    106.75.231.151
    106.75.231.132
    106.75.231.139
    106.75.231.172

    广州广东
    119.147.182.0/24 几乎全D段

    漕河泾IDC
    210.51.40.0/24

    上海联通
    211.95.52.157
    211.95.52.172

    只给我扫的部分,太多了。另外很多IP支持80端口。