Использует ли программирование сокетов C для прослушивания входящих данных «позади» или «после» брандмауэра? - PullRequest
1 голос
/ 25 февраля 2012

Недавно я проводил исследования по использованию языка C для программирования сетевых сокетов.Мне интересно, если я пишу программу для прослушивания входящих данных, это «до» или «после» брандмауэра?

Я понимаю, что веб-сервер, такой как nginx, lighttpd или cherokee, использует сокет-программирование для прослушивания данных, и все же я могу настроить брандмауэр, такой как (OpenBSD) "pf", для управления входящими данными, поэтомуПохоже, что для программирования сокетов в C "после" брандмауэра.

НО, если это правда, то как пишутся брандмауэры?Как они прослушивают входящие данные с определенных портов?

1 Ответ

3 голосов
/ 25 февраля 2012

Брандмауэры реализованы ядром в другой части сетевого кода. По сути, это сводится к выбору «хуков» (к которым можно получить доступ либо из пространства ядра, либо из пространства пользователя, либо из обоих), которые уведомляют об активности.

Эта активность может быть входящей (входящей) или исходящей (выходной) в зависимости от того, кто создал пакет. Для каждого пакета и, как правило, для каждого соединения для протоколов с отслеживанием состояния, ориентированных на соединение, брандмауэр получает возможность перезаписать, наложить вето (например, вернуть ошибку) или просто молча отбросить данный пакет или соединение. (Реализации различаются, а доступные действия могут быть более сложными).

Ключевым моментом является то, что интерфейсы сильно отличаются от обычного интерфейса сокетов - вам говорят, что что-то происходит, и спрашивают, что вы хотели бы сделать в связи с этим, но вам не дают того же разрешения Интерфейс стиля / listen / connect, который обычно используется для программирования сокетов.

Например, в Linux брандмауэр реализован в виде полей «фильтра» ввода / вывода в этой диаграмме потоков пакетов , тогда как код сокетов происходит в красном слое на верхнем уровне, помеченном как «уровень протокола / приложения» «

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