2009-08-28 17 views
11

C++プログラム内からLinuxボックスへの/からの着信トラフィックを制御する必要があります。自分のプログラムの中からiptablesと呼ぶことができますが、私はむしろ中間者を切り離して、自分自身にカーネルAPI関数にアクセスしたいと思います。iptables C++ control

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

私が構築する必要があるルールはかなり簡単です。宛先ポートがXなどのパケットをドロップするようなものです。完全なファイアウォールアプリケーションを作成するつもりはありません。

誰かがより良いアプローチを提案したり、いくつかのドキュメントやサンプルアプリケーションへのリンクを提供できますか?私はむしろiptablesコードを読むことを避けたいと思いますが、もし私がより良いリソースを見つけることができなければ、私はしなければならないかもしれないと思います。

+0

これはhttp://stackoverflow.com/questions/109553/how-can- iptables-manage-iptables-on-the-fly – Claris

+0

popen/vforkのオーバーヘッドが気になる場合は、別のプロセスを使ってすべてのiptablesの変更をスタックし、iptables-restoreを使ってしばらくしてコミットしてください。 – anttir

答えて

9

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

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

-satish

あなたは通常、定期的にIPテーブルのルールを変更する必要はありません
+3

Markが言っているように、オープンソースなので誰もあなたの使用を止めることはできません。しかし、必要になったときにAPIが変更される可能性があるため、注意が必要です。次に、アプリケーションはAPIの動作の変更を処理する必要があります。 – Satish

+0

+1興味深い情報。私はThomiが多くのpopen( "iptables ...")をやると思います。 – neuro

+0

非常に興味深い - 情報ありがとう! – Thomi

0

iptablesにソースを取得して、それを行うのはなぜですか?それはオープンソースなので....

+3

私は安定したインターフェイスが必要です。いつでも変更できるものではありません。 – Thomi

1

(すなわち、頻繁に実行時に)。したがって、/ sbin/iptablesを呼び出しても問題ありません。

これを実行しようとしている場合は、独自のインテリジェンスを含む代替の一致モジュールまたはターゲットモジュールを参照するか、NFQUEUEを使用してパケットを独自の判断基準に基づいたユーザー空間プログラムにキューイングする必要があります(ユーザー空間にあまりにも多くのパケットを送信することに注意してください、それは潜在的なパフォーマンスの問題です)

関連する問題