Massiver Traffic durch ntpd - Abhilfe?

testit

Well-Known Member
Hallo,

seit einigen Tagen habe ich das Problem, dass auf meinem Server pro Stunde eta 2GB TRaffic verursacht werden, für die ich keine Erklärung habe. Ich erhalte diesbezüglich Mails vom Provider meines Root-Servers!

Auch das testweise Herunterfahren des Web- und MySQL-Servers brachte keine Besserung.

Per tcpdump habe ich festgestellt, dass zig Mal pro Sekunde folgende Requests ablaufen:

2013-12-29 12:33:31.863253 IP ExterneIP.123 > 11.22.33.44.123: NTPv2, Reserved, length 8
2013-12-29 12:33:31.863269 IP 11.22.33.44 > ExterneIP: ICMP 11.22.33.44 udp port 123 unreachable, length 36

Ich habe erst einmal den ntpd bei mir gekillt. Davor waren statt "length 36" immer "length 440" zu verzeichnen.

Weiß jemand von Euch, was bei mir abläuft?
Ist das eine Attacke? Oder irgendein Konfigurationsfehler?
Letzterer würde mich wundern, da bis vor einigen Tagen alles normal lief.

Herzlichen Dank für Eure Hilfe!
testit
 
Hallo,

Als Notlösung kannst du mal mit einer Firewall (pf) sämtlichen Traffic/Port ausser (ssh, http, https oder was du sonst noch brauchst) blockieren.
 
für gewöhnlich kann auch ntop die diejenige Art von Traffic aufzeigen, welche im letzten Zeiraum das meiste Volumen in Anspruch nahm http://www.freshports.org/net/ntop/
Welche Syntax für tcpdump hast du dir bereits zurecht gelegt, um eine längere Zeitspanne zu beobachten und auszuwerten?

@foxit: Ich muss mich erst mal mit pf auseinandersetzen, habe das bisher nicht genutzt.

@Illuminatus: Installiere mir gerade ntop. Aber auch für ntop muss ich erst einmal nachlesen, wie es genutzt wird.

Einen längeren Zeitraum als 1h brauche ich nicht mit tcpdump zu beobachten, da der erhöhte Traffic ja JEDE Stunde auftritt.

Habe mal die letzten beiden Stunden mit
tcpdump -w tcpdum29dez2013.pcap -ttttni re0 not port ssh
protokolliert und beabsichtige, mir das Ganze dann mal mit einem TCPDUMP-Analyzer anzuschauen.

Viele Grüße und besten Dank
testit
 
Ich habe ntop installiert und gestartet!

U.a. wird ausgegeben:
INITWEB: Waiting for HTTP connections on port 3000

Wenn ich nun im Browser
http://meinedomain.de:3000
aufrufe, wirft der Browser eine Fehlermeldung "Keine Verbindung" aus!

Woran könnte das liegen?

Viele Grüße
testit
 
Installiere dir in Zukunft OpenNTP (diesen kannst du ausschließlich auf localhost binden), oder konfiguriere deinen NTP-Server so, dass er externe Anfragen nicht beantwortet.

Weiterhin könnte dir ein "netstat" schonmal die aktuellen Verbindungen zeigen.
mit netstat -na bekommst du auch heraus, welche Dienste auf welchen Ports und Adressen lauschen.

Edit: Sorry, nicht genau hingesehen
Dein ntp-Daemon scheint sauber konfiguriert zu sein, da ja explizit ICMP-Antwortet mit der Auskunft "Kein UDP-Dienst auf dem Port 123 vorhanden" rausgehen.
Könntest also entweder ausgehend ICMP verbieten, oder direkt eingehend ntp.

Gruß
Markus
 
Mit netstat hatte ich natürlich als erstes versucht, Hinweise auf die Ursache zu finden!
Das reicht nicht, daher der Weg über tcpdump.

Nach wie vor ist mir unklar, warum ntop - definitiv an Port 3000 lauscht - über meinen Browser nicht aufrufbar ist bzw. keine positive Response erzeugt.


Viele Grüße
testit
 
Ich kenne selbst ntop jetzt nicht, kann mir aber vorstellen, dass es nur auf localhost lauscht.

Dann müsstest du über ein SSH-Forwarding arbeiten.

