Einführung
A port is a communication endpoint. Within an operating system, a port is opened or closed to data packets for specific processes or network services.
Üblicherweise identifizieren Ports einen spezifischen Netzwerkdienst, der ihnen zugewiesen ist. Dies kann durch manuelle Konfiguration des Dienstes geändert werden, um einen anderen Port zu verwenden, aber im Allgemeinen können die Standardwerte verwendet werden.
Die ersten 1024 Ports (Portnummern 0
bis 1023
) werden als wohlbekannte Portnummern bezeichnet und sind für die am häufigsten genutzten Dienste reserviert. Dazu gehören SSH (Port 22
), HTTP (Port 80
), HTTPS (Port 443
).
Portnummern über 1024 werden als ephemere Ports bezeichnet.
- Portnummern
1024
bis49151
werden als registrierte/Benutzerports bezeichnet. - Portnummern
49152
bis65535
werden als dynamische/private Ports bezeichnet.
In diesem Tutorial werden Sie einen ephemeren Port unter Linux öffnen, da die am häufigsten genutzten Dienste die wohlbekannten Ports verwenden.
Bereitstellen Ihrer Anwendungen von GitHub mit DigitalOcean App Platform. Lassen Sie DigitalOcean sich um das Skalieren Ihrer App kümmern.
Voraussetzungen
Um dieses Tutorial zu vervollständigen, benötigen Sie:
- Vertrautheit mit der Verwendung des Terminals.
Alle offenen Ports auflisten
Bevor Sie einen Port auf Linux öffnen, müssen Sie die Liste aller offenen Ports überprüfen und einen ephemeren Port auswählen, der nicht in dieser Liste enthalten ist.
Verwenden Sie den Befehl netstat
, um alle offenen Ports aufzulisten, einschließlich TCP und UDP, die die häufigsten Protokolle für die Paketübertragung in der Netzwerkschicht sind.
- netstat -lntu
Dies wird ausgedruckt:
- alle lauschen Sockets (
-l
) - die Port Nummer (
-n
) - TCP Ports (
-t
) - UDP Ports (
-u
)
OutputActive Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 127.0.0.1:5432 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:27017 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp6 0 0 ::1:5432 :::* LISTEN
tcp6 0 0 ::1:6379 :::* LISTEN
tcp6 0 0 :::22 :::* LISTEN
udp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN
Hinweis: Wenn Ihre Distribution kein netstat
hat, können Sie den Befehl ss
verwenden, um offene Ports anhand der überwachten Sockets anzuzeigen.
Überprüfen Sie, ob Sie konsistente Ausgaben erhalten, indem Sie den Befehl ss
verwenden, um die lauschenden Sockets mit einem offenen Port aufzulisten:
- ss -lntu
Dies wird ausgedruckt:
OutputNetid State Recv-Q Send-Q Local Address:Port Peer Address:Port
udp UNCONN 0 0 127.0.0.53%lo:53 0.0.0.0:*
tcp LISTEN 0 128 127.0.0.1:5432 0.0.0.0:*
tcp LISTEN 0 128 127.0.0.1:27017 0.0.0.0:*
tcp LISTEN 0 128 127.0.0.1:6379 0.0.0.0:*
tcp LISTEN 0 128 127.0.0.53%lo:53 0.0.0.0:*
tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
tcp LISTEN 0 128 [::1]:5432 0.0.0.0:*
tcp LISTEN 0 128 [::1]:6379 0.0.0.0:*
tcp LISTEN 0 128 [::]:22 0.0.0.0:*
Dies gibt mehr oder weniger dieselben offenen Ports wie netstat
aus.
Öffnen Sie einen Port auf Linux, um TCP-Verbindungen zu ermöglichen
Öffnen Sie jetzt einen geschlossenen Port und lassen Sie ihn auf TCP-Verbindungen warten.
Zu Demonstrationszwecken öffnen Sie den Port 4000
. Wenn dieser Port in Ihrem System nicht geöffnet ist, wählen Sie bitte einen anderen geschlossenen Port aus. Stellen Sie sicher, dass er größer als 1023
ist.
Überprüfen Sie, ob der Port 4000
nicht verwendet wird, indem Sie den Befehl netstat
verwenden:
- netstat -na | grep :4000
Oder den Befehl ss
:
- ss -na | grep :4000
Die Ausgabe sollte leer bleiben, um zu bestätigen, dass der Port derzeit nicht verwendet wird. Sie können dann die Portregeln manuell zur iptables-Firewall des Systems hinzufügen.
Für Ubuntu-Benutzer und Systeme, die auf ufw
basieren
Verwenden Sie ufw
– den Befehlszeilenclient für die UncomplicatedFirewall.
Ihre Befehle sehen etwa so aus:
- sudo ufw allow 4000
Siehe Wie man eine ufw
-Firewall einrichtet für Ihre Distribution.
Hinweis:
- Ubuntu 14.04: „Bestimmte Portbereiche zulassen“
- Ubuntu 16.0.4/18.0.4/20.0.4/22.0.4: „Zulassen anderer Verbindungen / bestimmter Portbereiche“
- Debian 9/10/11: „Zulassen anderer Verbindungen / bestimmter Portbereiche“
Für CentOS und Systeme, die auf firewalld
basieren
Verwenden Sie firewall-cmd
– den Befehlszeilenclient für den firewalld
Daemon.
Ihre Befehle sehen wie folgt aus:
- firewall-cmd --add-port=4000/tcp
Beachten Sie „Wie man firewalld
einrichtet“ für Ihre Distribution.
Hinweis:
- CentOS 7/8: „Regeln für Ihre Anwendungen festlegen / Öffnen eines Ports für Ihre Zonen“
- Rocky Linux 8/9: „Regeln für Ihre Anwendungen festlegen / Öffnen eines Ports für Ihre Zonen“
Für andere Linux-Distributionen
Verwenden Sie iptables
, um die IPv4-Paketfilterregeln des Systems zu ändern.
- iptables -A INPUT -p tcp --dport 4000 -j ACCEPT
Beachten Sie „Wie man eine Firewall mit iptables
einrichtet“ für Ihre Distribution.
Hinweis:
- Ubuntu 12.04: „Eine grundlegende Firewall“
- Ubuntu 14.04: „Andere erforderliche Verbindungen akzeptieren“
Testen Sie den neu geöffneten Port für TCP-Verbindungen
Jetzt, da Sie erfolgreich einen neuen TCP-Port geöffnet haben, ist es Zeit, ihn zu testen.
Zuerst starten Sie netcat (nc
) und hören (-l
) auf Port (-p
) 4000
, während Sie die Ausgabe von ls
an jeden verbundenen Client senden:
- ls | nc -l -p 4000
Nachdem ein Client eine TCP-Verbindung auf Port 4000
geöffnet hat, erhält er die Ausgabe von ls
. Lassen Sie diese Sitzung vorerst offen.
Öffnen Sie eine weitere Terminal-Sitzung auf demselben Computer.
Da Sie einen TCP-Port geöffnet haben, verwenden Sie telnet
, um die TCP-Konnektivität zu überprüfen. Wenn der Befehl nicht existiert, installieren Sie ihn über Ihren Paketmanager.
Geben Sie Ihre Server-IP und die Portnummer (4000
in diesem Beispiel) ein und führen Sie diesen Befehl aus:
- telnet localhost 4000
Dieser Befehl versucht, eine TCP-Verbindung auf localhost
auf Port 4000
herzustellen.
Sie erhalten eine ähnliche Ausgabe wie diese, die anzeigt, dass eine Verbindung zum lauschenden Programm (nc
) hergestellt wurde:
OutputTrying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
while.sh
Die Ausgabe von ls
(while.sh
in diesem Beispiel) wurde ebenfalls an den Client gesendet, was auf eine erfolgreiche TCP-Verbindung hinweist.
Verwenden Sie nmap
, um zu überprüfen, ob der Port (-p
) geöffnet ist:
- nmap localhost -p 4000
Dieser Befehl überprüft den geöffneten Port:
OutputStarting Nmap 7.60 ( https://nmap.org ) at 2020-01-18 21:51 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00010s latency).
Other addresses for localhost (not scanned): ::1
PORT STATE SERVICE
4000/tcp open remoteanything
Nmap done: 1 IP address (1 host up) scanned in 0.25 seconds
Der Port wurde geöffnet. Sie haben erfolgreich einen neuen Port auf Ihrem Linux-System geöffnet.
Hinweis: nmap
listet nur geöffnete Ports auf, die eine aktuell lauschende Anwendung haben. Wenn Sie keine lauschende Anwendung verwenden, wie zum Beispiel netcat, wird der Port 4000
als geschlossen angezeigt, da auf diesem Port derzeit keine Anwendung lauscht. Ähnlich funktioniert auch telnet
nicht, da es ebenfalls eine lauschende Anwendung benötigt, um sich zu binden. Das ist der Grund, warum nc
ein so nützliches Werkzeug ist. Es simuliert solche Umgebungen mit einem einfachen Befehl.
Aber dies ist nur vorübergehend, da die Änderungen bei jedem Neustart des Systems zurückgesetzt werden.
Regeln beibehalten
Der in diesem Artikel vorgestellte Ansatz aktualisiert die Firewall-Regeln nur vorübergehend, bis das System heruntergefahren oder neu gestartet wird. Daher müssen ähnliche Schritte wiederholt werden, um denselben Port nach einem Neustart erneut zu öffnen.
Für die ufw
-Firewall
ufw
Regeln werden beim Neustart nicht zurückgesetzt. Dies liegt daran, dass es in den Bootprozess integriert ist und der Kernel die Firewall-Regeln mit ufw
durch Anwendung entsprechender Konfigurationsdateien speichert.
Für firewalld
Sie müssen das Flag --permanent
anwenden.
Beachten Sie Wie man firewalld
einrichtet für Ihre Distribution.
Hinweis:
- CentOS 7/8: „Regeln für Ihre Anwendungen festlegen“
- Rocky Linux 8/9: „Regeln für Ihre Anwendungen festlegen“
Für iptables
Sie müssen die Konfigurationsregeln speichern. Diese Tutorials empfehlen iptables-persistent
.
Sehen Sie sich Wie man eine Firewall mit iptables
einrichtet für Ihre Distribution an.
Hinweis:
- Ubuntu 12.04: „Speichern von Iptables-Regeln“
- Ubuntu 14.04: „Speichern Ihrer Iptables-Konfiguration“
Schlussfolgerung
In diesem Tutorial haben Sie gelernt, wie Sie einen neuen Port unter Linux öffnen und für eingehende Verbindungen einrichten. Sie haben auch netstat
, ss
, telnet
, nc
und nmap
verwendet.
Weiterführende Lernmöglichkeiten umfassen Wie die Iptables-Firewall funktioniert, Eine eingehende Analyse der Iptables- und Netfilter-Architektur, Verständnis von Sockets und So verwenden Sie Top, Netstat, Du & Andere Tools zur Überwachung von Serverressourcen.
Source:
https://www.digitalocean.com/community/tutorials/opening-a-port-on-linux