
Deseo BLOQUEAR todas sshd
las conexiones PERO una IP dinámica asignada a una, <subdomain>.ddns.net
así que puse esto en /etc/hosts.deny
:
sshd: ALL EXCEPT <subdomain>.ddns.net
Esto no me permite conectarme a SSH.
En cambio, si coloco la IP resuelta (a dig <subdomain>.ddns.net
la confirma) por ese nombre de host, funciona:
sshd: ALL EXCEPT <ipv4.resolved.by.hostname>
También lo intenté con UseDNS yes
o no
in sshd_config
, pero no cambia nada.
El firewall (UFW) está abierto según la reglaufw limit ssh
Mi actual /etc/ssh/sshd_config
aquí abajo:
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
Respuesta1
Lo más probable es que el problema se deba al hecho de que la dirección IP desde la que se está conectando es xxx.yourisp.com, no subdominio.ddns.net.
Cuando intenta conectarse a sshd desde su dirección IP (dinámica), tcpwrappers realiza una búsqueda DNS inversa en su dirección IP. Si esto se resuelve en xxx.yourisp.com, entonces no encontrará la coincidencia en hosts.allow o (hosts.deny según sea posible) y, por lo tanto, no permitirá la conexión a sshd desde su IP.
Como solución alternativa, es posible que desee considerar agregar subdomain.ddns.net a su archivo /etc/hosts y crear un trabajo cron que se ejecute cada pocos minutos y actualice esta entrada con su dirección IP dinámica cada vez que cambie. No es una solución muy elegante, pero es lo mejor que se me ocurrió cuando recientemente enfrenté este problema. Si alguien conoce una solución más limpia, por favor comente.
Respuesta2
Utilizarás ambos /etc/hosts.allow
y /etc/hosts.deny
para lograrlo. En /etc/hosts.allow
, ponga lo siguiente:
sshd: blablabla.ddns.net
En /etc/hosts.deny, inserte el siguiente contenido:
sshd: ALL
Funcionará porque /etc/hosts.allow
se superpone /etc/hosts.deny
. Pero hay un problema: si su servidor está detrás de una NAT de horquilla (algunos también lo llaman reflejo de NAT), algunas conexiones aparecerán con la dirección IP interna de su puerta de enlace a su servidor, por lo que puede ser difícil bloquearlas.
Otra opción es usar iptables, así:
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
Sólo tenga en cuenta que iptables tiene en cuenta el orden de sus reglas.
Buena suerte.
Respuesta3
Estoy usando un script para hacer una lista de dominios en una lista de IP e incluirla en hosts.allow
La descripción está aquí: