
Ich möchte alle Verbindungen BLOCKIEREN sshd
, AUSSER einer dynamischen IP, die einer zugewiesen ist, <subdomain>.ddns.net
also habe ich Folgendes eingegeben /etc/hosts.deny
:
sshd: ALL EXCEPT <subdomain>.ddns.net
Dies erlaubt mir keine Verbindung zu SSH.
Wenn ich stattdessen die IP-Adresse eingebe, dig <subdomain>.ddns.net
die durch diesen Hostnamen aufgelöst wird (eine Bestätigung erfolgt), funktioniert es:
sshd: ALL EXCEPT <ipv4.resolved.by.hostname>
Ich habe es auch mit UseDNS yes
oder no
in versucht sshd_config
, aber es ändert nichts.
Firewall (UFW) ist durch die Regel geöffnetufw limit ssh
Mein aktuelles /etc/ssh/sshd_config
hier unten:
Protocol 2
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_ed25519_key
KexAlgorithms [email protected]
Ciphers [email protected],[email protected],[email protected],aes256-ctr,aes192-ctr,aes128-ctr
MACs [email protected],[email protected],[email protected],hmac-sha2-512,hmac-sha2-256,[email protected]
PermitRootLogin no
AllowUsers remotessh
IgnoreRhosts yes
PasswordAuthentication no
PermitEmptyPasswords no
ChallengeResponseAuthentication no
UsePAM yes
X11Forwarding no
PrintMotd no
PubkeyAuthentication yes
AllowTcpForwarding no
AllowStreamLocalForwarding no
GatewayPorts no
PermitTunnel no
UseDNS no
# Allow client to pass locale environment variables
AcceptEnv LANG LC_*
# override default of no subsystems
Subsystem sftp /usr/lib/openssh/sftp-server
Antwort1
Das Problem liegt höchstwahrscheinlich daran, dass die IP-Adresse, von der aus Sie eine Verbindung herstellen, zu xxx.yourisp.com und nicht zu subdomain.ddns.net zurückkehrt.
Wenn Sie versuchen, von Ihrer (dynamischen) IP-Adresse aus eine Verbindung zu sshd herzustellen, führt tcpwrappers eine umgekehrte DNS-Suche nach Ihrer IP-Adresse durch. Wenn diese zu xxx.yourisp.com führt, wird die Entsprechung nicht in hosts.allow oder (hosts.deny, wie auch immer) gefunden und daher wird die Verbindung zu sshd von Ihrer IP aus nicht zugelassen.
Als Workaround könnten Sie in Erwägung ziehen, subdomain.ddns.net zu Ihrer /etc/hosts-Datei hinzuzufügen und einen Cron-Job zu erstellen, der alle paar Minuten ausgeführt wird und diesen Eintrag mit Ihrer dynamischen IP-Adresse aktualisiert, wenn sie sich ändert. Das ist keine sehr elegante Lösung, aber es ist die beste, die mir eingefallen ist, als ich kürzlich selbst mit diesem Problem konfrontiert war. Wenn jemand eine sauberere Lösung kennt, hinterlassen Sie bitte einen Kommentar.
Antwort2
Dazu verwenden Sie sowohl als auch /etc/hosts.allow
. Geben Sie bei Folgendes ein:/etc/hosts.deny
/etc/hosts.allow
sshd: blablabla.ddns.net
Fügen Sie unter /etc/hosts.deny den folgenden Inhalt ein:
sshd: ALL
Es funktioniert, weil /etc/hosts.allow
es Überlappungen gibt /etc/hosts.deny
. Aber es gibt einen Haken: Wenn sich Ihr Server hinter einem Hairpin-NAT befindet (manche nennen es auch NAT-Reflexion), werden einige Verbindungen mit der internen IP-Adresse Ihres Gateways zu Ihrem Server angezeigt, sodass es schwierig sein kann, sie zu blockieren.
Eine andere Möglichkeit besteht darin, iptables wie folgt zu verwenden:
iptables -t filter -A INPUT -s blablabla.ddns.net -p tcp --dport 22 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport -j DROP
Beachten Sie einfach, dass iptables die Reihenfolge seiner Regeln berücksichtigt.
Viel Glück.
Antwort3
Ich verwende ein Skript, um eine Domänenliste in eine IP-Liste umzuwandeln und sie in hosts.allow aufzunehmen
Die Beschreibung ist hier: