# iptables soll nicht nach /var/log/messages loggen

## pieter_parker

was muss ich wem wo und wie sagen das iptables nicht nach /var/log/messages sondern z.b. nach /var/log/iptables logt ?

----------

## schachti

Welchen Syslog Daemon hast Du denn installiert?

----------

## pieter_parker

syslog-ng laeuft hier

----------

## schachti

Google-Suche nach "syslog-ng iptables", erster Treffer (oder auch die folgenden) - das dürfte Dir weiterhelfen.   :Wink: 

----------

## pieter_parker

/etc/syslog-ng/syslog-ng.conf

```

options {

        chain_hostnames(off);

        sync(0);

        stats(43200);

};

source local {

    unix-stream("/dev/log" max-connections(256));

    internal();

    file("/proc/kmsg");

};

destination messages { file("/var/log/messages"); };

destination iptables { file("/var/log/iptables"); };

destination kern     { file("/var/log/kern"); };

destination console_all { file("/dev/tty12"); };

log { source(local); destination(messages); };

log { source(local); destination(console_all); };

log { source(local); filter(iptables); destination(iptables); flags(final); };

log { source(local); filter(kern); destination(kern); };

```

/etc/init.d/syslog-ng restart

```

 * Starting syslog-ng ...

Error in configuration, unresolved filter reference; filter='iptables'

 * Failed to start syslog-ng 

```

----------

## schachti

Die Fehlermeldung ist doch ziemlich klar - Du hast keinen filter namens iptables definiert.   :Shocked: 

----------

## pieter_parker

aber "destination iptables { file("/var/log/iptables"); }; " ist doch fuer iptables

----------

## schachti

Das ist ein Ziel (destination), kein Filter (filter).

----------

## pieter_parker

achso, ich sehs .. ja

filter f_iptables   { facility(kern) and match("IN=") and match("OUT="); };

sowas muss dann noch mit rein ?

aber ich will das alles was von iptables kommt in die datei geschrieben wird, nicht nur sachen  mit "IN" und "OUT"

----------

## schachti

Dann ergänze Deine iptables-Regeln um etwas in der Form

 *Quote:*   

> 
> 
> ipables -A INPUT -j LOG --log-prefix="IPTABLES_IN: "
> 
> ipables -A OUTPUT -j LOG --log-prefix="IPTABLES_OUT: "
> ...

 

und ändere den Filter in

```

filter f_iptables {match("^IPTABLES_"); }; 

```

----------

## pieter_parker

```
options {

        chain_hostnames(off);

        sync(0);

        stats(43200);

};

source local {

    unix-stream("/dev/log" max-connections(256));

    internal();

    file("/proc/kmsg");

};

destination messages { file("/var/log/messages"); };

destination iptables { file("/var/log/iptables"); };

destination kern     { file("/var/log/kern"); };

destination console_all { file("/dev/tty12"); };

filter f_iptables   { facility(kern) and match("IN_=") and match("OUT=") and match("FOR="); };

log { source(local); destination(messages); };

log { source(local); destination(console_all); };

log { source(local); filter(iptables); destination(iptables); flags(final); };
```

ich habs nun so gemacht

aber die meldung kommt immer noch

```
etc/init.d/syslog-ng start

 * Starting syslog-ng ...

Error in configuration, unresolved filter reference; filter='iptables'

 * Failed to start syslog-ng
```

----------

## schachti

Weil es nach wie vor keinen Filter iptables gibt, nur einen namens f_iptables.

----------

## pieter_parker

```
options {

        chain_hostnames(off);

        sync(0);

        stats(43200);

};

source local {

    unix-stream("/dev/log" max-connections(256));

    internal();

    file("/proc/kmsg");

};

destination messages { file("/var/log/messages"); };

destination iptables { file("/var/log/iptables"); };

destination kern     { file("/var/log/kern"); };

destination console_all { file("/dev/tty12"); };

filter iptables   { facility(kern) and match("IN_=") and match("OUT=") and match("FOR="); };

log { source(local); destination(messages); };

log { source(local); destination(console_all); };

log { source(local); filter(iptables); destination(iptables); flags(final); };
```

so laesst es sich schon mal starten  :D

----------

## schachti

Ich weiß nicht, ob identische Namen für ein Ziel und einen Filter nicht zu Problemen führen könnten - ich würde daher die Bezeichnung f_iptables lassen und nur die entsprechende Zeile beginnend mit log anpassen. Aber das ist vielleicht auch unnötig...

----------

## pieter_parker

