El inicio de sesión SSH a través de IPv6 correctamente mientras se usa IPv4 en el mismo host produce "Permiso denegado"

El inicio de sesión SSH a través de IPv6 correctamente mientras se usa IPv4 en el mismo host produce "Permiso denegado"

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/sshdinicio 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/sshdpara 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_configel 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.confcomo 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/everythingpara 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 ( Addresslo 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.

información relacionada