私は現在、奇妙な問題に困惑しています…SSHで接続したいデュアルスタックホストがあります。IPv6経由で接続すると、すべてが期待どおりに動作します
datenwolf@foo ~/ > ssh -6 bar.example.com
Password:
datenwolf@bar ~/ >
しかし、IPv4経由で同じことを行うと失敗する
datenwolf@foo ~/ > ssh -4 bar.example.com
Password:
Permission denied (publickey,keyboard-interactive).
datenwolf@foo ~/ >
/var/log/sshd
ログイン失敗の抜粋
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]
もちろん、アカウントの有効期限は切れておらず、IPv6 経由で問題なくログインできます。Google を使用して、ログ メッセージに関するさまざまなレポートを見つけましたが、どれも私の問題に一致しませんでした (提案された解決策を適用しても私のケースでは機能しなかったという意味で)。
ここではほとんどアイデアが出てきません。
アップデート
/var/log/sshd
IPv6ログイン成功のためまったく同じターゲットマシン上で:
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)
さまざまなマシンからログインしてみましたが、結果はすべて同じでした。IPv6 は機能しますが、IPv4 は機能しません。
アップデート2
参考までに、使用されているIPテーブルを示します。これらは実戦でテスト済みつまり、これらは数年前から使用されており、最近変更されていません。 IPv4経由のリモートログインした彼らと一緒に働きます。
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 ip6テーブル
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
アップデート3
これは/etc/sshd/sshd_config
、すべてのコメントを削除した、接続を試みたシステムです。
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
答え1
物事がどんどん奇妙になっていき(私の質問のコメントスレッドを参照)、ようやく理解できました。まずは認証プロセスです。したpam_access.so で失敗しますが、示唆されているように、何らかの構成ミスが原因ではありません/etc/security/access.conf
。
理由を理解するには、このボックスの設定を特に確認する必要があります。このボックスは、PPP リンクをネイティブに経由する IPv4 と、6in4 トンネルを経由する IPv6 へのルーターとして機能します。また、このボックスは DNS 再帰リゾルバーとしても機能し、ここで興味深い点があります。私は、IPv4 逆引きが IPv4 ルート サーバーから再帰的に解決され、IPv6 逆引きが IPv6 ルート サーバーから開始されるようにリゾルバーを構成しました。この設定は、最初にインストールしたときには機能しました。
ここで、私の ISP が登場し、DNS 増幅攻撃の仕組みを理解していない人々が現れます。簡単に言うと、私の ISP が着信 DNS パケットをランダムに操作していることは確かです。つまり、一部のことはしばらくの間、ISP 独自のリゾルバで解決する必要がありますが、他の DNS アドレスは独自のリゾルバで再帰的に解決できます。公式の理由は DNS 増幅攻撃を軽減するためですが、それは間違っています^1。
設定を大幅に変更したくなかったので、ISPのDNSリゾルバを非再帰フォワードとしてローカルDNSリゾルバの最後に追加しました。再帰的な解決の試行がタイムアウトすると、ISPのリゾルバが試されます。これは今のところうまくいっています。しかし、これを構成したときに小さなミスを犯しました。ISPのDNSリゾルバをローカルスコープ内のホスト、つまり192.168.0.0/16からのみ動作するように入力しましたが、SSHで接続しようとしたホストであるlocalhost、つまりルーターを忘れていました。ないISP のリゾルバを考慮してください。
pam_access.so はピア アドレスの逆引きを試行します。これで循環が閉じます。IPv6 逆引きでは DNS IPv6 ルート サーバーがアクセスされるため、パケットは ISP が干渉することなく 6in4 トンネルを通過し、応答を受け取ります。ただし、IPv4 逆引きは ISP のリゾルバーを介して私自身によって実行されないため、応答は受信されず、最終的に NXHOST が報告されます (またはタイムアウトで実行されます)。いずれにせよ、pam_access.so は気に入ったものを見つけられず、「通過してはならない」とだけ言います。
リゾルバ構成を修正した後、すべてが再び正常に動作するようになりました。しかし、今は本当に ISP の注意を引かなければなりません...
どうやって解決したかというと、ログの詳細度を徹底的に調べて、/var/log/everything
物事がどのような順序で展開したかを確認しました。リゾルバが逆引き参照の試行をログに記録しているのを見て、何が起こっているのかがわかりました。
1: DNS増幅緩和の観点からは、これはまったくのナンセンスです。なぜなら、私はテストを行い、送信DNSパケットは問題なく通過したからです。しかし、それらはフィルタリングされるべきパケットです。実際、すべてのエンドカスタマーISPは、送信元アドレスが顧客のものと一致しないUDPパケットをすべてドロップする必要があります。
答え2
こうした問題が発生した場合、サーバー上の sshd の構成を確認することが最も重要です。通常は にあります/etc/ssh/sshd_config
。
おそらく、設定ファイルには次のようなセクションがあるはずです:
Match Address 10.*.*.*,192.168.0.*
PasswordAuthentication no
これには、これらのサブネットに固有のルールがいくつかあります (Address
ファイル内のルールはおそらく異なります)。これらのルールは、一致するのが IPv4 アドレスのみ (IPv6 ではない) の場合に限り IPv4 アドレスに適用され、一致内のルールは一致した IP アドレスにのみ適用されます。したがって、IPv4 と IPv6 のどちらで接続するかによって、sshd のルールは異なります。
すべてのものを で設定できるわけではありませんMatch
が、違いを生み出すには十分です。
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
答え3
私も同じ問題に遭遇しました。iptablesとip6テーブル、そしてこの問題を修正しました。