Cloudflare 開発

cloudflared を Pythonで実装する

はじめに

cloudflared はCloudflareが提供するサービスで無償で登録なしに利用できるトンネリングのサービスです。

ngrokの代わりにcloudflaredを使ってみよう - 技術的な何か。
ngrokの代わりにcloudflaredを使ってみよう - 技術的な何か。

はじめに Cloudflareでcloudflaredというクライアントで動いているサービスを公開できるアプリケーションがあるみたいです。ngrokの代わりなりそうなものです。特にユーザー登録などない

level69.net

そこでPythonに実装する方法を紹介します。

例えば、これを利用すると通常は外部からのアクセスが容認されていないサービスに、外部からのアクセスできるバックドアのようなものも利用できると思います。

これらを実装するためにpycloudflaredのモジュールを利用します。

GitHub - Bing-su/pycloudflared: python cloudflared wrapper
GitHub - Bing-su/pycloudflared: python cloudflared wrapper

python cloudflared wrapper. Contribute to Bing-su/pycloudflared development by creating an account o ...

github.com

これはpython cloudflared wrapperです。

実装サンプル

pycloudflaredをインストールします。

pip install pycloudflared

簡単なPythonのシンプルHTTPサーバーをpycloudflaredで公開するサンプルです。

http_server.py に保存しています。

import http.server
import socketserver
from http import HTTPStatus
from pycloudflared import try_cloudflare

class SilentRequestHandler(http.server.SimpleHTTPRequestHandler):
    def do_GET(self):
        self.send_response(HTTPStatus.OK)
        self.send_header("Content-type", "text/html")
        self.end_headers()
        self.wfile.write(b"Hello World")

    def log_message(self, format, *args):
        pass

PORT = 8000
Handler = SilentRequestHandler

server = http.server.HTTPServer(("", PORT), Handler)
server.allow_reuse_address = True

print(f"Serving on port {PORT}")

try:
    print("Setting up Cloudflare tunnel...")
    try_cloudflare(port=PORT)
    server.serve_forever()
except KeyboardInterrupt:
    print("Shutting down...")
    server.shutdown()

 

これを実行します。

python3 http_server.py
Serving on port 8000
Setting up Cloudflare tunnel...
* Running on https://beads-respondent-charleston-reporter.trycloudflare.com
* Traffic stats available on http://127.0.0.1:37747/metrics

外部からアクセスして確認します。

curl -Ssi https://great-testimonials-perl-accordingly.trycloudflare.com
HTTP/2 200
date: Sun, 19 Mar 2023 02:31:02 GMT
content-type: text/html
cf-ray: 7aa24c009a111d97-NRT
cf-cache-status: DYNAMIC
server: cloudflare

Hello World

内部からアクセスします。

curl -Ssi localhost:8000
HTTP/1.0 200 OK
Server: SimpleHTTP/0.6 Python/3.10.6
Date: Sun, 19 Mar 2023 02:35:45 GMT
Content-type: text/html

Hello World

以上で確認は完了です。

*サンプルの一部コードはGPT-4により生成しています

まとめ

cloudflaredをpythonで実装する方法を紹介しました。cloudflareがホストしていることや、python に組み込んで簡単に利用したい場合にはよいツールなのではないでしょうか。

このようなツールには悪用されるケースがあるため注意も必要です。

PyPI に悪意のパッケージが登場:CloudFlare Tunnel を悪用するトロイの木馬 – IoT OT Security News
PyPI に悪意のパッケージが登場:CloudFlare Tunnel を悪用するトロイの木馬 – IoT OT Security News

Malicious PyPi packages create CloudFlare Tunnels to bypass firewalls 2023/01/07 BleepingComputer -- ...

iototsecnews.jp

-Cloudflare, 開発
-