Überprüfung von Listening-Ports in Linux-Systemen
Das Internet ist schon lange kein sicherer Ort mehr, es ist sehenswert, für wen wir die Tür offen lassen und wozu sie führt. Ports sind ein solches Äquivalent zu Türen in Computernetzwerken.
Wenn wir wissen, welche Anwendungen wir verwenden, Wir wissen dann, was wir unseren eigenen iptables-Firewall-Regeln oder der UDP-Whitelist hinzufügen müssen:
Wie es geht?
Auf den meisten Systemen ist der Befehl ausreichend:
1 2 | netstat -l |
Wie man es liest?
Auf den ersten Blick wirkt es wie ein italienisches Nudelgericht, aber es reicht, genauer hinzusehen, dass das Ergebnis dieses Befehls eine Fundgrube an Wissen ist
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 *:ssh *:* LISTEN tcp 0 0 *:40833 *:* LISTEN tcp 0 0 localhost:27017 *:* LISTEN tcp 0 0 localhost:mysql *:* LISTEN tcp 0 0 *:sunrpc *:* LISTEN tcp 0 0 *:46834 *:* LISTEN tcp6 0 0 [::]:ssh [::]:* LISTEN tcp6 0 0 [::]:43937 [::]:* LISTEN tcp6 0 0 [::]:57793 [::]:* LISTEN tcp6 0 0 [::]:sunrpc [::]:* LISTEN udp 0 0 localhost:608 *:* udp 0 0 *:674 *:* udp 0 0 *:59774 *:* udp 0 0 *:bootpc *:* udp 0 0 *:sunrpc *:* udp 0 0 *:41251 *:* udp6 0 0 [::]:674 [::]:* udp6 0 0 [::]:43086 [::]:* udp6 0 0 [::]:40189 [::]:* udp6 0 0 [::]:sunrpc [::]:* Active UNIX domain sockets (only servers) Proto RefCnt Flags Type State I-Node Path unix 2 [ ACC ] STREAM LISTENING 7424585 /tmp/mongodb-27017.sock unix 2 [ ACC ] STREAM LISTENING 24344048 /run/user/1000/systemd/private unix 2 [ ACC ] STREAM LISTENING 7467947 /run/user/1002/systemd/private unix 2 [ ACC ] STREAM LISTENING 7459911 /run/user/1001/systemd/private unix 2 [ ACC ] SEQPACKET LISTENING 7951 /run/udev/control unix 2 [ ACC ] STREAM LISTENING 7885 /run/systemd/journal/stdout unix 2 [ ACC ] STREAM LISTENING 7931 /run/lvm/lvmetad.socket unix 2 [ ACC ] STREAM LISTENING 7952 /run/lvm/lvmpolld.socket unix 2 [ ACC ] STREAM LISTENING 13305 /var/lib/lxd/unix.socket unix 2 [ ACC ] STREAM LISTENING 13303 /run/uuidd/request unix 2 [ ACC ] STREAM LISTENING 13304 /var/run/dbus/system_bus_socket unix 2 [ ACC ] STREAM LISTENING 13306 /run/acpid.socket unix 2 [ ACC ] STREAM LISTENING 13307 /run/snapd.socket unix 2 [ ACC ] STREAM LISTENING 13308 /run/snapd-snap.socket unix 2 [ ACC ] STREAM LISTENING 14766 @ISCSIADM_ABSTRACT_NAMESPACE unix 2 [ ACC ] STREAM LISTENING 24019 /run/systemd/private unix 2 [ ACC ] STREAM LISTENING 42459 /var/run/mysqld/mysqld.sock unix 2 [ ACC ] STREAM LISTENING 45141 /run/rpcbind.sock |
Nach diesem Ergebnis können wir schließen, dass dieses System MySQL und MongoDB ausführt.
Sie haben MySQL:
1 2 | tcp 0 0 localhost:mysql *:* LISTEN |
MySQL verwendet standardmäßig den Port 3306 und es ist seit vielen Jahren eine ziemlich bekannte Anwendung, daher teilt uns die Anwendung sofort mit, dass es sich um den von MySQL verwendeten Port anstelle der Portnummer handelt
Hast du MongoDB:
1 2 | tcp 0 0 localhost:27017 *:* LISTEN |
Mongo ist weniger bekannt und viel jünger, hier wird uns der Port angezeigt 27017
.
Wir können auch verwenden netstat -ln
, dann erhalten wir eine Liste aller Ports, ohne zu erkennen, was was ist.
Beide Apps haben localhost:
vor dem Hafen, damit sie nur lokal zuhören, das heißt, sie sind von außen über das Netzwerk nicht zugänglich. Es ist eine sichere Lösung, da es besser ist, Fremden keinen Zugriff auf unsere Datenbank zu gewähren, auch wenn diese passwortgeschützt ist.
Zum Beispiel, wenn wir den Zugriff von außen erlauben, es kann sich in Zukunft herausstellen, dass es eine Lücke gibt, die es Ihnen ermöglicht, sich ohne Passwort einzuloggen, und wir werden das Update vergessen und das Problem ist fertig.
Hier sehen wir einen SSH-Server, der auf einem Standardport lauscht:
1 2 | tcp 0 0 *:ssh *:* LISTEN |
Es ist draußen exponiert, aber SSH ist eine bewährte Anwendung und irgendwie müssen wir auch auf den Server kommen, also mach dir keine Sorgen, solange wir ein langes und zufällig generiertes Passwort haben oder uns mit einem Schlüsselpaar anmelden (öffentlich und privat).
Wir haben auch eine Neugier am Boden:
1 2 | unix 2 [ ACC ] STREAM LISTENING 42459 /var/run/mysqld/mysqld.sock |
Es ist ein Hafen, aber nicht wirklich. Es ist eine Steckdose (Stecker) wodurch sich die Anwendung nicht über eine Standard-Netzwerkadresse, sondern über eine Datei verbinden kann. Einige Anwendungen unterstützen die Verbindung über UNIX-Sockets, und hier ist ein Beispiel dafür. Diese Dateien sind in keiner Weise der Welt ausgesetzt, Sie sind eine gute Lösung, um Dienste auf einem Server mit verschiedenen Benutzern zu verbinden, da Sie die Rechte der Benutzer für diese Ressource wie jede andere Datei auf der Festplatte ändern können.
Es funktioniert nicht!
Wenn wir keinen solchen Befehl im System haben wie netstat
, du musst das paket installieren net-tools
.
Bei Debian und Derivaten wie z.B.. Ubuntu führe einfach diese Befehle aus, um es zu installieren:
1 2 3 | apt-get update apt-get install net-tools |
Ausreichend für CentOS und andere RHEL-Derivate:
1 2 | yum install net-tools |