```
options {

        chain_hostnames(off);

        sync(0);

        stats(43200);

};

source local {

    unix-stream("/dev/log" max-connections(256));

    internal();

    file("/proc/kmsg");

};

destination messages { file("/var/log/messages"); };

destination iptables { file("/var/log/iptables"); };

destination kern     { file("/var/log/kern"); };

destination console_all { file("/dev/tty12"); };

filter f_iptables   { facility(kern) and match("IN_=") and match("OUT=") and match("FOR="); };

log { source(local); destination(messages); };

log { source(local); destination(console_all); };

log { source(local); filter(f_iptables); destination(iptables); flags(final); };
```

habs angepasst, du meinst so ?

aber ich glaube fast in /var/log/iptables wird nichts gelogt

----------

## schachti

Vermutlich, weil nichts in den Filter passt. Es sollte dort vermutlich nicht match("IN_="), sondern match("IN=") heißen...

----------

## pieter_parker

nein, es heisst heisst "IN_"

in /var/log/messages wird immer noch von iptables geloggt

und /var/log/iptables bleibt leer

woran koennte das liegen ?

----------

## think4urs11

 *pieter_parker wrote:*   

> woran koennte das liegen ?

 

An deinem Filter - der ziemlich sicher niemals greift? Wieviele Pakete werden wohl geloggt die gleichzeitig IN, OUT und FORward sind?

Abgesehen davon macht flags(final) nur dann irgendeinen Sinn wenn _danach_ noch Ziele definiert sind in die ebenfalls geloggt werden könnte. Als Option in der letzten log-rule völlig sinnfrei.

----------

## pieter_parker

 *Think4UrS11 wrote:*   

> Wieviele Pakete werden wohl geloggt die gleichzeitig IN, OUT und FORward sind?

 

irgendwas so gegen 0 vermutlich  :D 

```
options {

        chain_hostnames(off);

        sync(0);

        stats(43200);

};

source local {

    unix-stream("/dev/log" max-connections(256));

    internal();

    file("/proc/kmsg");

};

destination messages { file("/var/log/messages"); };

destination iptables { file("/var/log/iptables"); };

destination kern     { file("/var/log/kern"); };

destination console_all { file("/dev/tty12"); };

filter f_iptables   { facility(kern) or match("IN_=") or match("OUT=") or match("FOR="); };

log { source(local); destination(messages); };

log { source(local); destination(console_all); };

log { source(local); filter(f_iptables); destination(iptables); };
```

waere es so besser ?

----------

## think4urs11

nein - jetzt würden auch alle anderen syslog-messages mit facility KERN in dein iptables-Log geschrieben.

Wenn dann brauchst du etwas in der art: 'Fac=KERN AND (match="foo" or match="bar" or match="baz")', d.h. KERN+foo, KERN+bar oder KERN+baz würden damit erfasst.

Außerdem mußt du die Logregeln umsortieren sodaß iptables _vor_ messages steht (und _mit_ flags(final)), sonst wird in beide protokolliert.

----------

## pieter_parker

baz ?  8O 

```
options {

        chain_hostnames(off);

        sync(0);

        stats(43200);

};

source local {

    unix-stream("/dev/log" max-connections(256));

    internal();

    file("/proc/kmsg");

};

destination messages { file("/var/log/messages"); };

log { source(local); filter(f_iptables); destination(iptables); flags(final); };

destination iptables { file("/var/log/iptables"); };

destination kern     { file("/var/log/kern"); };

destination console_all { file("/dev/tty12"); };

filter f_iptables   { facility(kern) and match("IN_=") or match("OUT=") or match("FOR="); };

log { source(local); destination(messages); };

log { source(local); destination(console_all); };
```

wenn ich es richtig verstanden habe muesste es nun so korrekt sein ?

----------

## Max Steel

Und wenn du jetzt noch wie Think4urs11 sagte deinen Filter vor Destination MEssage setzt dürfte das klappen. Wenn ich ihn richtig verstanden hab.

----------

## pieter_parker

naja, ich bin von ausgegangen das mit logregel 

log { source(local); filter(f_iptables); destination(iptables); flags(final); };

gemeint ist, nicht ?

----------

## think4urs11

 *pieter_parker wrote:*   

