web-dev-qa-db-ja.com

IPv4を使用して同じホストにIPv6経由でSSHログインすると、「アクセスが拒否されました」

私は現在、奇妙な問題に困惑しています…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経由のリモートログインdidで動作します。

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 

アップデート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
6
datenwolf

見知らぬ人がどんどん変わった後(私の質問のコメントのスレッドを参照)、ついにそれを理解しました。まず最初に:認証プロセスdidはpam_access.soで失敗しますが、提案されているように/etc/security/access.confの設定が誤っているためではありません。

理由を理解するには、このボックスの設定を特に確認する必要があります。これは、PPPリンクと6in4トンネルを介したIPv6をネイティブで経由するIPv4へのルーターとして機能します。また、これもボックスはDNS再帰リゾルバとして機能し、ここでは興味深いものになっています。リゾルバは、IPv4ルートサーバーからIPv4逆引きが再帰的に解決され、IPv6ルートサーバーからIPv6逆引きが始まるように構成しました。このセットアップでは、最初にインストールしたときに動作します。

今私のISPは、DNS増幅攻撃のしくみを理解していない人々や写真を入力しています。長い話を簡単に言うと、私のISPは着信DNSパケットをランダムに混乱させることを知っています。つまり、しばらくの間、一部の問題を独自のリゾルバーで解決し、他のDNSアドレスを自分の作業で再帰的に解決する必要があります–公式理由はDNS増幅攻撃を軽減することですが、彼らはそれを間違っています^ 1。

設定を大幅に変更したくなかったので、ローカルDNSリゾルバーの最後に非再帰転送としてISPのDNSリゾルバーを投げただけなので、再帰解決の試行がタイムアウトした場合、ISPのリゾルバーを試します。これはこれまでのところ機能します。しかし、これを構成したときに小さな間違いを犯しました:ISPのDNSリゾルバーを入力して、ローカルスコープ内のホスト(192.168.0.0/16)からのみ機能するようにしましたが、ローカルホスト、つまりルーター、つまり私が試みたホストを忘れていましたSSHに接続します。この場合、リゾルバはnot ISPのリゾルバを考慮に入れます。

pam_access.soは、ピアアドレスの逆引きを試​​みます。 IPv6逆ルックアップの場合、DNS IPv6ルートサーバーにアクセスするため、パケットは6in4トンネルを通過するため、ISPがそれらに干渉することなく応答を取得します。しかし、IPv4の逆ルックアップは、自分のISPのリゾルバーでは行われず、応答を受け取らず、最終的にNXHOSTが報告されます(またはタイムアウトで実行されます)。とにかくpam_access.soはそれが好きなものを見ることはなく、単に「パスしてはならない」と言うだけです。

そのリゾルバー構成を修正した後、すべてが再び魅力のように機能するようになりました。 しかし、今は本当にISPのつま先を踏まなければなりません…

どのようにそれを解決しましたか?まあ、ログの詳細度を上げて/var/log/everythingを徹底的に調べて、展開された順序を確認します。リゾルバーが逆ルックアップの試みをログに記録しているのを見たとき、何が起こっているのかがわかりました。


1:DNS増幅軽減の観点からは、これは完全にナンセンスです。テストを行ったので、送信DNSパケットは問題なく通過しますが、これらはフィルタリングする必要があるパケットです。実際、すべてのエンドカスタマーISPは、送信者アドレスがカスタマーのものと一致しないすべてのUDPパケットをドロップする必要があります

5
datenwolf

サーバーでのsshdの設定は、この種の問題が発生した場合に最も興味深い点の1つです。通常は/etc/ssh/sshd_config

あなたの設定ファイルにセクションがある可能性が高いです:

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

これには、これらのサブネットに固有のいくつかのルールがあります(ファイル内のAddressはおそらく異なるでしょう)。これらのルールは、IPv4アドレスにのみ適用され、それらが一致する唯一のものであり(IPv6ではない)、一致内のルールは一致した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
1
Anthon