Blockieren Sie alle eingehenden Anfragen außer dem lokalen Netzwerk

Blockieren Sie alle eingehenden Anfragen außer dem lokalen Netzwerk

Ich habe einen dedizierten Server, auf dem ich einen Ubuntu 22.04.1 LTS-Server mit einer öffentlichen IP-Adresse gestartet habe. Ich möchte den SSH-Port sperren, damit nur bestimmte IP-Adressen durchkommen.

Ich habe drei IP-Adressen von der Arbeit und das Netzwerk, das ich auf dem Server mit einem IP-Bereich eingerichtet habe.

Wie kann ich vorgehen, um nur diesen IP-Adressen die Anmeldung bei meinem Server zu erlauben?

Das hier habe ich in einem anderen Beitrag gefunden:

iptables -I INPUT -p tcp ! -s yourIPaddress --dport 22 -j REJECT

Würde dies funktionieren, wenn ich es für jede IP-Adresse ausführe, oder gäbe es Komplikationen?

Und ist das genug? Sollte ich noch andere Ports sperren? Dies ist eine Neuinstallation, auf der nur PostgreSQL läuft. Ich versuche, mehr über Ubuntu und PostgreSQL zu erfahren, aber ich möchte nicht, dass mein Server gezielt angesprochen wird.

Danke für deinen Beitrag!

Antwort1

Ich würde vorschlagen, dass Sie Ihren Ansatz von der Fokussierung auf einen einzelnen Port auf eine vollständige „Verteidigungshaltung“ umstellen: Setzen Sie IPs auf die Whitelist und lehnen Sie alle anderen Verbindungsversuche ab. Dies gilt für fast alle Ports in Ihrer Umgebung – denn sonst müssen SiejedenIP, die bekanntermaßen existiert und Service-Scans durchführt, sodass Sie stattdessen eine wahnsinnig lange Liste erhalten. Service-Scanner scannen nachjedenPort, daher sollten Sie in erster Linie einen „Denial of Trust“-Ansatz verfolgen. Dinge wie ein Webserver (Port 80, 443 für HTTP/HTTPS benötigen möglicherweise einen breiteren Zugriff als bestimmte IPs, wenn es sich um eine öffentliche Site handelt) werden ebenfalls gescannt, können aber durch die entsprechende Absicherung des Webservers und des Inhalts „geschützt“ werden.allePorts werden von Service-Scannern gescannt undalleMit dem Internet verbundene Geräte werden gescannt, daher ist es besser, allen Geräten den Start zu verweigern.

Der effektivste Ansatz zur „Verweigerung des Vertrauens“ besteht daher darin, bestimmten IPs einfach die Verbindung zu den Ports und allen anderen Diensten auf dem Computer zu gestatten und dann alle anderen Verbindungsversuche abzulehnen. Gleichzeitig darf localhost mit sich selbst kommunizieren, was in Ordnung ist.

Schützen Sie zunächst alles mit Whitelists, bevor Sie weitere Ports öffnen. Wenn Sie weitere Dienste benötigen, können wir zusätzliche ALLOW-Regeln für HTTP-Verkehr von überall usw. konfigurieren.

# Allow localhost traffic
iptables -A INPUT -i lo -j ACCEPT

# INVALID type packets should be DROPped regardless of source.
iptables -A INPUT -m state --state INVALID -j DROP

# Allow traffic for related/established connections already running
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

# Allow all new connections/traffic from the local subnet you're on 
# (10.20.30.0/24 is used in example)
iptables -A INPUT -m state --state NEW -s 10.20.30.0/24 -j ACCEPT

# Whitelist your IPs - repeat this step for each of your IPs permitted
# to access the machine outside of local network
iptables -A INPUT -s IPADDRESS -m state --state NEW -j ACCEPT

# If you have other services you want to configure for *public* access, then
# use this rule as a template and execute this before you follow the last step.
#
# Change PROTO to the protocol (tcp/udp, etc.) and PORT to the port number 
# (80 for HTTP, ex.)
#
# Add this to the end of the rule if you want to allow only certain 
# IPs to the specified service:
#   -s IPADDRESS 
iptables -A INPUT -p PROTO --dport PORT -m state --state NEW -j ACCEPT

# Deny all other traffic
iptables -A INPUT -j REJECT --reject-with icmp-host-unreachable

Dies basiert auf meiner fast 15-jährigen Erfahrung mit Servern und meiner Schulung zur Netzwerksicherheit. Sowie auf meinem Wissen als IT-Sicherheitsexperte.

verwandte Informationen