ssh -L 3000:ip-deines-servers:3000 username@ip-deines-servers (unter der Annahme du hast tcpforwarding nicht verboten).

Dann kannst du in deinem Browser über "localhost:3000" das Webinterface aufrufen.

Wenn du Windows + Putty nimmst, musst du das Lokale Forwarding konfigurieren.

Gruß
Markus
 
Edit: Sorry, nicht genau hingesehen
Dein ntp-Daemon scheint sauber konfiguriert zu sein, da ja explizit ICMP-Antwortet mit der Auskunft "Kein UDP-Dienst auf dem Port 123 vorhanden" rausgehen.
Könntest also entweder ausgehend ICMP verbieten, oder direkt eingehend ntp.

Gruß
Markus

Hallo Markus,

ich hatte ja oben schon geschrieben, dass - BEVOR ich den ntpd gekillt habe - andere Meldungen mit LENGTH 440 bekommen hatte.
Code:
10:44:59.880884 IP meinedomain.de.ntp > externeIP.ntp: NTPv2, Reserved, length 440
10:44:59.880886 IP meinedomain.de.ntp > externeIP.ntp: NTPv2, Reserved, length 440
10:44:59.880888 IP meinedomain.de.ntp > externeIP.ntp: NTPv2, Reserved, length 440
10:44:59.880890 IP meinedomain.de.ntp > externeIP.ntp: NTPv2, Reserved, length 440
10:44:59.880893 IP meinedomain.de.ntp > externeIP.ntp: NTPv2, Reserved, length 440
10:44:59.880895 IP meinedomain.de.ntp > externeIP.ntp: NTPv2, Reserved, length 440
10:44:59.880899 IP meinedomain.de.ntp > externeIP.ntp: NTPv2, Reserved, length 440
10:44:59.880901 IP meinedomain.de.ntp > externeIP.ntp: NTPv2, Reserved, length 440
10:44:59.880904 IP meinedomain.de.ntp > externeIP.ntp: NTPv2, Reserved, length 440
10:44:59.880906 IP meinedomain.de.ntp > externeIP.ntp: NTPv2, Reserved, length 440
10:44:59.880908 IP meinedomain.de.ntp > externeIP.ntp: NTPv2, Reserved, length 440
10:44:59.880911 IP meinedomain.de.ntp > externeIP.ntp: NTPv2, Reserved, length 440
10:44:59.880913 IP meinedomain.de.ntp > externeIP.ntp: NTPv2, Reserved, length 440
10:44:59.880915 IP meinedomain.de.ntp > externeIP.ntp: NTPv2, Reserved, length 440
10:44:59.880917 IP meinedomain.de.ntp > externeIP.ntp: NTPv2, Reserved, length 440

Mir drängen sich daher ZWEI grundlegende Fragen auf:

A)
Benötige ICH überhaupt einen ntpd? Für was?
Ich selbst habe in meiner crontab nur einen regelm. Aufruf der Form
/usr/sbin/ntpdate -bsuv ntp1.ptb.de
drin stehen, um meine Maschine zeitlich zu syncen.

B)
Noch wichtiger erscheint mir die Frage, wie es zu diesen UNMENGEN an ntp-Requests auf meinem Server kommen kann?
Ich halte das nicht für einen Zufall!


Viele Grüße
testit
 
A) Ja, du brauchst einen ntpd. Der Daemon verändert die Länge einer Sekunde deiner Systemuhr, lässt die Zeit also minimal langsamer oder schneller vergehen. Damit bleibt die Uhr immer exakt eingestellt. Dein Cronjob hingegen verstellt die Uhr bei jedem Aufruf, die Zeit "springt". Es gibt Dienste, die mögen Zeitsprünge überhaupt nicht und verhalten sich anschließend seltsam oder explodieren vollständig.

B) Unter FreeBSD war bis vor sehr kurzem der ntpd absolut bescheiden vorkonfiguriert, nämlich de facto offen für die Welt. Das wird sich mit 10.0 ändern. Die Requests kommen entweder daher, dass jemand dort einen schönen NTP-Server gefunden hat und nun zusammen mit seinen Kollegen nutzt, oder jemand möchte dich Ärgern und probiert dort einen Arme-Leute-DOS.
 
Hallo Yamagi,

