PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [C++] Programmierinterface -> iptables



X_ .
04.09.2002, 22:26
Hiho.

Ich habe da ein Problem:
Ich habe ein inzwischen recht umfangreiches
iptables-Firewallscript und mein alter P200 (läuft als Router/Gateway) braucht inzwischen mehrere Minuten, um
das Skript abzuarbeiten.
Gibt es eine Möglichkeit ein Skript zu kompilieren, so
das es nicht jedesmal wieder neu über die Shell interpretiert werden muss. Optimal wäre natürlich C oder C++.

Weiss jemand was ?

raiden
04.09.2002, 22:46
Naja die Sourcen von iptables sind doch frei verfuegbar.
Kannst ja die dort schon existierenden Funktionen fuer nen eigenes kleines Progie verwenden.
Schau mal in die iptables.c rein ... dort werden die Kommandos geparst und umgesetzt.

raiden
04.09.2002, 23:41
Hmm ich glaub die iptables-standalone.c sollte fuer dich am interessantesten sein.

Das ist die Sourefile mit der Main Funktion.


#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <iptables.h>

int
main(int argc, char *argv[])
{
int ret;
char *table = "filter";
iptc_handle_t handle = NULL;

program_name = "iptables";
program_version = NETFILTER_VERSION;

#ifdef NO_SHARED_LIBS
init_extensions();
#endif

ret = do_command(argc, argv, &table, &handle);
if (ret)
ret = iptc_commit(&handle);

if (!ret)
fprintf(stderr, "iptables: %s\n",
iptc_strerror(errno));

exit(!ret);
}

do_command ist hier das was interessiert.
In argc stehen halt die Anzahl der Parameter drin und argv ist halt ein Array mit den einzelnen Parametern.
An die Funktion uebergibst du halt deine einzelnen Rules ... in einen C Programm und das wars schon (das rauswerten des ret ,speziell halt das iptc_commit() nach jedem ausfuehren von do_command() nicht vergessen).

Musst also hauptsaechlich nur dein Shell Script nach C uebersetzen.

X_ .
05.09.2002, 08:23
Jo, danke.

Werd mal sehen, was es bringt.

Danke

X_ .
05.09.2002, 20:30
Wollt euch nur informieren :

Ich habe das über den Compler jetzt gelassen
(war mir zu undynamisch). Statt dessen habe ich das
Skript so erweitert, dass zum Beispiel das Blocken
von AdServer-Anfragen eine eigene Chain bekommt,
die auch eingebunden wird, aber erstmal leerbleibt.
Die Regeln werden dann erst am
Schluss (nach hochfahren der Firewall) im Hintergrund eingesetzt.
Da die AdServer mit über 700 Einträgen sehr lange brauchen,
aber eben auch nicht sicherheitsrelevant sind, bin ich damit zufrieden.

Vielleicht interessiert es ja jemanden... :)

X_