Действительно ли возможно записать брандмауэр в Python?

Действительно ли возможно записать брандмауэр в Python? Скажите это, действительно ли блок все передал бы трафик?

10
задан Rob Hruska 13 November 2011 в 19:23
поделиться

4 ответа

Да, да, это так.

У меня есть некоторый код Python, который взаимодействует с Linux iptables для выполнения обязанностей брандмауэра, используя nfqueue. Я могу использовать правило в iptables, которое выглядит так:

iptables -A INPUT -j NFQUEUE --queue-num 1

И затем у меня есть некоторый код Python, который выглядит так:

import nfqueue
from dpkt import ip

q = None

def cb(dummy, payload):
    # make decision about if the packet should be allowed. in this case, drop everything:
    payload.set_verdict(nfqueue.NF_DROP)

q = nfqueue.queue()
q.open()
q.bind()
q.set_callback(cb)
q.create_queue(1)

q.try_run()

Вот хорошая статья, на которой основан вышеприведенный код:

http://blog.yancomm.net/2011/05/nfqueue-packet-mangling-with-python.html

17
ответ дан 3 December 2019 в 14:43
поделиться

«Да» - это обычно ответ на «возможно ли ...?» вопросов.

Насколько сложные и специфические реализации - это совсем другое. Я полагаю, что технически этого нельзя делать, если бы вы были одержимы созданием быстрого брандмауэра на Python, вы могли бы использовать библиотеки сокетов и открывать подключения к себе и от себя на каждом порту. Я понятия не имею, насколько это будет эффективно, хотя, похоже, это не так. Конечно, если вы просто заинтересованы в том, чтобы кататься самостоятельно и делать это в качестве учебного опыта, тогда круто, у вас впереди долгий путь и много образования.

OTOH, если вы действительно беспокоитесь о сетевой безопасности, существует тонн других продуктов, которые вы можете использовать, от iptables в * nix до ZoneAlarm в Windows. Многие из них и бесплатны, и безопасны, поэтому на самом деле нет причин катать собственные, кроме как по принципу «Я хочу научиться».

2
ответ дан 3 December 2019 в 14:43
поделиться

Я уверен, что в теории вы могли бы достичь того, чего хотите, но я считаю, что на практике ваша идея не осуществима (если вам интересно, почему, то потому, что слишком сложно "сопрячь" язык высокого уровня с низкоуровневым ядром).

Что вы могли бы сделать вместо этого, так это некий инструмент Python, который управляет брандмауэром операционной системы, чтобы вы могли добавлять правила, удалять и т.д. (подобно тому, как это делает iptables в Linux).

3
ответ дан 3 December 2019 в 14:43
поделиться

Я уверен, что это возможно, но не рекомендуется. Как упоминает mcandre, в большинстве ОС низкоуровневые сетевые возможности, необходимые для брандмауэра, тесно связаны с ядром, и поэтому эта задача обычно выполняется на C/C++ и тесно интегрируется с ядром. Микроядерные ОС (Mach и др.) могут быть более дружелюбными, чем linux. Возможно, вы сможете смешать немного python и C, но я думаю, что более интересная дискуссия здесь будет вокруг "почему я должен"/"почему я не должен" реализовать брандмауэр на python, а не просто технически возможно ли это.

3
ответ дан 3 December 2019 в 14:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: