본문 바로가기
공부/Linux

[Linux] RADIUS Server 구축해서 AWS Directory Server에 연동하기 (LinOTP, FreeRADIUS)

by haejang 2021. 8. 29.
728x90
728x90

 

Reference


 

목표


출처 : https://aws.amazon.com/ko/blogs/desktop-and-application-streaming/integrating-freeradius-mfa-with-amazon-workspaces/

 

Prerequisites


  • Directory Service의 Directory 하나와 그 안의 WorkSpace (이전 글에서 만든 honglab.com Directory 사용)
  • Directory가 있는 VPC와 통신이 되는 Amazon Linux Server
  • Linux Server <-> Directory 간 UDP 1812 Port 보안그룹 Open
    (Directory의 보안그룹은 outbound가 다 안열려있기 때문에 같은 Port로 outbound까지 열어줘야 한다)
  • MFA Client App (Google Authenticator 이나 Chrome 인증 도구 등)

 

시작!

 

※ Amazon Linux 2에서 진행

 

 

1. RADIUS Server 설정


# root로 진행 (또는 sudo -i)

# Update 및 저장소 활성화
yum -y update
amazon-linux-extras install epel -y
yum -y localinstall http://linotp.org/rpm/el7/linotp/x86_64/Packages/LinOTP_repos-1.1-1.el7.x86_64.rpm

# MariaDB 설치 및 활성화
yum install -y mariadb-server
systemctl enable mariadb
systemctl start mariadb

# LinOTP 설치 및 MariaDB 연동
yum install -y LinOTP LinOTP_mariadb
restorecon -Rv /etc/linotp2/
restorecon -Rv /var/log/linotp

# LinOTP, MariaDB credentials 구성
linotp-create-mariadb
# Set root password? 나오면 Y 하고 비번세팅(2번), 나머진 다 Enter치다가 마지막에 비번 쳐줌

# python-repoze-who 버전 잠금 (뭔지 모름)
yum install -y yum-plugin-versionlock
yum versionlock -y python-repoze-who

# Apache 설치 및 vhost config
yum install -y LinOTP_apache
systemctl enable httpd
systemctl start httpd
mv /etc/httpd/conf.d/ssl.conf /etc/httpd/conf.d/ssl.conf.back
mv /etc/httpd/conf.d/ssl_linotp.conf.template /etc/httpd/conf.d/ssl_linotp.conf

# LinOTP 관리 포털 암호 설정
htdigest /etc/linotp2/admins "LinOTP2 admin area" admin
# 재부팅
reboot

 

2. LinOTP 구성 (AD와 통합)


https://[RADIUS 서버 IP]/manage 로 웹에서 접속 (RADIUS 서버 보안그룹에서 443 열어둬야 함)

에러 창이 뜨는 것 같지만 그냥 고급 > 안전하지 않음으로 이동 을 눌러주자

 

 

그러면 이렇게 로그인 하라는 팝업창이 뜬다

 

 

admin과 htdigest 명령으로 설정했던 비밀번호를 입력하고 로그인하자

 

LinOTP 관리자 화면

좌측 상단의 LinOTP Config > UserIdResolvers > +New > LDAP 선택

 

 

이름은 맘대로 정하고, Server-URI의 ldap:// 뒤에는 내 Directory의 DNS 주소 2개를 각각 적어준다

BaseDN : ou=users,ou=[your domain],dc=[your domain],dc=com

BindDN : cn=admin,ou=users,ou=[your domain],dc=[your domain],dc=com

Bind Password : Directory의 관리자(cn) 비밀번호

입력 다 하고 Test LDAP Server Connection을 눌러 연결이 잘 되는지 테스트해보자

 

연결 성공!

만약 연결이 실패한다면 보안그룹을 잘 열어줬는지와 비밀번호를 맞게 쳤는지를 확인해보자

 

그러고 Save > Close > OK 를 눌러주면 realm을 생성하는 창이 뜬다

+New 를 누른 후 Realm 이름을 정하고 resolver를 선택해준 후 Save를 눌러주자

 

 

그 다음엔 Policy 탭의 Import policies를 눌러 아래 파일을 넣어주자

samplepolicy.cfg.txt
0.00MB

 

Policy가 4개가 생겼다!

 

3. 사용자 MFA 등록


이번엔 https://[RADIUS 서버 IP]/ 로 접속해보자

 

 

Directory의 User로 로그인할 수 있다 (WorkSpace 로그인 정보)

 

 

 

