Cómo permitir que un nombre de host invierta DNS en hosts.deny

Cómo permitir que un nombre de host invierta DNS en hosts.deny

Deseo BLOQUEAR todas sshdlas conexiones PERO una IP dinámica asignada a una, <subdomain>.ddns.netasí 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.netla confirma) por ese nombre de host, funciona:

sshd: ALL EXCEPT <ipv4.resolved.by.hostname>

También lo intenté con UseDNS yeso noin sshd_config, pero no cambia nada.

El firewall (UFW) está abierto según la reglaufw limit ssh

Mi actual /etc/ssh/sshd_configaquí 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.allowy /etc/hosts.denypara 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.allowse 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í:

https://serverfault.com/a/1105670/974219

información relacionada