11

C++プログラム内からLinuxボックスとの間のインバウンドおよびアウトバウンドトラフィックを制御する必要があります。プログラム内から呼び出すこともできますiptablesが、仲介者を切り取って、カーネルAPI関数に自分でアクセスしたいと思います。

libnfnetlinkを使用する必要があると思いますが、APIドキュメントやサンプルプログラムを見つけることができませんでした。

構築する必要のあるルールはかなり単純です。たとえば、宛先ポートがXに等しいパケットをドロップするなどです。完全なファイアウォールアプリケーションを作成するつもりはありません。

誰かがより良いアプローチを提案したり、いくつかのドキュメントやサンプルアプリへのリンクを提供したりできますか?iptablesコードを読むのは避けたいのですが、もっと良いリソースが見つからない場合は、読む必要があるかもしれません。

4

4 に答える 4

9

1年前、私は同じ要件を抱えていて、周りを調べていました。しかし、いくつかのオープンソースカーネルの人に連絡した後、これは私が知るようになったものです-

iptablesのカーネルAPIは外部化されていません。つまり、ドキュメント化されたAPIではありません。ある意味で、APIはいつでも変更できます。これらはiptablesツールでのみ使用する必要があります。アプリケーション開発者は使用しないでください。

-satish

于 2009-08-28T17:33:03.350 に答える
1

通常、IPテーブルのルールを定期的に(つまり、実行時に頻繁に)変更する必要はありません。したがって、/ sbin/iptablesの呼び出しは問題ありません。

これを行おうとしている場合は、おそらく、独自のインテリジェンスを含む代替の一致またはターゲットモジュールを調べるか、NFQUEUEを使用して、パケットをユーザースペースプログラムにキューに入れ、基準に基づいて独自の決定を行う必要があります。何度でも変更できます(ユーザースペースに送信するパケットが多すぎることに注意してください。パフォーマンスの問題が発生する可能性があります)。

于 2009-08-29T22:55:40.340 に答える
0

なぜiptablesにソースを取得して、彼らがそうするようにそれをしないのですか?オープンソースなので…。

于 2009-08-28T17:31:52.947 に答える
0

クロスプラットフォームネットワーク( https://bitbucket.org/ptroen/crossplatformnetwork/)で、JSON(最大2つの異なるNIC)を介してファイアウォールを制御できる非常に洗練されたIPTablesファイアウォールラッパーを作成しました。ソースはここにあります:

https://bitbucket.org/ptroen/crossplatformnetwork/src/master/Tools/FirewallScript/FirewallScript.cc

ここでファイルを作成します:https ://bitbucket.org/ptroen/crossplatformnetwork/src/master/Tools/FirewallScript/FirewallScript.make

ファイルシステムにjsonファイルがない場合は、最初に実行したときにjsonファイルが生成されることに注意してください。

ソースの残りの部分は次のフォルダーにあります: https ://bitbucket.org/ptroen/crossplatformnetwork/src/master/OSManagement/Firewall/

また、操作に関する最終レポートでいくつかのコメントをしました: https ://bitbucket.org/ptroen/crossplatformnetwork/src/master/Cross%20Platform%20High%20Concurrent%20Network%20Framework%20Final%20Report.pdf

動作させるために処理する必要があるものを貼り付けます。sudosystemctlstopFirewalld sudo systemctl disable Firewalld install iptables services sudo dnf iptables-services start the iptables service systemctl start iptables.service sudo systemctl restart iptables sudo iptables -L検査する

唯一のビルド依存関係はBoostC++です。

于 2022-03-02T06:48:49.673 に答える