이중 인증 · 4 min read · Dec 28, 2025

SSH를 Freeradius와 WiKID를 사용하여 이중 인증 구성하기

SSH를 Freeradius와 WiKID를 사용하여 이중 인증 구성하기

Radius는 훌륭한 표준입니다. 많은 일을 수행할 수 있을 만큼 강력하면서도 다루기 쉬울 만큼 간단합니다. Freeradius는 많은 리눅스 변형과 함께 제공되는 훌륭한 오픈 소스 Radius 서버입니다. 잘 문서화되어 있고 잘 지원됩니다. WiKID Strong Authentication 서버는 PIN과 일회용 비밀번호를 블랙베리, 휴대폰, 팜, 포켓PC 또는 J2SE 클라이언트를 사용하는 리눅스, 맥 및 윈도우 PC에서 실행되는 소프트웨어 토큰으로 안전하게 전송하기 위해 공개 키 암호화를 사용하는 상용/오픈 소스 이중 인증 시스템입니다. WiKID를 인증서처럼 생각할 수 있지만, 화이트리스트/블랙리스트의 번거로움 없이 더 안전합니다. 왜냐하면 PIN이 서버에서 검증되어 오프라인 무차별 대입 공격을 방지하기 때문입니다.

PCI-DSS 또는 HIPAA와 같은 요구 사항을 충족해야 하는 회사는 이중 인증 및 엄격한 접근 제어로 네트워크를 보호해야 할 수 있습니다. Freeradius와 WiKID를 결합하는 것은 이를 달성하는 매우 비용 효율적인 방법입니다.

이 예제에서는 Fedora Core 7에 Freeradius를 설치하고 Centos5에서 WiKID의 3.0RC2 rpm을 실행합니다(그러나 동일한 지침이 WiKID의 2.0 버전에도 적용됩니다). SSH로 테스트할 것이지만, 동일한 설정이 Apache, WebDAV, OpenVPN 및 PAM을 지원하는 기타 모든 애플리케이션에서도 작동해야 합니다.

Freeradius 설치 및 구성

어떤 리눅스 변형을 실행하든 Freeradius에 대한 패키지가 있을 것입니다. Fedora의 경우 Yum을 통해 설치하는 것은 간단합니다:

yum install freeradius

Freeradius 구성은 꽤 간단합니다. 많은 옵션이 있지만, 핵심은 이해하는 최소한의 항목만 변경하는 것입니다. 기본 설정이 작동하므로 작은 변경을 하고 테스트하십시오. 세 개의 파일을 수정할 것입니다. /etc/raddb/clients.conf 파일은 Freeradius가 어떤 클라이언트를 수락할지 알려줍니다. proxy.conf 파일은 Freeradius가 인증 패킷을 WiKID 서버로 전송하도록 지시하고, radiusd.conf 파일은 주요 Freeradius 서버를 구성합니다.

먼저, /etc/raddb/clients.conf 파일을 편집합니다:

vi /etc/raddb/clients.conf

client 127.0.0.1 {
        secret          = shared_secret
        shortname       = localhost
        nastype     = other
}

지금은 Freeradius 서버에 SSH로 로그인할 것이므로 shared secret만 변경하면 됩니다.

다음으로, radiusd.conf 파일에서 요청이 프록시될 수 있는지 확인합니다. Fedora에서는 다음과 같았습니다:

vi /etc/raddb/radiusd.conf

proxy_requests  = yes
$INCLUDE  ${confdir}/proxy.conf

마지막으로, proxy.conf에서 WiKID Strong Authentication 서버를 유효한 프록시로 추가합니다:

vi /etc/raddb/proxy.conf

#  이 영역은 명시적인 영역 접두사 또는 접미사가 없는 요청을 위한 것입니다.
#  사용자 이름이 "bob"과 같은 경우 이 영역과 일치합니다.
#
realm NULL {
        type            = radius
        authhost        = WIKIDSERVER_IP:1812
#       accthost        = WIKIDSERVER_IP:1813
        secret          = shared_secret
}

말할 필요도 없이, WIKIDSERVER_IP와 shared_secret을 WiKID 서버 IP와 공유 비밀로 변경하십시오. 클라이언트에 사용된 shared secret과는 다를 수 있습니다.

추가 보안을 위해 이러한 파일의 소유권을 잠가야 합니다:

chmod a-rwx,u+r /etc/raddb/proxy.conf

chmod a-rwx,u+r /etc/raddb/clients.conf

이제 Freeradius를 시작합니다:

service radiusd start

PAM SSH 구성

먼저, PAM Radius를 설치해야 합니다. 이에 대한 훌륭한 문서가 PAM Radius 홈페이지에 있습니다. 배포판에 따라 적절한 바이너리를 찾을 수도 있습니다. Fedora 7에서 컴파일하는 데는 문제가 없었습니다:

/etc/pam.d/sshd를 편집하여 Radius 인증을 허용합니다:

vi /etc/pam.d/sshd

파일의 두 번째 줄로 이동하여 Insert 키 또는 i 키를 눌러 다음 줄을 삽입합니다:

auth     sufficient   /lib/security/pam_radius_auth.so 

이 줄 바로 위에:

auth     required     pam_stack.so service=system-auth

“sufficient” 태그는 Radius 인증이 성공하면 추가 인증이 필요하지 않음을 나타냅니다. 그러나 Radius 인증이 실패하면 시스템의 사용자 이름과 비밀번호가 작동합니다. 강력한 인증을 요구하려면 “Required”를 사용하십시오. sshd 파일만 편집하므로 터미널 로그인에는 영향을 미치지 않습니다. PAM은 리눅스 변형에 따라 매우 다를 수 있습니다. OS에 대한 특정 문서를 참조하십시오.

