동일한 호스트에 IPv4를 사용하는 동안 IPv6를 통한 SSH 로그인이 성공하면 "권한이 거부되었습니다"가 발생합니다.

동일한 호스트에 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를 통한 원격 로그인했다그들과 함께 일하세요.

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제안된 대로 일부 구성 오류로 인한 것은 아닙니다.

그 이유를 이해하려면 특히 이 상자의 설정을 살펴봐야 합니다. 이는 기본적으로 PPP 링크를 통해 이동하는 IPv4와 6in4 터널을 통해 이동하는 IPv6을 향한 라우터 역할을 합니다. 또한 이 상자는 DNS 재귀 확인자 역할을 하는데, 여기서는 점점 흥미로워지고 있습니다. IPv4 역방향 조회는 IPv4 루트 서버부터 반복적으로 확인되고 IPv6 역방향 조회는 IPv6 루트 서버부터 시작하는 방식으로 확인자를 구성했습니다. 이 설정은 처음 설치했을 때 제대로 작동했습니다.

이제 내 ISP가 DNS 증폭 공격이 어떻게 작동하는지 이해하지 못하는 사람들과 사진을 입력합니다. 간단히 말해서, 나는 내 ISP가 들어오는 DNS 패킷을 무작위로 망친다는 것을 확실히 알고 있습니다. 즉, 일부 문제는 현재 자체 해결 프로그램을 통해 해결해야 하지만 다른 DNS 주소는 사용자 작업에서 재귀적으로 해결해야 합니다. 이유는 DNS 증폭 공격을 완화하기 위한 것이지만, 그렇다면 그들은 잘못하고 있는 것입니다^1.

설정을 크게 변경하고 싶지 않았기 때문에 로컬 DNS 확인자의 끝에 ISP의 DNS 확인자를 비재귀 전달로 던졌으므로 재귀 확인 시도 시간이 초과되면 ISP의 확인자를 시도합니다. 이것은 지금까지 작동합니다. 하지만 이것을 구성할 때 작은 실수를 했습니다. ISP의 DNS 확인자를 내 로컬 범위 내의 호스트(예: 192.168.0.0/16)에서만 작동하도록 입력했지만 내가 시도한 호스트인 로컬 호스트(내 라우터라고도 함)를 잊어버렸습니다. 리졸버가 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은 아님) 일치하는 IP 주소에만 적용되고 일치 내의 규칙은 일치하는 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테이블를 선택한 후 이 문제를 해결했습니다.

관련 정보