IPA - Log dauerhaft speichern?

manilo101

Member
Hallo

Als erstes muss ich sagen, dass ich noch nicht lange mit
FreeBSD mache. Ich brauchte einen Router und hab mich nach ein paar Tipps dazu entschlossen, FreeBSD zu nehmen. Der Rechner funtz auch soweit ganz gut und routet was das Zeug hält. Bissl FTP und Apache läuft auch. Bin soweit zufrieden.
Nun habe ich mir IPA installiert, da mein Sohn letzten Monat die Providergebühr arg in die Höhe getrieben hat. IPA zeichnet auch prima auf und im laufenden Betrieb ist alles o.k. Leider beginnt IPA nach einem reboot wieder von vorn. Weiterhin kann ich bisher nur den Gesamttraffic messen. Wie kann ich IPA konfigurieren damit nach einem reboot der bisherige traffic nicht verloren geht und IPA einfach von einem gespeicherten Wert ab weiterzählt? Das log sollte nur 1x im Monat wieder auf 0 gesetzt werden. Und wie kann ich für verschiedene Rechner seperat filtern?
Ich habe leichte Probs die syntax von ipa.conf zu verstehen. Meine derzeitige ist recht einfach und aus diversen Anleitungen übernommen.

ipa.conf:
global {
maxchunk = 18G
update_db_time = 30s
db_dir = /var/ipa
lock_wait_time = 20s
}

rule tun0 {
info = Summary traffic for tun0
ipfil = o@1
ipfil = i@1
}

rule tun0_in {
info = Incomming traffic for tun0
ipfil = i@1
}

rule tun0_out {
info = Outgoing traffic for tun0
ipfil = o@1

Dazu verwende ich IPFilter. Hier die entsprechenden Accounting einträge:

#gesamter Traffic
count in on tun0 from any to any
count out on tun0 from any to any

#Sohnis Rechner
count in on tun0 from any to 192.168.10.12
count out on tun0 from 192.168.10.12 to any

Nun sind mir die Einträge in ipa.conf für den Gesamttraffic klar bis auf die Angaben

ipfil = o@1
ipfil = i@1

Ansonnsten verstehe ich, das es 3 rules sind und was sie tun. Wie aber nun für den Sohnirechner seperat messen? Hier komm ich nicht weiter und hoffe auf eure Unterstützung.

Endziel ist es, wenn Sohnis Traffic aufgebraucht ist soll eine IPFilter regel erstellt werden, die dann seine IP nicht mehr durchlässt. Wenn ich das richtig gelesen habe, sollte das doch dann mit ipa.conf möglich sein. Oder brauche ich ein seperates Scribt dazu?

Ich hoffe ich hab mein Prob ausreichend beschrieben und ihr helft mir weiter.

MfG
Manilo
 
Log Problem hat sich erledigt. Bleibt noch das zählen nach IP

Ich habe jetzt nach einem reboot doch den alten Wert drinn. Warum das heute Nachmittag anders war, weiß ich nicht. Mir fällt nur auf, dass er heut nachmittag noch im Februargezählt hat obwohl ja schon März ist. Hatte spontan an eien falsch gehende Systemuhr gedacht aber die stimmte. Das zeigt mir aber, dass zum Monatswechsel gleich auf 0 gestellt wird ohne spezielle Konfiguration.
Kann mir jemand bei dem restlichen Teile meiner Frage helfen?

MfG
Manilo
 
hi,

die funktionen, die du oben als noch fehlend beschrieben hast lassen sich z.T. mit hilfe von ipa nachruesten in dem du die ipa.conf entsprechend erweiterst.

1.)
ipa bietet die moeglichkeit beim start bzw. shutdown (von ipa) kommandos an die shell abzusetzen:

Code:
startup {
        exec = /bin/sh /full/path/to/startup_cmd
}

shutdown {
        exec = /bin/sh /full/path/to/shutdown_cmd
}

ich selber habe in der startup section stehen, dass meine firewall neu initialisiert werden soll so ist beim neustarten von ipa wieder alles so wie zuvor. das ist be mir wichtig, da ich auf firewall regeln traffic zaehle, die nicht in der ipa.conf gesetzt werden, aber sonst haette ich fast meine gesammten firewall regeln in der ipa.conf und das will ich nicht). bei diesem globalen shutdown kannst du vorsichtshalber alle traffic blockenden firewall regeln setzen, damit nach dem beenden von ipa kein ungezaehlter traffic die firewall passieren kann.


2.)
die rule sectionen kannst du noch erweitern u.a. um die funktion, dass die firewall dichtmacht, wenn ein bestimmtes traffic limit ueberschritten wurde und wann der traffic zaehler wieder auf 0 gesetzt und damit auch die entsprechende blockende firewall regel wieder aufgehoben werden soll.

