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/sshd
dem 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/sshd
fü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_config
das 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.conf
wie 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/everything
um 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 Address
in 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.