Erfolgreiche SSH-Anmeldung über IPv6 bei Verwendung von IPv4 zum gleichen Host führt zu „Zugriff verweigert“

Erfolgreiche SSH-Anmeldung über IPv6 bei Verwendung von IPv4 zum gleichen Host führt zu „Zugriff verweigert“

Ich stehe derzeit vor einem seltsamen Problem … Ich habe einen Dual-Stack-Host, zu dem ich per SSH eine Verbindung herstellen möchte. Wenn ich mich über IPv6 verbinde, funktioniert alles wie erwartet

datenwolf@foo ~/ > ssh -6 bar.example.com
Password:

datenwolf@bar ~/ >

Wenn Sie das Gleiche jedoch über IPv4 tun, schlägt es fehl

datenwolf@foo ~/ > ssh -4 bar.example.com
Password:
Permission denied (publickey,keyboard-interactive).

datenwolf@foo ~/ >

Auszug aus /var/log/sshddem fehlgeschlagenen Login

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]

Natürlich ist der Account nicht abgelaufen und ich kann mich problemlos über IPv6 anmelden. Über Google habe ich verschiedene Berichte zu den Log-Meldungen gefunden, aber keiner davon passte zu meinem Problem (in dem Sinne, dass die Anwendung der vorgeschlagenen Lösungen in meinem Fall nicht funktioniert hat).

Mir gehen hier so ziemlich die Ideen aus.


Aktualisieren

/var/log/sshdfür erfolgreiches IPv6-Loginauf derselben Zielmaschine:

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)

Ich habe versucht, mich von verschiedenen Rechnern aus anzumelden, mit dem gleichen Ergebnis: IPv6 funktioniert, IPv4 nicht.


Aktualisierung 2

Als Referenz sind hier die verwendeten IP-Tabellen aufgeführt. Beachten Sie, dassdiese sind kampferprobt, d. h. sie sind seit mehreren Jahren im Einsatz und wurden in letzter Zeit nicht geändert. Remote-Login über IPv4tatmit ihnen arbeiten.

IPv4-Iptables:

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 

Aktualisierung 3

Dies ist /etc/sshd/sshd_configdas System, mit dem ich eine Verbindung herzustellen versuche, ohne alle Kommentare:

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

Antwort1

Nachdem die Dinge immer seltsamer wurden (siehe den Kommentar-Thread in meiner Frage), habe ich es endlich herausgefunden. Das Wichtigste zuerst: Der AuthentifizierungsprozesstatFehler in pam_access.so, jedoch nicht aufgrund einer Fehlkonfiguration, /etc/security/access.confwie vermutet.

Um zu verstehen, warum, müssen wir uns insbesondere die Konfiguration dieser Box ansehen: Sie fungiert als Router für IPv4, das nativ über die PPP-Verbindung läuft, und für IPv6, das über einen 6in4-Tunnel läuft. Außerdem fungiert diese Box als rekursiver DNS-Resolver, und hier wird es interessant. Ich habe den Resolver so konfiguriert, dass IPv4-Reverse-Lookups rekursiv aufgelöst werden, beginnend mit den IPv4-Root-Servern, und IPv6-Reverse-Lookups beginnen mit den IPv6-Root-Servern. Diese Konfiguration funktionierte, als ich sie zum ersten Mal installierte.

Jetzt kommt mein ISP ins Spiel und Leute, die nicht verstehen, wie DNS-Amplification-Angriffe funktionieren. Um es kurz zu machen: Ich weiß mit Sicherheit, dass mein ISP eingehende DNS-Pakete willkürlich manipuliert, d. h. einige Dinge müssen seit einiger Zeit über ihre eigenen Resolver aufgelöst werden, während die Auflösung anderer DNS-Adressen rekursiv auf eigene Faust funktioniert – der offizielle Grund ist die Abschwächung von DNS-Amplification-Angriffen, aber sie machen es dann falsch^1.

Da ich mein Setup nicht grundlegend ändern wollte, habe ich die DNS-Resolver meines ISPs einfach als nicht rekursive Weiterleitung an das Ende meines lokalen DNS-Resolvers gesetzt, sodass, wenn der rekursive Auflösungsversuch abläuft, die Resolver meines ISPs ausprobiert werden. Das funktioniert soweit. Aber als ich das konfiguriert habe, habe ich einen kleinen Fehler gemacht: Ich habe die DNS-Resolver des ISPs so eingegeben, dass sie nur von Hosts innerhalb meines lokalen Bereichs funktionieren, also 192.168.0.0/16, habe aber localhost vergessen, auch bekannt als mein Router, also den Host, mit dem ich per SSH zu verbinden versuchte, für den der ResolvernichtBerücksichtigen Sie die Resolver des ISP.

pam_access.so versucht eine umgekehrte Suche nach der Adresse des Peers; und damit schließt sich der Kreis: Da für die umgekehrte Suche nach IPv6 auf die DNS-IPv6-Root-Server zugegriffen würde, würden die Pakete durch den 6in4-Tunnel gehen, ohne dass mein ISP sie stört und eine Antwort erhält. Die umgekehrte Suche nach IPv4 würde jedoch nicht von mir über die Resolver des ISPs durchgeführt, was keine Antwort erhalten und letztendlich einen NXHOST melden würde (oder es würde in einem Timeout laufen). Wie auch immer, pam_access.so sieht nichts, was ihm gefällt, und sagt einfach „Du kommst nicht durch“.

Nachdem ich die Resolver-Konfiguration repariert habe, funktioniert jetzt alles wieder wie am Schnürchen.Aber jetzt muss ich meinem ISP wirklich auf die Füße treten …

Und wie habe ich das Problem gelöst? Nun, indem ich die Ausführlichkeit der Protokollierung intensiv untersucht habe, /var/log/everythingum zu sehen, in welcher Reihenfolge sich die Dinge entwickelten. Als ich sah, dass mein Resolver die Reverse-Lookup-Versuche protokollierte, wusste ich, was los war.


1: Aus Sicht der DNS-Amplification-Minderung ist das völliger Unsinn, denn ich habe Tests durchgeführt und ausgehende DNS-Pakete kommen problemlos durch – aber das sind die Pakete, die sie filtern sollten. Tatsächlich sollte jeder Endkunden-ISP alle UDP-Pakete verwerfen, deren Absenderadresse nicht mit der seiner Kunden übereinstimmt.

Antwort2

Die Konfiguration von SSHD auf dem Server ist eines der interessantesten Dinge, die Sie sich ansehen sollten, wenn Sie diese Art von Problemen haben. Normalerweise befindet sie sich in /etc/ssh/sshd_config.

Es besteht eine gute Chance, dass Ihre Konfigurationsdatei einen Abschnitt enthält:

Match Address 10.*.*.*,192.168.0.*
    PasswordAuthentication no

Das hat einige Regeln, die speziell für diese Subnetze gelten (die Addressin Ihrer Datei werden höchstwahrscheinlich abweichen). Diese Regeln gelten nur für IPv4-Adressen, wenn diese die einzigen sind, die übereinstimmen (und nicht IPv6), und die Regeln innerhalb der Übereinstimmung gelten nur für die übereinstimmende IP-Adresse. Je nachdem, ob Sie über IPv4 und IPv6 eine Verbindung herstellen, hat sshd also unterschiedliche Regeln.

In einem können nicht alle Dinge eingestellt werden Match, aber sie reichen aus, um einen Unterschied machen zu können:

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

Antwort3

Ich habe das gleiche Problem festgestellt. Richten Sie dieiptablesmitip6tables, und dann dieses Problem behoben.

verwandte Informationen