Code:
rule traffic_wahtever {
        info = traffic_whatever

        ipfw = 200 (0)

        startup {

                exec = (1)

                if_limit_is_reached {
                        exec = (2)
                }

                if_limit_is_not_reached {
                        exec = (3)
                }
        }

        shutdown {
                exec = (4)        
        }

        limit limit_traffic_whatever { (5)
                info = limit_traffic_whatever

                byte_limit = 2G (6)
                zero_time = +M (7)

                reach {
                        exec = (8)
                }

                expire {
                        expire_time = +M (7)
                        exec = (9)
                }
        }
}

erlauterungen:

(0) hier wird die regel der firewall angegeben auf die der traffic gezaehlt werden soll. da du ipfilter benutzt sieht das bei dir natuerlich anders aus.

(1) kommando, das beim 'starten' von traffic_wahtever ausgefuert werden soll. hier ist es z.b. sinnvoll die firewall regeln zu setzen auf die fuer traffic_wahtever gezaehlt werden soll. ich setze hier auch noch die blockende firewall regel fuer traffic_wahtever wie in (2).

(2) kommando das beim 'starten' der rule traffic_wahtever ausgefuehrt werden soll, wenn das traffic limit fuer traffic_wahtever erreicht worden ist. hier bietet es sich an eine blockende firewall regel fuer alle recher, die mit traffic_wahtever zusammengefasst sind zu setzen. also z.b. exec = /sbin/ipfw add 20 deny ...

(3) kommando das beim 'starten' der rule traffic_wahtever ausgefuehrt werden soll, wenn das traffic limit fuer traffic_wahtever noch nicht erreicht worden ist. hier loesche ich die blockende firewall regel fuer alle recher die mit traffic_wahtever zusammengefasst sind logischwer weise wieder, also auch die blockende regel, die von (1) bei jedem start erzeugt wird.

(4) kommando beim 'shutdown' traffic_wahtever. also z.b. wieder die blockende regel setzen.

(5) limit beschreibung fuer traffic_whatever

(6) das limit selber

(7) zeitpunkt wann das limit auslaeuft und von neuem beginnt. hier am anfang des monats (hoffe ich)

(8) kommado das beim erreichen des limits ausgefuert werden soll. z.b. blockende regle fuer traffic_whatever

(9) kommando das beim ablaufen des limits ausgefuerht werden soll. z.b. blocken der firewall wieder aufheben.


eine traffic abrechnung unabhaengig fuer verschiedene rechner wird ueber eigene rule eintraege und die dazu gehoerigen firewall reglen, auf die gezaehlt werden soll, realisiert.

ausgeben kannst du alles mit ipastat (siehe ipastat(8) fuer die ganzen moeglichkeiten). die ganzen traffic daten stehen in 'db_dir' , bei dir also '/var/ipa'.
ich habe bei mir z.b. einen apache laufen, der alles was ipa zusammen gezaehlt hat im lokalem netz zur abfrage bereit stellt.


ipa.conf(5) und ipastat(8) sind aufjeden fall einen blick wert.

komplette beispiele finden sich z.b. hier:
http://www.kruijff.org/alex/FreeBSD/Traffic_Grapher.html
http://www.free.bsd.com.br/noticia.php3?CAD=1&NOT=145



teuk
 
Zuletzt bearbeitet:
Danke für deine sehr ausführliche und anschauliche Antwort. Das hat meine Fragen weitesgehend beantwortet und ich denke jetzt soweit klar zu kommen. Bis auf die folgenden Zeilen:

