2009-08-28 14 views
11

Ho bisogno di controllare il traffico in entrata e in uscita da/verso una casella Linux da un programma C++. Potrei chiamare iptables all'interno del mio programma, ma preferirei ritagliare il middle man e accedere personalmente alle funzioni API del kernel.iptables Controllo C++

Credo di aver bisogno di utilizzare libnfnetlink, tuttavia, non sono stato in grado di trovare alcuna documentazione API o programmi di esempio.

Le regole che ho bisogno di costruire sono abbastanza semplici - cose come eliminare pacchetti con una porta di destinazione uguale a X ecc. NON intendo scrivere un'applicazione firewall completa.

qualcuno può suggerire un approccio migliore o fornire un collegamento ad alcune applicazioni di documentazione o di esempio? Preferirei evitare di leggere il codice iptables, ma credo che potrei doverlo, se non riesco a trovare risorse migliori.

+0

Questo è un dup di http://stackoverflow.com/questions/109553/how-can- i-programatically-manage-iptables-rules-on-the-fly – Claris

+0

Se ti preoccupi del sovraccarico di popen/vfork puoi usare un altro processo per impilare tutte le modifiche di iptables e commetterle una volta ogni tanto con iptables-restore. – anttir

risposta

9

Un anno fa stavo avendo lo stesso requisito e sondato in giro. Ma dopo aver contattato alcuni ragazzi del kernel open source questo è quello che ho imparato a conoscere -

Le API del kernel di iptables non sono esternalizzate, vuol dire che non sono API documentate. Nel senso, le API possono cambiare in qualsiasi momento. Dovrebbero essere usati solo dallo strumento iptables. non dovrebbero essere usati dagli sviluppatori di applicazioni.

-satish

+3

Come ha detto Mark, nessuno può impedirti di usarlo, poiché è open source. Ma, dovresti fare attenzione poiché le API possono cambiare quando si presenta la necessità. Quindi la tua applicazione deve prendersi cura delle modifiche nel comportamento delle API. – Satish

+0

+1 informazioni interessanti. Immagino che Thomi farà un sacco di popen ("iptables ...") – neuro

+0

molto interessante - grazie per le informazioni! – Thomi

0

Perché non ottenere il codice sorgente su iptables e farlo come se lo facessero? Dal momento che è open source ....

+3

perché ho bisogno di un'interfaccia stabile, non di quella che può cambiare in qualsiasi momento. – Thomi

1

Non dovrebbe essere necessario modificare le regole tavoli IP su base regolare (cioè spesso in fase di esecuzione). Pertanto chiamare/sbin/iptables dovrebbe andare bene.

Se si sta tentando di eseguire questa operazione, probabilmente è necessario esaminare una corrispondenza alternativa o un modulo di destinazione che contiene la propria intelligenza oppure utilizzare NFQUEUE per accodare i pacchetti in un programma dello spazio utente in grado di basare la propria decisione su criteri che possono cambiare tutte le volte che vuole (attenzione a mandare troppi pacchetti nello userspace, è un potenziale problema di prestazioni)