Warum bedeutet "& ~", dass die in der vorherigen Zeile übereinstimmenden Nachrichten verworfen werden?

686
scrapy

In der Webseite iptables log

Erstellen Sie /etc/rsyslog.d/iptables.confmit folgenden Inhalten:

:msg, startswith, "iptables: " -/var/log/iptables.log & ~ 

In der zweiten Zeile werden die Nachrichten verworfen, die in der vorherigen Zeile gefunden wurden.
Warum & ~bedeutet "verwerfen der Nachrichten, die in der vorherigen Zeile gefunden wurden" in iptables config?

0

1 Antwort auf die Frage

1
Kamil Maciorowski

Es hat nichts mit bashnoch zu tun iptables(wie ursprünglich von Ihren Fragetags vorgeschlagen). Dies /etc/rsyslog.d/iptables.confist ein Teil von rsyslogdconfig, nicht von iptablesconfig.

&ist ein Teil der Syntax, die rsyslogversteht.

Es wird hier erklärt :

Sie können mehrere Aktionen für einen einzelnen Selector (oder genauer für einen einzelnen Filter einer solchen Selector-Zeile) ausführen. Jede Aktion muss sich in einer eigenen Zeile befinden und die Zeile muss mit einem kaufmännischen Und-Zeichen ( &) beginnen und darf keine Filter enthalten. Ein Beispiel wäre

*.=crit :omusrmsg:rger & root & /var/log/critmsgs 

Diese drei Leitungen senden kritische Nachrichten an den Benutzer rgerund rootspeichern sie auch in /var/log/critmsgs. Die Verwendung mehrerer Aktionen pro Auswahl ist bequem und bietet auch einen Leistungsvorteil.

Dann ~wird hier erklärt :

Wenn die Verwerfungsaktion ausgeführt wird, wird die empfangene Nachricht sofort verworfen. Es erfolgt keine weitere Bearbeitung. […] Verwerfen ist nur das Wort stopohne weitere Parameter:

stop 

Zum Beispiel,

*.* stop 

wirft alles ab (ok, man kann dasselbe erreichen, wenn man gar nicht läuft rsyslogd…).

Beachten Sie, dass in älteren Konfigurationen das Tilde-Zeichen ~anstelle des Wortes verwendet werden kann stop.

In Ihrem Fall werden übereinstimmende Meldungen in der Datei protokolliert und dann verworfen (nicht weiter verarbeitet).