Могу ли я иметь диапазон белого списка IP для Flask, а не список IP? - PullRequest
0 голосов
/ 21 апреля 2019

У меня есть базовый флеш-сервер, который я использую для разработки на Python с Google Chat Bot. Я хотел бы ограничить диапазон IP-адресов, которые могут получить доступ к серверу, до любого в пределах определенного диапазона. Для этого, скажем, с 123.0.0.1 по 123.255.255.255.

Я знаю, как легко сделать это для одного IP, из схожих проблем, наблюдаемых в Интернете.

Отмена импорта из колбы, запрос

@app.before_request
def limit_remote_addr():
    if request.remote_addr != '123.0.0.1':
        abort(403)  # Forbidden

Но я не хочу делать это для каждого IP или составлять список. Это возможно? Или мне лучше настроить брандмауэр для удаления этого шага?

1 Ответ

0 голосов
/ 21 апреля 2019

Как упомянул @Klaus D., вы можете проверить, начинается ли удаленный адрес с части адреса.

Вы можете проверить, указан ли удаленный адрес в определенном списке IP-адресов в @before_request декораторе.

Здесь я показываю пример белого списка IP-адресов в Python.

Использовал локальную сеть (подключенную через WiFi) для проверки.

Локальный IP-адрес для сервера Flask: 192.168.0.107

app.py:

from flask import abort, Flask, render_template, request


ALLOWED_IPS = ['192.168.1.', '127.0.0.1']

app = Flask(__name__)

@app.errorhandler(403)
def permission_error(e):
    return render_template('403.html', error_code=403), 403

@app.before_request
def limit_remote_addr():
    client_ip = str(request.remote_addr)
    valid = False
    for ip in ALLOWED_IPS:
        if client_ip.startswith(ip) or client_ip == ip:
            valid = True
            break
    if not valid:
        abort(403)


@app.route('/', methods = ['GET'])
def home():
    return "Your IP: {}".format(request.remote_addr)

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

403.html

<h3>Your IP address is not white listed</h3>

Выход:

Доступ к приложению с IP-адреса, которого нет в списке ALLOWED_IPS:

blocked IP

Доступ к приложению с IP-адреса из списка ALLOWED_IPS:

white listed IP

После обновления списка ALLOWED_IPS до ALLOWED_IPS = ['192.168.0.', '127.0.0.1'] я могу получить доступ к приложению Flask из 192.168.0.107:

valid IP

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...