Actualmente estoy perplejo por un problema extraño... Tengo un host de doble pila al que quiero conectarme por SSH. Si me conecto vía IPv6 todo funciona como se esperaba
datenwolf@foo ~/ > ssh -6 bar.example.com
Password:
datenwolf@bar ~/ >
Sin embargo al hacer lo mismo vía IPv4 falla
datenwolf@foo ~/ > ssh -4 bar.example.com
Password:
Permission denied (publickey,keyboard-interactive).
datenwolf@foo ~/ >
Extracto del /var/log/sshd
inicio de sesión fallido
Apr 24 16:34:03 [sshd] SSH: Server;Ltype: Version;Remote: www.xxx.yyy.zzz-38427;Protocol: 2.0;Client: OpenSSH_5.9p1 Debian-5ubuntu1
Apr 24 16:34:03 [sshd] SSH: Server;Ltype: Kex;Remote: www.xxx.yyy.zzz-38427;Enc: aes128-ctr;MAC: hmac-md5;Comp: none [preauth]
Apr 24 16:34:04 [sshd] SSH: Server;Ltype: Authname;Remote: www.xxx.yyy.zzz-38427;Name: wolfgangd [preauth]
Apr 24 16:34:07 [sshd] pam_access(sshd:account): access denied for user `datenwolf' from `foo.example.com'
Apr 24 16:34:07 [sshd] error: PAM: User account has expired for datenwolf from foo.example.com
Apr 24 16:34:07 [sshd] Connection closed by www.xxx.yyy.zzz [preauth]
Por supuesto la cuenta no caducó y puedo iniciar sesión perfectamente mediante IPv6. Usando Google encontré varios informes sobre los mensajes de registro pero ninguno coincidía con mi problema (en el sentido de que aplicar las soluciones propuestas no funcionó para mi caso).
Estoy prácticamente sin ideas aquí.
Actualizar
/var/log/sshd
para iniciar sesión correctamente en IPv6en la misma máquina de destino:
Apr 24 16:56:42 [sshd] SSH: Server;Ltype: Version;Remote: 2001:x:x:x:x:x:x:x-46025;Protocol: 2.0;Client: OpenSSH_5.9p1 Debian-5ubuntu1
Apr 24 16:56:42 [sshd] SSH: Server;Ltype: Kex;Remote: 2001:x:x:x:x:x:x:x-46025;Enc: aes128-ctr;MAC: hmac-md5;Comp: none [preauth]
Apr 24 16:56:43 [sshd] SSH: Server;Ltype: Authname;Remote: 2001:x:x:x:x:x:x:x-46025;Name: datenwolf [preauth]
Apr 24 16:56:47 [sshd] Accepted keyboard-interactive/pam for datenwolf from 2001:x:x:x:x:x:x:x port 46025 ssh2
Apr 24 16:56:47 [sshd] pam_unix(sshd:session): session opened for user datenwolf by (uid=0)
Intenté iniciar sesión desde varias máquinas y obtuve el mismo resultado: IPv6 funciona, IPv4 no.
Actualización 2
Como referencia, estas son las tablas de IP utilizadas. Tenga en cuenta queEstos están probados en batalla., es decir, se utilizan desde hace varios años y no se han modificado recientemente. Inicio de sesión remoto a través de IPv4hizotrabajar con ellos.
iptables IPv4:
Chain INPUT (policy ACCEPT 2144 packets, 336K bytes)
pkts bytes target prot opt in out source destination
132 20762 fail2ban-SSH tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
12M 14G ACCEPT all -- ppp0 * 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
3111 95984 ACCEPT icmp -- ppp0 * 0.0.0.0/0 0.0.0.0/0
18692 1123K ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
2 112 ACCEPT udp -- * * 0.0.0.0/0 0.0.0.0/0 udp dpt:1194
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:1194
4633 288K ACCEPT udp -- * * 0.0.0.0/0 0.0.0.0/0 udp dpts:6880:6899
2826 154K ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpts:6880:6899
4 160 ACCEPT udp -- * * 0.0.0.0/0 0.0.0.0/0 udp dpt:123
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:123
44165 3069K REJECT all -- ppp0 * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
Chain FORWARD (policy ACCEPT 48032 packets, 44M bytes)
pkts bytes target prot opt in out source destination
0 0 REJECT udp -- * * 0.0.0.0/0 0.0.0.0/0 udp dpt:631 reject-with icmp-port-unreachable
0 0 REJECT udp -- * * 0.0.0.0/0 0.0.0.0/0 udp dpt:515 reject-with icmp-port-unreachable
0 0 REJECT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:631 reject-with icmp-port-unreachable
0 0 REJECT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:515 reject-with icmp-port-unreachable
0 0 REJECT all -- ppp0 ppp0 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
133K 8347K TCPMSS tcp -- * ppp0 0.0.0.0/0 0.0.0.0/0 tcp flags:0x06/0x02 TCPMSS clamp to PMTU
Chain OUTPUT (policy ACCEPT 14378 packets, 2172K bytes)
pkts bytes target prot opt in out source destination
Chain fail2ban-SSH (1 references)
pkts bytes target prot opt in out source destination
132 20762 RETURN all -- * * 0.0.0.0/0 0.0.0.0/0
IPv6 ip6tables
Chain INPUT (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 DROP all * * ::/0 ::/0 rt type:0 segsleft:0
484K 86M ACCEPT icmpv6 * * ::/0 ::/0
105K 7943K ACCEPT tcp * * ::/0 ::/0 tcp dpt:22
0 0 ACCEPT udp * * ::/0 ::/0 udp dpt:1194
0 0 ACCEPT tcp * * ::/0 ::/0 tcp dpt:1194
0 0 ACCEPT udp * * ::/0 ::/0 udp dpts:6880:6899
0 0 ACCEPT tcp * * ::/0 ::/0 tcp dpts:6880:6899
0 0 ACCEPT tcp * * ::/0 ::/0 tcp dpt:123
0 0 ACCEPT udp * * ::/0 ::/0 udp dpt:123
0 0 ACCEPT all ppp0,sixxs * ::/0 ::/0 ctstate RELATED,ESTABLISHED
4164K 466M ACCEPT all !ppp0,sixxs * ::/0 ::/0
0 0 REJECT all * * ::/0 ::/0 reject-with icmp6-port-unreachable
Chain FORWARD (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 DROP all * * ::/0 ::/0 rt type:0 segsleft:0
2864 311K ACCEPT icmpv6 * * ::/0 ::/0
0 0 REJECT tcp * * ::/0 ::/0 multiport ports 631 reject-with icmp6-port-unreachable
0 0 REJECT udp * * ::/0 ::/0 multiport ports 631 reject-with icmp6-port-unreachable
0 0 REJECT tcp * * ::/0 ::/0 multiport ports 515 reject-with icmp6-port-unreachable
0 0 REJECT udp * * ::/0 ::/0 multiport ports 515 reject-with icmp6-port-unreachable
0 0 REJECT all ppp0,sixxs ppp0,sixxs ::/0 ::/0 reject-with icmp6-port-unreachable
0 0 accept_with_pmtu_clamp tcp ppp0,sixxs * !2001:x:x::/48 2001:x:x::/48 tcp dpt:22
18M 14G accept_with_pmtu_clamp all * * ::/0 ::/0 ctstate RELATED,ESTABLISHED
65503 5289K accept_with_pmtu_clamp all !ppp0,sixxs * ::/0 ::/0
0 0 REJECT all * * ::/0 ::/0 reject-with icmp6-port-unreachable
Chain OUTPUT (policy ACCEPT 8099K packets, 11G bytes)
pkts bytes target prot opt in out source destination
0 0 DROP all * * ::/0 ::/0 rt type:0 segsleft:0
Chain accept_with_pmtu_clamp (3 references)
pkts bytes target prot opt in out source destination
0 0 TCPMSS tcp * ppp0,sixxs ::/0 ::/0 tcp flags:0x06/0x02 TCPMSS clamp to PMTU
18M 14G ACCEPT all * * ::/0 ::/0
Actualización 3
Este es /etc/sshd/sshd_config
el sistema al que intento conectarme, despojado de todos los comentarios:
Port 22
ListenAddress 0.0.0.0
ListenAddress ::
PubkeyAuthentication yes
PasswordAuthentication no
UsePAM yes
AllowAgentForwarding yes
AllowTcpForwarding yes
X11Forwarding yes
X11DisplayOffset 10
X11UseLocalhost yes
PrintMotd no
PrintLastLog no
UseDNS yes
Subsystem sftp /usr/lib64/misc/sftp-server
Respuesta1
Después de que las cosas se volvieran cada vez más extrañas (ver el hilo de comentarios en mi pregunta), finalmente lo descubrí. Lo primero es lo primero: el proceso de autenticaciónhizofalla en pam_access.so, sin embargo, no se debe a una mala configuración /etc/security/access.conf
como se sugirió.
Para entender por qué, debemos observar la configuración de esta caja en particular: actúa como un enrutador hacia IPv4 que va de forma nativa a través del enlace PPP y hacia IPv6 que está a través de un túnel 6 en 4. Además, este cuadro actúa como un solucionador recursivo de DNS, y aquí se está poniendo interesante. Configuré el solucionador de manera que las búsquedas inversas de IPv4 se resuelvan de forma recursiva comenzando con los servidores raíz de IPv4 y las búsquedas inversas de IPv6 comiencen con los servidores raíz de IPv6. Esta configuración funcionó cuando la instalé por primera vez.
Ahora mi ISP entra en escena y la gente que no entiende cómo funcionan los ataques de amplificación de DNS. Para resumir: estoy seguro de que mi ISP interfiere aleatoriamente con los paquetes DNS entrantes, es decir, algunas cosas deben resolverse a través de sus propios solucionadores desde hace algún tiempo, mientras que otras direcciones DNS se resuelven de forma recursiva por su cuenta: el oficial La razón es mitigar los ataques de amplificación de DNS, pero entonces lo están haciendo mal ^1.
Como no quería cambiar en gran medida mi configuración, simplemente lancé los solucionadores de DNS de mi ISP al final de mi solucionador de DNS local como avance no recursivo, de modo que si el intento de resolución recursiva se agota, prueba los solucionadores de mi ISP. Esto funciona hasta ahora. Pero cuando configuré esto cometí un pequeño error: ingresé a los solucionadores DNS del ISP para que funcionen solo desde hosts dentro de mi alcance local, es decir, 192.168.0.0/16, pero me olvidé del localhost, también conocido como mi enrutador, que es el host que intenté. SSH en, para lo cual el solucionadornotener en cuenta los resolutores del ISP.
pam_access.so intenta realizar una búsqueda inversa en la dirección de sus pares; y esto cierra el círculo: debido a que para la búsqueda inversa de IPv6 se accedería a los servidores raíz DNS IPv6, los paquetes pasarían por el túnel 6in4 sin que mi ISP se metiera con ellos y obtuviera una respuesta. Pero yo no realizaría la búsqueda inversa de IPv4 a través de los solucionadores del ISP, lo que no recibiría respuesta y, en última instancia, informaría un NXHOST (o se ejecutaría en un tiempo de espera). De todos modos, pam_access.so no verá algo que le guste y simplemente dice "no pasarás".
Después de arreglar la configuración del solucionador, ahora todo vuelve a funcionar a las mil maravillas.Pero ahora realmente tengo que pisar los dedos de mi ISP...
¿En cuanto a cómo lo resolví? Bueno, aumentando la verbosidad del registro estudiando intensamente /var/log/everything
para ver en qué orden se desarrollaron las cosas. Cuando vi que mi solucionador registraba los intentos de búsqueda inversa, supe lo que estaba pasando.
1: desde el punto de vista de la mitigación de la amplificación de DNS, esto es una completa tontería, porque probé y los paquetes DNS salientes pasan bien; sin embargo, esos son los paquetes que deben filtrar. De hecho, cada ISP de cliente final debería descartar todos los paquetes UDP cuya dirección del remitente no coincida con la de sus clientes.
Respuesta2
La configuración de sshd en el servidor es una de las cosas más interesantes a tener en cuenta si tienes este tipo de problemas. Normalmente está en /etc/ssh/sshd_config
.
Es muy probable que en su archivo de configuración haya una sección:
Match Address 10.*.*.*,192.168.0.*
PasswordAuthentication no
Tiene algunas reglas específicas para estas subredes ( Address
lo más probable es que las de su archivo difieran). Estas reglas solo se aplican a direcciones IPv4 si esas son las únicas que coinciden (y no IPv6) y las reglas dentro de la coincidencia solo se aplican a la dirección IP coincidente. Entonces, dependiendo de si te conectas a través de IPv4 e IPv6, sshd tiene reglas diferentes.
No todas las cosas se pueden poner en un Match
, pero son suficientes para poder marcar la diferencia:
AllowAgentForwarding, AllowTcpForwarding, AuthorizedKeysFile,
AuthorizedPrincipalsFile, Banner, ChrootDirectory, ForceCommand,
GatewayPorts, GSSAPIAuthentication, HostbasedAuthentication,
HostbasedUsesNameFromPacketOnly, KbdInteractiveAuthentication,
KerberosAuthentication, MaxAuthTries, MaxSessions,
PasswordAuthentication, PermitEmptyPasswords, PermitOpen,
PermitRootLogin, PermitTunnel, PubkeyAuthentication,
RhostsRSAAuthentication, RSAAuthentication, X11DisplayOffset,
X11Forwarding, X11UseLocalHost
Respuesta3
Me encontré con el mismo problema, alinear eliptablescontablas ip6y luego solucionó este problema.