also werde ich nun erst einmal nach Infos zum "Absichern" meines ntpd nach außen suchen, wie schon von M4rkus angesprochen.

Sind Deine Ausführungen zu A so zu verstehen, dass ich
/usr/sbin/ntpdate -bsuv ntp1.ptb.de
wieder rauswerfen sollte?

Irgendwoher muss das System doch eine GENAUE Uhrzeit erhalten!?

Viele Grüße
testit
 
Also, FreeBSD misst - wie eigentlich alle unixoiden Systeme - die Zeit in Sekunden seit dem 1.1.1970 00:00 Uhr. Dabei werden Schaltsekunden und so ein Mist nicht berücksichtigt, es wird einfach stumpf hochgezählt. ntpdate stellt die Uhr stumpf. Nehmen wir mal an, deine Uhr geht 10 Sekunden nach. Dann beträgt die Zeit vor dem Stellen der Uhr z.B. 1388339546 Sekunden und nach dem Stellen 1388339556 Sekunden. Wenn ein zeitkritisches Programm - das können schon so simple Dinge wie make(1) sein - direkt vor und nach dem Stellen die zeit abfragt, denkt es natürlich, dass 10 Sekunden vergangen sein. Schließlich ist die Uhr 10 Sekunden weitergelaufen. In Wirklichkeit ist aber keine Zeit vergangen. Die Zeit "springt" also. Noch schöner ist es, wenn die Uhr zurückgestellt wird. Du hast z.B. 1388339546, ntpdate korrigiert um 10 Sekunden auf 1388339536. Aus Sicht des Programms läuft die Zeit nun rückwärts, was sehr böse Nebenwirkungen haben kann. "make buildwold" hat sogar mal eine Sperre eingebaut bekommen, sodass er bei rückwärts laufender Uhr sofort abbricht. Bevor er das System zerschrottet.

ntpd ist klüger. Er sieht, dass die Uhr 10 Sekunden hinterher ist. Um diese 10 Sekunden aufzuholen, verkürzt er die Darstellung einer Sekunde leicht. Statt "1" beträgt sie dann z.B. nur noch "0.9". Die Uhr läuft dadurch schneller und holt auf, bevor sie rechtzeitig wieder gebremst wird. Sobald die Uhr einmal synchron ist, wird ntpd sie überwachen und ihre Geschwindigkeit so anpassen, dass sie im einstelligen Millisekundenbereich um den korrekten Wert pendelt. Bei diesem Verfahren gibt es keine Sprünge und vor allem kann die Uhr nicht rückwärts laufen. Die geringen Abweichungen in ihrer Geschwindigkeit gehen als normaler, bei Quarts-Taktgebern unvermeidbarer Jitter durch. Es funktioniert aber nur bis zu einer gewissen Abweichung. Unter FreeBSD kann man daher in der rc.conf ntpd_sync_on_start="YES" setzen. Dann wird die Uhr einmalig beim Systemstart, bevor Dienste laufen, per Sprung korrekt gestellt. Anschließend hält ntpd sie dann korrekt.
 
Zur Absicherung: Wahrscheinlich würde schon reichen ntpd auf Localhost zu begrenzen. Z.B. mit
Code:
restrict 127.0.0.1
in der /etc/ntp.conf. Besser wäre allerdings, zusätzlich noch eine Firewall-Regel zu setzen, die eingehende UDP-Pakete auf Port 123 blockt. Natürlich nur, wenn es zuvor kein ausgehendes Paket an die Quell-Adresse gab.
 
Hallo,

ich hatte bereits folgendes eingetragen:
Code:
server 0.freebsd.pool.ntp.org iburst maxpoll 9
server 1.freebsd.pool.ntp.org iburst maxpoll 9
server 2.freebsd.pool.ntp.org iburst maxpoll 9
#server 3.freebsd.pool.ntp.org iburst maxpoll 9

restrict default kod nomodify notrap nopeer noquery
restrict -6 default kod nomodify notrap nopeer noquery
restrict 127.0.0.1
restrict -6 ::

Gem. tcpdump werden nun nur noch "length 8" zurückgegeben.

Das mit der Firewall muss ich mir erst genaustens anschauen, da ich das unter FreeBSD noch nie genutzt habe und am besten erst einmal mit einer VM teste.

