오징어의 안전한 사용자 인증 이야기

오징어의 안전한 사용자 인증 이야기

옛날 옛적에 남아메리카에 아름답고 따뜻한 가상 정글이 있었고 거기에는 오징어 서버가 살고 있었습니다. 다음은 네트워크의 지각적 이미지입니다.

                 <the Internet>
                        | 
                        | 
           A            |          B
Users <---------> [squid-Server] <---> [LDAP-Server] 

Users인터넷 접속을 요청할 때 squid이름과 여권을 물어보고 인증한 LDAP후 LDAP가 승인하면 승인합니다.

일부 스니퍼가 사용자와 오징어 사이의 경로(경로 A)에서 여권을 훔칠 때까지 모두가 행복했습니다. 이번 참사는 오징어가 Basic-Authentication방법을 사용했기 때문에 일어났습니다.

문제를 해결하기 위해 정글의 사람들이 모였습니다. 일부 토끼는 NTLM방법을 사용하도록 제안했습니다. 나무가 추천하는 Digest-Authentication동안 뱀이 선호됩니다 Kerberos.

결국 정글의 사람들이 제시한 많은 해결책이 모두 혼란스러웠습니다! 라이온은 상황을 끝내기로 결정했습니다. 그는 해결책을 위한 규칙을 외쳤습니다.

  • 솔루션이 안전할까요!
  • 솔루션이 대부분의 브라우저 및 소프트웨어(예: 소프트웨어 다운로드)에서 작동합니까?
  • 솔루션이 단순하고 다른 대규모 하위 시스템(예: Samba 서버)이 필요하지 않아야 합니까?
  • 방법이 특정 도메인에 의존해서는 안 됩니다. (예: Active Directory)

그런 다음 원숭이가 제공하는 매우 합리적이고 포괄적이며 영리한 솔루션을 통해 그를 정글의 새로운 왕으로 만들었습니다!

해결책이 무엇인지 추측할 수 있나요?

팁:squid과 사이의 길은 LDAP사자에 의해 보호되므로 해결책은 그것을 확보할 필요가 없습니다.