rule traffic_wahtever {
info = traffic_whatever

ipfw = 200 (0)

Ich deute das so:

rule traffic_wahtever {
info = traffic_whatever
ist einfach der Name und das Label der rule welches dann für ipstat gebraucht wird - versteh ich.

ipfw = 200

ist irgendwie die Nummer der Regel in den ipf.rules - versteh ich nicht.

Ich verwende IPFilter und ne einfache rule sieht ja so aus:

pass in all on tun0 from any to any ( ;-) )

Kann ich da jetzt einfach die 200 (oder ne andre Zahl) davorsetzen

200 pass in all on tun0 from any to any

und hat die rule damit quasi eine Startnummer? Ich weiß nicht ob das bei IPFilter so geht.

Und nun müsste ich in ipa.conf das ipfw = 200 durch ipfil = 200 ersetzen und dann meine Regeln bzw. Kommandos drunter schreiben.

Habe ich das so richtig verstanden?

Und zum Schluß noch mal die Frage aus dem ersten posting nach der Bedeutung von

ipfil = o@1
ipfil = i@1

o und i stehen sicher für incomming bzw. outgoing. Aber was das @1 sein soll, erschlließt sich mir nicht.

Thanks for help

MfG
Manilo
 
hi,

leider habe ich annaehernd keine Ahnung von ipfilter. Aber ich habe mal gegoogled und mein das ganze im Zusammenhang mit ipa so verstanden zu haben:


Du hast in deiner ipf.conf diene Firewallregeln eingetragen und jede dieser Regen gehoert zu einer Gruppe (standardmaessig zu Defaultgruppe 0). Innerhalb dieser Gruppen hat jede Regel noch eine Nummer. Zusaetzlich wird zwischen inbound und outbound Regen unterschieden.

Die aktuelle Nummerirung diener Regen zeigt ipfstat (siehe ipfstat(8) und [0] fuer mehr Informationen) an:

Inbound Regeln:
Code:
ipfstat -in

Outbound Regeln:
Code:
ipfstat -on

Die Ausgabe von z.B. 'ipfstat -on' koennte dann irgendwie so aussehen (ich kanns hier leider nicht einfach so testen und habe es einfach aus [0] 24.5.5 IPFSTAT uebernommen):
Code:
@1 pass out on xl0 from any to any
@2 block out on dc0 from any to any
@3 pass out quick on dc0 proto tcp/udp from any to any keep st ate
Damit hast du schon mal die Regelnummern fuer inbound und outbound Regeln die du ipa uber ipfil = ... mitgeben musst. Wie du schon sagtest stehen 'i' und 'o' entsprechend fuer nbound und outbound. Zusammen mit dem folgenden Absatz aus ipa.conf(5) solltest du das dann beides kombinieren keonnen:
Code:
       Format for the ipfil parameter is:

            ipfil = [-]i[group]@number
            ipfil = [-]o[group]@number

       The `i' character is used for the input side and the `o'  character  is
       used  for the output side of the accounting IPF list. IPF rules are set
       up in some groups and have order numbers in  those  groups  (read  more
       information in the ipf(5) manual page). If a group number is omitted in
       the ipfil parameter, then a group number is treated as 0 (default group
       number  in  IPF). First IPF rule in some group has a number equal to 1.
       This kind of enumeration of IPF rules has been  taken  from  the  ipfs-
       tat(8)  program  and  from  the ipf(5) manual page. The `-' sign can be
       placed before IPF number, in  this  case  ipa(8)  subtracts  accounting
       information of this IPF accounting rule.

       Example:

            ipfil = o@10 o1@5
            ipfil = -i12@4 o@2 o40@10

       If  there  are some ipfil parameters in one rule section, then they are
       treated as one ipfil parameter.

       Number of IPF rules and their group numbers can be taken from the  out-
       put of the "ipfstat -iona" command.

Natuerlich unter der Voraussetzung, dass ich das mit ipfilter richtig verstanden habe.


teuk


[0] http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/firewalls-ipf.html
ipa.conf(5) http://ipa-system.sourceforge.net/ipa.conf.5.txt
ipfstat(8) http://www.freebsd.org/cgi/man.cgi?...ath=FreeBSD+5.3-RELEASE+and+Ports&format=html
 
Zuletzt bearbeitet:
Super Hilfe. So wünscht man sich das immer.
Ich muss leider für mich feststellen, wer englisch kann, ist klar im Vorteil. Mein meinen Kenntnissen fällt es mir nicht immer leicht, die Zusammenhänge in den manpages richtig zu erfassen. Ich arbeite drann.

Ich hab jetzt die ipa.conf nach dem Muster gebaut. Und man ipfstat sagt mir

ipfstat -a -on

gibt die accountng-Regeln für Out und analog dazu die für In aus. Das hat auch funktioniert. Warum es ausgerechnet "on" ist, weiß ich nicht und bedarf auch etwas Gewohnheit. Ich habe mehrfach "out" getippt.
Auch ist die syntax von ipa.conf für mich in Details nicht ganz logisch.
ipfstat -a -in gibt beispielsweise aus :

0 @3 blabla

also mit Leerzeichen nach der Gruppe. Nun habe ich intuitiv in ipa.conf

ipfil = i0 @3

eingetragen und mich beim starten über die Fehlermeldungh gewundert. Hat ne Weile gedauert, bis die manpage mir zeigte, dass es in der conf ohne Leerzeichen eingetragen werden muss.

Ansonsten funktioniert jetz dank deiner wirklich sehr guten Hilfe alles wunschgemäß. Morgen noch die Aktionen bei erreichen des Limits konfigurieren sollte mit deiner Anleitung und deinen Links rel. Problemlos gehen.

Ich möchte noch sagen, dass ich auch google bemüht habe. Z.B hat mir

www.myfreebsd.org/tools/ipa.html

beim Start sehr geholfen. Aber so das tiefere Verständnis ist bei dem was ich so gefunden habe nicht rüber gekommen.

Also noch mal großen Dank an dich.

MfG
Manilo
 
hi,

Warum es ausgerechnet "on" ist, weiß ich nicht [...]

Das sagt auch die manpage zu ipfstat:
-o gibt dir die oubtbound Regeln an und
-n gibt dir die Nummern an
-on oder -no gibt dir folglich die Nummern der outbound Regeln an.



teuk
 
Man lernt nie aus!

"False friend" fällt mir dazu ein. Aber gib mir noch 3 Jahre und dann hoff ich solche Hürden locker zu nehmen.

Ich betrachte gerade stolz unser Werk ;-)

Und bin seeehr zufrieden mit dem Ergebnis.

FreeBSD fängt an Spaß zu machen .....

MfG
Manilo
 
Zurück
Oben