Viele Grüße und herzlichen Dank an alle Tippgeber

testit
 
Ich hab da letztens erst eine Geschichte gelesen, wo einer versehentlich minütlich 'nen neuen ntpd gestartet hatte und es erst auffiel, als einer der "ge-DoS-ten" Admins 'ne mail geschickt hat. Hast du mal nachgesehen, wieviele Instanzen von ntpd bzw. ntpdate auf der Kiste laufen?
 
Hallo worldi,

es läuft nur ein ntpd bei mir!

Da es um eingehende NTP-Requests geht, kann ich mir gegenwärtig kaum vorstellen, welcher Zusammenhang bei dem von Dir geschilderten Szenario bestanden haben könnte.

Herzliche Grüße
testit
 
Unter FreeBSD kann man daher in der rc.conf ntpd_sync_on_start="YES" setzen. Dann wird die Uhr einmalig beim Systemstart, bevor Dienste laufen, per Sprung korrekt gestellt. Anschließend hält ntpd sie dann korrekt.

Hallo,

ich habe mich inzwischen für OpenNTPD entschieden und installiert.
Jetzt stellt sich mir die Frage, ob das von Dir angegebene
ntpd_sync_on_start="YES"
auch mit OpenNTPD funktioniert?

Danke und Gruß´
testit
 
Hallo,

ich habe mich inzwischen für OpenNTPD entschieden und installiert.
Jetzt stellt sich mir die Frage, ob das von Dir angegebene
ntpd_sync_on_start="YES"
auch mit OpenNTPD funktioniert?

Danke und Gruß´
testit
Nein. Dazu braucht openntpd den Startparameter "-s", dann wird die Zeit beim Starten des Dienstes(!) synchronisiert. Lustigerweise wurde eine Zeit lang bei Nichterreichbarkeit des eingestellten Zeitservers endlos auf eine Antwort gewartet... War beim Systemstart von OpenBSD nicht so schön, da das System damit hing.

Die Option "maxpoll" ist in aktuellen Versionen (ab FBSD 8 oder so) nicht mehr defaultmäßig angegeben. Welche Version setzt du ein?
 
Nein. Dazu braucht openntpd den Startparameter "-s", dann wird die Zeit beim Starten des Dienstes(!) synchronisiert. Lustigerweise wurde eine Zeit lang bei Nichterreichbarkeit des eingestellten Zeitservers endlos auf eine Antwort gewartet... War beim Systemstart von OpenBSD nicht so schön, da das System damit hing.

Die Option "maxpoll" ist in aktuellen Versionen (ab FBSD 8 oder so) nicht mehr defaultmäßig angegeben. Welche Version setzt du ein?

Hi,

ich setze 4.6.2.2 ein.

Viele Grüße
testit
 
Guten Morgen,

mir ist aufgefallen, dass trotz entsprechend konfiguriertem openntpd mein Server auf nach wie vor eingehende Requests wie folgt reagiert:
IP MEINE-SERVER_IP > EXTERNE-IP: ICMP MEINE-SERVER_IP udp port 123 unreachable, length 36

Die Länger ist jetzt zwar "nur noch" 36, aber das auch mehrmals in der Sekunde.

FRAGE: Kann ich diese "Antworten" auch ohne Firewall abstellen?

Ich habe noch nicht die Zeit gefunden, mich in die Handhabung der Firewall unter FreeBSD einzulesen und habe Bedenken, jetzt mit einem Schnellschuss beim Sperren von eingehenden Requests auf Port 123 etwas falsch zu machen.


Vielen Dank und freundliche Grüße
testit
 
mir ist aufgefallen, dass trotz entsprechend konfiguriertem openntpd mein Server auf nach wie vor eingehende Requests wie folgt reagiert:
IP MEINE-SERVER_IP > EXTERNE-IP: ICMP MEINE-SERVER_IP udp port 123 unreachable, length 36
Brauchst du das für andere Maschinen? Ich verstehe das jetzt nicht ganz. Wenn nicht, kannst du OpenNTPD auch auf "localhost" binden. /usr/local/etc/ntpd.conf
Code:
listen on 127.0.0.1
server 0.de.pool.ntp.org
server 1.de.pool.ntp.org

Gruss
 
Zurück
Oben