kuroの覚え書き

96の個人的覚え書き

Flaskアプリでbotのアクセスを受けたときに拒否する

Flaskのアクセスログを見ていると半分以上がbotのアクセスであった。さらに、過去に生成して、時間経過のために消去した一時ファイルを参照していたりするので、ことごとくエラーになり、無駄な処理をさせられまくっていたので特にしつこくアクセスしてくるIPは一括でブロックすることにした。

from flask import Flask, request, abort

app = Flask(__name__)

# ブロックしたいIPアドレスのプレフィックスを指定
BLOCKED_IP_PREFIXES = ['85.208.96.', '185.191.171.']

@app.before_request
def block_ip():
    # アクセス元IPアドレスを取得
    remote_ip = request.remote_addr

    # ブロックされたIPアドレスの場合は403 Forbiddenを返す
    for prefix in BLOCKED_IP_PREFIXES:
        if remote_ip.startswith(prefix):
            abort(403)

# 通常のルート
@app.route('/')
def index():
    return 'Welcome to the site!'

if __name__ == '__main__':
    app.run(debug=True)

こんな感じ。
とりあえず403をすぐ打ち返し、スクリプトに入らないようにした。これで多少はトラフィックが減ってくれるといいのだが。でもこれはきっといたちごっこになるんだろうな。