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 구성은 이런 종류의 문제가 발생할 경우 수행할 수 있는 가장 흥미로운 작업 중 하나입니다. 일반적으로 에 있습니다 /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 테이블, 그런 다음 문제를 해결했습니다.

관련 정보