메모:이야기가 지루하고 지저분하다면 죄송합니다. 하지만 대부분은 실제입니다! =)

               /~\/~\/~\
            /\~/~\/~\/~\/~\
          ((/~\/~\/~\/~\/~\))
        (/~\/~\/~\/~\/~\/~\/~\)
       (////     ~   ~     \\\\)
       (\\\\(   (0) (0)   )////)
       (\\\\(   __\-/__   )////)
        (\\\(     /-\     )///)
         (\\\(  (""""")  )///)
          (\\\(  \^^^/  )///)
           (\\\(       )///)
             (\/~\/~\/~\/)         **
               (\/~\/~\/)        *####*
                |     |           ****
               /| | | |\            \\
            _/  | | | | \_ _________//   Thanks!
           (,,)(,,)_(,,)(,,)--------'

업데이트:

마시모Users- squidsquid- 사이의 인증 방법이 LDAP동일할 필요는 없다고 설명했습니다. 임의의 방법을 사용하여 사용자로부터 인증 정보를 얻을 수 있고 임의의 방법을 사용하여 인증된 수집 데이터를 얻을 수 있습니다.

하지만 문제가 있습니다. 모든 유형의 인증자의 입력/출력이 동일하지 않습니다. 예를 들어:

  • 인증 자는 Basic"사용자 이름 비밀번호" 쌍을 한 줄로 읽고 OK사용자 비밀번호가 올바른지 응답해야 합니다.ERR
  • 인증 자는 Digesta를 읽고 username:realm16진수로 인코딩된 HA(A1)또는 로 응답해야 합니다 ERR.

클라이언트-squid 방법과 squid-ldap 방법 사이에는 직접적인 관계가 없지만 클라이언트에서 수집된 데이터는 squid-ldap 부분에서 사용되는 방법과 호환되어야 합니다. 따라서 사용자 측에서 인증 방법을 변경하면 인증자도 변경해야 할 수도 있습니다.

따라서 문제는 다음과 같이 단순화됩니다.

  1. 첫 번째 수준에서는 나(원숭이!)가 사용자 측에서 좋은 인증 방법을 찾고 있습니다. 어떤 방법을 추천하시나요?대부분의 브라우저에서 안전하고 지원됩니다? NTLM, Kerberos와 사이에서 혼란스러워요 Digest.

  2. 선택한 방법의 자격 증명 정보를 지원하고 LDAP를 통해 인증하는 인증자를 찾을 수 있습니다.

답변1

Kerberos는 HTTP 인증을 위한 옵션이 아닙니다. NTLM은 IE 이외의 브라우저에서는 잘 지원되지 않습니다. AFAIK 오징어가 할 수 없는 HTTPS 뒤에 두지 않으면 기본은 안전하지 않습니다. 그래서 다이제스트가 남았습니다.

답변2

여기서 도움이 될 수 있는 한 가지 흥미로운 기능은 Squid가 클라이언트 브라우저에 인증을 요청하기 위해 사용하는 방법(경로 A)이 사용자가 제공한 자격 증명을 실제로 검증하는 데 사용하는 방법(경로 B)과 전혀 관련될 필요가 없다는 것입니다. ). 즉, 클라이언트 브라우저를 사용하여 Squid가 NTLM과 "대화"하도록 할 수 있지만 Linux의 내부 사용자 데이터베이스(/etc/passwd)에 대해 사용자의 유효성을 매우 잘 확인할 수 있다는 의미입니다. 있다아니요Windows 도메인(경로 B)에 대해 실제로 유효성을 검사하려면 NTLM(경로 A)을 사용하여 획득한 자격 증명이 필요합니다. 클라이언트 측 인증 방법과 서버 측 인증 방법의 가능한 조합에도 동일하게 적용됩니다.

이것이 귀하의 경우에 의미하는 바는 기본 인증 대신 클라이언트 브라우저에서 NTLM 인증을 요청하도록 Squid를 안전하게 구성할 수 있다는 것이며 실제로 Samba/WinBind/AD/무엇이든 사용할 필요가 없다는 것입니다.

따라서 클라이언트 측 인증에 원하는 방법을 선택할 수 있으며, 선택한 방법을 사용하여 자격 증명을 제공한 후에도 사용자가 LDAP 서버에 대해 계속 유효성을 검사할 수 있습니다.

물론 마법 같은 일이 일어나는 곳은 다음과 같습니다 squid.conf.

#auth_param negotiate program <uncomment and complete this line to activate>
#auth_param negotiate children 5
#auth_param negotiate keep_alive on
#auth_param ntlm program <uncomment and complete this line to activate>
#auth_param ntlm children 5
#auth_param ntlm keep_alive on
#auth_param digest program <uncomment and complete this line>
#auth_param digest children 5
#auth_param digest realm Squid proxy-caching web server
#auth_param digest nonce_garbage_interval 5 minutes
#auth_param digest nonce_max_duration 30 minutes
#auth_param digest nonce_max_count 50
#auth_param basic program <uncomment and complete this line>
#auth_param basic children 5
#auth_param basic realm Squid proxy-caching web server
#auth_param basic credentialsttl 2 hours
#auth_param basic casesensitive off

auth_param지시문은 특정 인증을 활성화합니다.클라이언트 브라우저용(경로 A), "프로그램" 부분은 Squid가 사용자가 제공한 자격 증명을 검증하기 위해 실제로 사용할 것을 설정합니다. 사용자 ID와 비밀번호를 받고 "예" 또는 "아니요"로 대답할 수 있는 한 여기에서 원하는 인증 프로그램(맞춤 작성 프로그램 포함)을 사용할 수 있습니다.

LDAP 쿼리를 수행하는 데 사용하는 인증자를 현재 "auth_param 기본" 문 대신 "auth_param ntlm" 또는 "auth_param 다이제스트" 문에 붙이기만 하면 됩니다.


업데이트:

꼭 사용하셔야 합니다squid_ldap_auth귀하의 인증자로서 정확하게 말씀드릴 수는 없습니다.어떻게사용 중인 특정 LDAP 서버에 대한 세부 정보가 없습니다.

클라이언트측 인증에 관해서는 어느 쪽이든 양호해야 합니다. 저는 NTLM에 매우 만족하며 요즘 대부분의 브라우저에서 이를 지원합니다.

이러한 구성은 squid.conf에서 다음과 같습니다:

auth_param ntlm program /usr/lib/squid/squid_ldap_auth <parameters>

그러면 NTLM을 사용하여 사용자 자격 증명(경로 A)을 요청한 다음 LDAP 서버(경로 B)에 대해 유효성을 검사합니다. 그러나 이러한 "매개변수"는 LDAP 구현 및 구성에 따라 엄격하게 달라집니다.

이것도 도움이 될 수 있습니다.http://www.cyberciti.biz/tips/howto-configure-squid-ldap-authentication.html.

관련 정보