Protokollieren Sie die Verbindungen zum Programm

9

Außerdem für die Verwendung von iptables zum Protokollieren eingehender Verbindungen.

Gibt es eine Möglichkeit, etablierte eingehende Verbindungen zu einem Dienst zu protokollieren, für den Sie nicht die Quelle haben (nehmen wir an, der Dienst protokolliert solche Dinge nicht selbst)? Was ich tun möchte, ist, einige Informationen zu sammeln, die darauf basieren, wer eine Verbindung herstellt, um Dinge wie die Tageszeiten, zu denen der Dienst am häufigsten genutzt wird, wo auf der Welt die Hauptbenutzerbasis usw. ist, mitteilen zu können.

Ich bin mir bewusst, dass ich es verwenden netstatund einfach an ein Cron-Skript anschließen kann, aber das ist möglicherweise nicht korrekt, da das Skript nur so oft wie eine Minute ausgeführt werden kann.

Folgendes denke ich gerade:

  • Schreiben Sie ein Programm, das ständig abfragt netstatund nach etablierten Verbindungen sucht, die in der vorherigen Umfrage nicht angezeigt wurden. Diese Idee scheint jedoch eine solche Verschwendung von CPU-Zeit zu sein, da möglicherweise keine neue Verbindung besteht.
  • Schreiben Sie ein Wrapper-Programm, das eingehende Verbindungen an jedem Port akzeptiert, auf dem der Dienst ausgeführt wird, aber dann würde ich nicht wissen, wie diese Verbindung an den tatsächlichen Dienst weitergegeben werden soll.

Bearbeiten: Mir ist gerade eingefallen, dass diese Frage für den Stapelüberlauf besser sein könnte, obwohl ich nicht sicher bin. Entschuldigung, wenn dies der falsche Ort ist.

Zac
quelle
Warum schließen Sie die Verwendung von iptables aus? Welchen Port überwacht unsere Anwendung?
user9517
Hauptsächlich, weil ich mehr Kontrolle über die Protokollierung haben möchte. Im Idealfall möchte ich nur in der Lage sein, die Protokollierung so durchzuführen, wie ich es möchte, wenn eine neue Verbindung erkannt wird. Beliebiger Port. Es gibt keine einzige spezifische Anwendung, für die ich dies verwenden würde, weshalb ich nicht frage, wie etwas in der Tiefe wie ein Benutzername oder ähnliches protokolliert werden soll.
Zac
Sie können iptables nur verwenden, um neue eingehende Verbindungen an einem beliebigen Port zu protokollieren. Ich mache das auf ein paar Kisten. Also wiederhole ich Iains ausgezeichnete Frage: Warum schließen Sie die Verwendung von Iptables aus?
MadHatter
Können Sie vor der Bewerbung einen Proxy platzieren? Es muss nur eine sehr einfache sein, die die Anforderungen empfängt, protokolliert und weiterleitet. Sie können das eingehende Signal an den Proxy weiterleiten, der es dann an die Anwendung am ursprünglichen Port weiterleitet.
John Gardeniers

Antworten:

4

So können Sie neue Verbindungen mit iptables protokollieren

iptables -I INPUT -m state --state NEW -j LOG --log-level 1 --log-prefix "New Connection "

Dadurch wird eine Nachricht wie diese für eine neue SSH-Verbindung hinzugefügt

6. Oktober 10:58:23 Centos Kernel: Neue Verbindung IN = eth0 OUT = MAC = 00: 0c: 29: 5b: a5: ea: 00: 0c: 29: 2d: 94: a0: 08: 00 SRC = 192.168. 1,72 DST = 192,168,254,187 LEN = 52 TOS = 0x00 PREC = 0x00 TTL = 126 ID = 15498 DF PROTO = TCP SPT = 59221 DPT = 22 WINDOW = 8192 RES = 0x00 SYN URGP = 0

oder so für eine neue http-Verbindung

6. Oktober 11:03:56 Centos Kernel: Neue Verbindung IN = eth0 OUT = MAC = 00: 0c: 29: 5b: a5: ea: 00: 0c: 29: d2: 2c: 38: 08: 00 SRC = 192.168. 254.188 DST = 192.168.254.187 LEN = 60 TOS = 0x10 PREC = 0x00 TTL = 64 ID = 10345 DF PROTO = TCP SPT = 52488 DPT = 80 WINDOW = 14600 RES = 0x00 SYN URGP = 0

und so weiter für jede neue Verbindung zu Ihrem System. Das wird überall dort protokolliert, wo Ihr Syslog zum Senden von kern.warning-Nachrichten konfiguriert ist.

user9517
quelle
Nachdem ich mich mehr umgesehen habe, scheint dieser Weg meine beste Wahl zu sein. Ich werde dies einfach mit rsyslog kombinieren, um mich in einer separaten Datei anzumelden. Vielen Dank für Ihre informative Antwort Iain!
Zac
0

Sie können auditd verwenden und am Ende des Tages einige Statistiken basierend auf diesen Protokollzeilen berechnen. Oder Sie könnten auch zu einer snmp-Lösung gehen, aber wahrscheinlich haben Sie Ihre eigene Mib geschrieben

Nikolaidis Fotis
quelle
0

Wie wäre es mit tcpdump oder wireshark?

Guntis
quelle
Bitte erweitern Sie Ihre Antwort etwas mehr. Vielleicht dem Benutzer vorschlagen, wie tcpdump und wireshark die Fehlerbehebung unterstützen würden.
Magellan
tcpdump Handbuch damit könnten Sie vollständige Pakete protokollieren. Sie können Pakete auch mit tcpdump erfassen und dann in wireshark analysieren. tcpdump -i <interface> -s 65535 -w <some-file>Außerdem müssen Sie die Erfassung mit ^ C beenden, wenn Sie glauben, genügend Pakete erfasst zu haben.
Guntis