IPv6 経由の SSH ログインは成功しましたが、同じホストに IPv4 を使用すると「アクセスが拒否されました」というエラーが発生します。

IPv6 経由の SSH ログインは成功しましたが、同じホストに IPv4 を使用すると「アクセスが拒否されました」というエラーが発生します。

私は現在、奇妙な問題に困惑しています…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/sshdIPv6ログイン成功のためまったく同じターゲットマシン上で:

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

私も同じ問題に遭遇しました。iptablesip6テーブル、そしてこの問題を修正しました。

関連情報