IPv6 での成功した SSH ログインと IPv4 を使用する同じホストの同時ログインに成功すると、結果に「Permission Denied」と表示されます。

IPv6 での成功した SSH ログインと IPv4 を使用する同じホストの同時ログインに成功すると、結果に「Permission Denied」と表示されます。

現在、奇妙な問題が発生しました。デュアルスタックホストがありますが、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を使用してログメッセージに関するさまざまなレポートを見つけましたが、それらのどれも私の問題と一致しません(Appが提案したソリューションが私の場合には適用されないという意味で)。

私はここでアイデアがほとんどなくなりました。


修正する

/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 IPテーブル:

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提案されたいくつかの構成エラーのため失敗しません。

その理由を理解するには、このボックスの設定を具体的に調べる必要があります。このボックスはルーターとして機能し、IPv4(デフォルトではPPPリンク経由)とIPv6(6in4トンネル経由)に接続されます。このボックスはDNS再帰リゾルバとしても機能し、これが興味深い部分です。 IPv4 リバース ルックアップは IPv4 ルート サーバーで開始して再帰的に検証し、IPv6 リバース ルックアップは IPv6 ルート サーバーで開始して繰り返しチェックするようにリゾルバを設定しました。この設定は、最初にインストールしたときに実際に機能しました。

今私のISPが登場し、人々はDNS増幅攻撃がどのように機能するのか理解していません。簡単に言えば、私のISPは着信DNSパケットをランダムに扱うと確信しています。つまり、一部は現在独自のリゾルバによってしばらく解決されなければなりませんが、他のDNSアドレスは自分で再帰的に確認する必要があります。正式な理由はDNS増幅を軽減することです。攻撃しますが、彼らは間違っています^ 1。

設定を大幅に変更したくないので、ISPのDNSリゾルバをローカルDNSリゾルバの最後に非再帰的な転送として配置しました。したがって、再帰確認の試行がタイムアウトした場合、ISP の検証者を試みます。これまではこれがうまくいきます。しかし、構成するときに小さな間違いをしました。 ISPのDNSリゾルバーを入力して、ローカルスコープ(192.168.0.0/16など)のホストでのみ機能させるようにしましたが、ルーターのlocalhostを忘れました。私はSSHで接続したいホストであり、リゾルバーいいえ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構成は、この種の問題が発生した場合に実行できる最も興味深い作業の1つです。一般的にあります/etc/ssh/sshd_config

構成ファイルに次のセクションがある可能性があります。

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

これらのサブネットに関連するいくつかの規則があります(Addressファイルの規則は異なる可能性があります)。 IPv4アドレスが唯一の一致アドレスである場合(IPv6とは対照的に)、これらの規則はIPv4アドレスにのみ適用され、一致の規則は一致するIPアドレスにのみ適用されます。したがって、sshd には、IPv4 と IPv6 を介して接続するかどうかに応じて異なるルールがあります。

ですべてを設定することはできませんが、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テーブル、その後、問題を解決しました。

関連情報