Действительно ли возможно записать брандмауэр в Python? Скажите это, действительно ли блок все передал бы трафик?
Да, да, это так.
У меня есть некоторый код 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
«Да» - это обычно ответ на «возможно ли ...?» вопросов.
Насколько сложные и специфические реализации - это совсем другое. Я полагаю, что технически этого нельзя делать, если бы вы были одержимы созданием быстрого брандмауэра на Python, вы могли бы использовать библиотеки сокетов и открывать подключения к себе и от себя на каждом порту. Я понятия не имею, насколько это будет эффективно, хотя, похоже, это не так. Конечно, если вы просто заинтересованы в том, чтобы кататься самостоятельно и делать это в качестве учебного опыта, тогда круто, у вас впереди долгий путь и много образования.
OTOH, если вы действительно беспокоитесь о сетевой безопасности, существует тонн других продуктов, которые вы можете использовать, от iptables в * nix до ZoneAlarm в Windows. Многие из них и бесплатны, и безопасны, поэтому на самом деле нет причин катать собственные, кроме как по принципу «Я хочу научиться».
Я уверен, что в теории вы могли бы достичь того, чего хотите, но я считаю, что на практике ваша идея не осуществима (если вам интересно, почему, то потому, что слишком сложно "сопрячь" язык высокого уровня с низкоуровневым ядром).
Что вы могли бы сделать вместо этого, так это некий инструмент Python, который управляет брандмауэром операционной системы, чтобы вы могли добавлять правила, удалять и т.д. (подобно тому, как это делает iptables в Linux).
Я уверен, что это возможно, но не рекомендуется. Как упоминает mcandre, в большинстве ОС низкоуровневые сетевые возможности, необходимые для брандмауэра, тесно связаны с ядром, и поэтому эта задача обычно выполняется на C/C++ и тесно интегрируется с ядром. Микроядерные ОС (Mach и др.) могут быть более дружелюбными, чем linux. Возможно, вы сможете смешать немного python и C, но я думаю, что более интересная дискуссия здесь будет вокруг "почему я должен"/"почему я не должен" реализовать брандмауэр на python, а не просто технически возможно ли это.