управление iptables c ++ - PullRequest
       14

управление iptables c ++

11 голосов
/ 28 августа 2009

Мне нужно контролировать входящий и исходящий трафик в / из linux box из программы на C ++. Я мог бы вызвать iptables из моей программы, но я бы предпочел отключить посредника и сам получить доступ к функциям API ядра.

Я считаю, что мне нужно использовать libnfnetlink , однако мне не удалось найти какую-либо документацию по API или примеры программ.

Правила, которые мне нужно создать, довольно просты - например, отбрасывание пакетов с целевым портом, равным X и т. Д. Я НЕ собираюсь писать полное приложение брандмауэра.

Может кто-нибудь предложить лучший подход, или предоставить ссылку на некоторые документы или примеры приложений? Я бы предпочел не читать код iptables, но, возможно, мне придется, если я не смогу найти более качественные ресурсы.

Ответы [ 3 ]

9 голосов
/ 28 августа 2009

Год назад у меня было то же самое требование и исследовали вокруг. Но после общения с парнями из ядра с открытым исходным кодом я узнал об этом -

API ядра iptables не являются внешними, то есть они не являются документированными API. В этом смысле API могут измениться в любой момент. Они должны использоваться только инструментом iptables. они не должны использоваться разработчиками приложений.

-satish

1 голос
/ 30 августа 2009

Обычно вам не нужно регулярно менять правила IP-таблиц (то есть часто во время выполнения). Поэтому вызов / sbin / iptables должен быть в порядке.

Если вы пытаетесь это сделать, то, вероятно, вам нужно посмотреть на альтернативный модуль соответствия или целевой модуль, который содержит собственный интеллект, или использовать NFQUEUE, чтобы поставить пакеты в очередь в программе пространства пользователя, которая может принимать свое собственное решение на основе критерии, которые могут меняться так часто, как ему хочется (остерегайтесь отправки слишком большого количества пакетов в пространство пользователя, это потенциальная проблема производительности)

0 голосов
/ 28 августа 2009

Почему бы просто не получить исходный код iptables и сделать это так, как они это делают? Так как это с открытым исходным кодом ....

...