> 
> 
> ```
> log { source(local); filter(f_iptables); destination(iptables); flags(final); };
> 
> ...

 

nein

1. Erst wird die destination definiert, danach die anzuwendenden filter und am Ende wird das log-Statement konfiguriert - anders funktioniert es nicht.

Du beziehst dich im Log-Statement auf einen Filter und eine Destination die zu diesem Zeitpunkt noch gar nicht definiert ist, weil diese eben erst danach in der Config gelistet sind.

2. Deine Logik ist falsch. Was du jetzt filterst ist 'KERN+IN_=' _oder_ 'OUT=' _oder_ 'FOR=' - was du aber willst ist z.B. KERN+FOR=

Nach deiner Config würde auch CRON+OUT= nach iptables geloggt.

Im Zweifelsfall bietet sich für sowas logger an - damit kannst du ganz schnell testen ob die Config so funktioniert wie gewünscht.

----------

## pieter_parker

```
options {

        chain_hostnames(off);

        sync(0);

        stats(43200);

};

source local {

    unix-stream("/dev/log" max-connections(256));

    internal();

    file("/proc/kmsg");

};

destination messages { file("/var/log/messages"); };

log { source(local); filter(f_iptables); destination(iptables); flags(final); };

filter f_iptables   { facility(kern) and match("IN_=") or match("OUT=") or match("FOR="); };

destination iptables { file("/var/log/iptables"); };

destination kern     { file("/var/log/kern"); };

destination console_all { file("/dev/tty12"); };

log { source(local); destination(messages); };

log { source(local); destination(console_all); };
```

waere es so korrekt ?

----------

## think4urs11

 *pieter_parker wrote:*   

> waere es so korrekt ?

 

nein - es widerspricht weiterhin sowohl 1) wie auch 2) in meinem vorherigen Beitrag

----------

## pieter_parker

```
options {

        chain_hostnames(off);

        sync(0);

        stats(43200);

};

source local {

    unix-stream("/dev/log" max-connections(256));

    internal();

    file("/proc/kmsg");

};

destination messages { file("/var/log/messages"); };

destination iptables { file("/var/log/iptables"); };

filter f_iptables   { facility(kern) and match("IN_=") or match("OUT=") or match("FOR="); };

log { source(local); filter(f_iptables); destination(iptables); flags(final); };

destination kern     { file("/var/log/kern"); };

destination console_all { file("/dev/tty12"); };

log { source(local); destination(messages); };

log { source(local); destination(console_all); };
```

also fliegen mit staebchen fangen kann ich, das ist einfacher als syslog-ng zu konfigurieren glaub ich  8O 

destination

filter

und log

auch in der reinfolge nun

korrekt ?

----------

## think4urs11

 *pieter_parker wrote:*   

> 
> 
> ```
> filter f_iptables   { facility(kern) and match("IN_=") or match("OUT=") or match("FOR="); };
> ```
> ...

 

fast  :Wink: 

Du hast weiterhin das Problem daß der Filter bei 'kern+IN=_' sowie bei 'OUT=' bzw. 'FOR=' greift. Bei den beiden letzten ist es völlig egal mit welcher Facility diese geloggt werden, d.h. es kann zu 'Falschfiltern' kommen. (Weil 'Punkt vor Strich' bzw. hier AND geht vor OR)

----------

## pieter_parker

achso, dann also einfach AND durch OR ersetzen ?

```
filter f_iptables   { facility(kern) OR match("IN_=") or match("OUT=") or match("FOR="); };
```

so ?

----------

## think4urs11

nö, so würde alles mit facility kern oder IN/OUT/FOR irgendwo in der Message geloggt - auch nicht wirklich was du willst, oder?

----------

## pieter_parker

ich bekomme es nicht selbst hin und brauche wen der mir bitte sagt wie meine config aussehen muss damit iptables nicht nach /var/log/messages schreibt, sondern nach /var/log/iptables schreibt ?

----------

## pieter_parker

fragezeichen

----------

## apraxas

 *think4urs11 wrote:*   

>  *pieter_parker wrote:*   
> 
> ```
> filter f_iptables   { facility(kern) and match("IN_=") or match("OUT=") or match("FOR="); };
> ```
> ...

 

```
filter f_iptables   { facility(kern) and (match("IN_=") or match("OUT=") or match("FOR=")); };
```

sollte wohl gehen - es sei den der syslog kann keine Klammern, dann sollte das wohl gehen...

```
filter f_iptables   { facility(kern) and match("IN_=") or facility(kern) and match("OUT=") or facility(kern) and match("FOR="); };
```

----------

## Tiberian

Mit nem Log Prefix wäre es noch einfacher zu filtern:

```

iptables -A OUTPUT  -j LOG --log-prefix firewall:

iptables -A INPUT   -j LOG --log-prefix firewall:

iptables -A FORWARD -j LOG --log-prefix firewall:

```

```

filter f_firewall { facility(kern) and match(".*firewall:.*"); };

```

Grüße

Tiberian

----------