/etc/raddb/server 파일을 편집하거나 생성합니다:

vi /etc/raddb/server

다음 줄 아래에:

127.0.0.1   secret        1

이 줄을 추가합니다:

localhost   shared_secret     1

마지막으로, /etc/sshd/sshd_config에서 PublicKey 인증이 꺼져 있는지 확인했습니다:

PubkeyAuthentication no

WiKID 서버 구성

이제 Freeradius에서 일회용 비밀번호를 처리하도록 WiKID 서버를 구성합니다. 새로운 WiKID 도메인을 설정해야 한다고 가정합니다. 이미 도메인이 있는 경우 이 부분을 건너뛸 수 있습니다. 추가 WiKID 설치 문서는 여기에서 확인할 수 있습니다.

WiKID 서버에 로그인하고 Domains 탭을 클릭합니다.

새 도메인 만들기를 클릭합니다.

요청된 정보를 입력합니다. 도메인 서버 코드는 WiKID 서버의 제로 패딩된 IP 주소입니다. 따라서 외부 IP 주소가 216.239.51.99인 경우 WiKID 서버 코드는 216239051099가 됩니다. “Create”를 클릭합니다. (명백히, 이미 도메인이 설정되어 있다면 이 단계를 건너뛸 수 있습니다.)

Network Clients 탭을 클릭하고 “새 네트워크 클라이언트 만들기”를 클릭합니다.

요청된 정보를 입력합니다. IP 주소에는 Freeradius 서버의 IP 주소를 사용합니다. Radius와 방금 생성한 도메인을 선택합니다. 완료되면 “Add”를 클릭합니다.

다음 페이지에서 Freeradius 서버의 /etc/raddb/proxy.conf 파일에 입력한 shared secret를 입력합니다. “Return Attributes” 아래에는 아무 정보도 입력할 필요가 없습니다.

중요: WiKID 터미널 또는 SSH를 통해 “wikidctl stop”을 실행한 다음 “wikidcl start”를 실행하여 새로운 구성을 WiKID Radius 서버에 로드해야 합니다. (WiKID 2.0 사용자는 “stop”과 “start”만 실행하면 됩니다.)

일회용 비밀번호로 Freeradius 테스트

WiKID Token 클라이언트를 다운로드하고 설치합니다. WiKIDAdmin 웹 인터페이스에서 사용자로서 수동으로 인증할 수 있습니다. 인증이 완료되면 Freeradius 리소스와 연결된 도메인을 선택합니다:

token1.jpg

PIN을 입력합니다:

token2.jpg

그러면 일회용 비밀번호가 반환됩니다. OTP는 시간 제한이 있지만, WiKID 서버에서 원하는 대로 시간을 설정할 수 있습니다:

token3.jpg

이제 Freeradius 박스로 SSH를 연결합니다:

ssh user@freeradius_server

프롬프트가 표시되면 WiKID 일회용 비밀번호를 입력합니다 - 자동으로 클립보드에 붙여넣어졌으므로 ctrl-c 또는 shift-ins가 작동해야 합니다. 접근이 허용되어야 합니다. 그렇지 않다면, 확인할 수 있는 여러 로그가 있습니다. 먼저, Freeradius 서버의 /var/log/secure를 확인하여 사용자가 거부된 이유를 확인하십시오. “모든 RADIUS 서버가 응답하지 않았습니다.”라는 메시지가 표시되면 radiusd가 포트 1812에서 실행되고 있는지 확인하십시오. Freeradius의 로그는 /var/log/radius/radius.log에 있으며, WiKID 서버의 WiKID radius 로그는 /opt/WiKID/log/radius.log에 있습니다.

대체 구성: Freeradius를 백업으로 사용하기

PAM Radius를 사용하면 /etc/raddb/server 파일에서 서버를 체인으로 연결할 수 있는 이점이 있습니다. 상위 서버가 응답하지 않으면 다음 서버가 사용자를 인증하려고 시도합니다. 명확히 하자면: 첫 번째 서버가 인증 실패로 응답하면 사용자가 거부됩니다. 응답이 없을 경우 두 번째 radius 서버가 확인됩니다. 이 백업 기능은 WiKID 서버가 원격 데이터 센터에 위치한 경우 특히 유용할 수 있습니다. PAM을 WiKID와 직접 연결하고 Freeradius로 실패하도록 구성하면 하드웨어 장애가 발생할 경우 장애 조치 솔루션을 생성할 수 있습니다.

먼저, /etc/raddb/server 파일을 변경하여 WiKID 서버를 먼저 가리키고, 두 번째로 localhost에서 실행되는 Freeradius 서버를 가리킵니다:

# server[:port] shared_secret      timeout (s)
127.0.0.1:1812        shared_secret        1
WIKIDSERVER_IP:1812   shared_secret      3
localhost:1812        shared_secret          2

Freeradius가 /etc/passwd와 함께 작동하도록 약간의 변경을 해야 했습니다. 먼저, radiusd의 그룹을 /etc/raddb/radiusd.conf에서 shadow로 변경해야 했습니다:

user = radiusd
group = shadow

그런 다음 /etc/passwd에 대해 shadow 권한을 부여해야 했습니다:

chgrp shadow /etc/shadow

chmod g+r /etc/shadow

이제 WiKID 서버가 어떤 이유로든 실패하면 /etc/passwd 파일로 자동으로 복원됩니다.

결론

Radius는 원격 사용자의 인증을 위한 훌륭한 표준입니다. Freeradius와 WiKID Strong Authentication을 결합하면 강력하고 유연하며 안전한 솔루션을 생성할 수 있습니다.

Share: X/Twitter LinkedIn

새 게시물을 받은 편지함에서 받기

스팸은 없습니다. 언제든지 구독 해지 가능합니다.