Google Authenticator compliant 를 체크해준 후, enroll TOTP token 을 눌러 토큰을 발급받자

 

 

authenticator를 사용해 QR코드 스캔 후 MFA 등록하면 끝이다

아래 링크로 접속해 잘 적용되었는지 Test해볼 수 있다

https://[RADIUS 서버 IP]/validate/check?user=[USERNAME]&pass=[PINOTP]

 

value : true 면 성공

 

4. FreeRADIUS 설치 & 구성


FreeRADIUS 설치

yum install -y freeradius freeradius-perl freeradius-utils perl-App-cpanminus perl-LWP-Protocol-https perl-Try-Tiny git
cpanm Config::File
mv /etc/raddb/clients.conf /etc/raddb/clients.conf.back
mv /etc/raddb/users /etc/raddb/users.back

 

vi /etc/raddb/clients.conf - client 구역별로 비밀번호 지정

client localhost {
        ipaddr = 127.0.0.1
        netmask= 32
        secret = '비밀번호'
}
client directory {
        ipaddr = 10.0.0.0
        netmask = 16
        secret = '비밀번호'
}

 

FreeRADIUS용 LinOTP Perl 모듈 다운

git clone https://github.com/LinOTP/linotp-auth-freeradius-perl.git /usr/share/linotp/linotp-auth-freeradius-perl

 

vi /etc/raddb/mods-available/perl

# FreeRADIUS가 'linotp'플러그인을 실행하도록 허용

perl {
	filename = /usr/share/linotp/linotp-auth-freeradius-perl/radius_linotp.pm
}

 

 

Perl 모듈 활성화

ln -s /etc/raddb/mods-available/perl /etc/raddb/mods-enabled/perl

 

vi /etc/linotp2/rlm_perl.ini

#IP of the linotp server
URL=https://localhost/validate/simplecheck
#optional: limits search for user to this realm
REALM=honglab-realm # LinOTP 콘솔에서 만든 Realm 이름
#optional: only use this UserIdResolver
#RESCONF=flat_file
#optional: comment out if everything seems to work fine
Debug=True
#optional: use this, if you have selfsigned certificates, otherwise comment out
SSL_CHECK=False

REALM 부분만 내 Realm 이름으로 수정

 

활성화 된 구간에 대한 기본 링크 제거

rm /etc/raddb/sites-enabled/{inner-tunnel,default}
rm /etc/raddb/mods-enabled/eap

 

vi /etc/raddb/sites-available/linotp

# FreeRADIUS에서 LinOTP 활성화

server default {
        listen {
                type = auth
                ipaddr = *
                port = 0
                limit {
                        max_connections = 16
                        lifetime = 0
                        idle_timeout = 30
                }
        }
        listen {
                ipaddr = *
                port = 0
                type = acct
        }
        authorize {
                preprocess
                IPASS
                suffix
                ntdomain
                files
                expiration
                logintime
                update control {
                        Auth-Type := Perl
                }
                pap
        }
        authenticate {
                Auth-Type Perl {
                        perl
                }
        }
        preacct {
                preprocess
                acct_unique
                suffix
                files
        }
        accounting {
                detail
                unix
                -sql
                exec
                attr_filter.accounting_response
        }
        session {
        }
        post-auth {
                update {
                        &reply: += &session-state:
                }
        -sql
        exec
        remove_reply_message_if_eap
        }
}

 

소프트링크 활성화 & RADIUS 서비스 활성화

ln -s /etc/raddb/sites-available/linotp /etc/raddb/sites-enabled/linotp

systemctl enable radiusd
systemctl start radiusd

 

솔루션 테스트

radtest USERNAME MFACODE PRIVATERADIUSIP:1812 10 비밀번호
radtest hhj 439473 localhost:1812 10 [비밀번호]

 

Access-Accept 나오면 성공

 

5. Directory에서 MFA 활성화


AWS Console > Directory Service > MFA 설정할 디렉터리 > 맨 밑의 멀티 팩터 인증 활성화

 

 

필요한 정보를 입력한다 - 공유 보안 코드는 위의 clients.conf 파일에서 지정한 비밀번호 입력

 

 

좀만 기다리면

 

완료!

WorkSpace에 접속해보면

 

기존 로그인 화면 / MFA 활성화 된 후 로그인 화면

 

로그인 창에 MFA Code를 입력하는 칸이 나타났다

 

 

MFA Code까지 입력하고 나니 WorkSpaces에 접속도 잘 된다

 

 

끝!

 

 

 

728x90
728x90

댓글