한 달 만원으로 스타트업 VPN 구축하기 (SoftEther VPN, OpenLDAP, FreeRadius)
VPN은 Virtual Private Network로 가상 사설망이라고 합니다. 주로 언제쓰냐?
- 성인들이 자주 가는 사이트(엉?) 가 국내망에서 막힐 때
- 해외 사이트 중 대한민국에서 접속을 차단해놓은 경우
- 특정 네트워크 대역 내부에 접근하고 싶을 때
이런 접근이 가능한 이유는 VPN에 접속하면 내 컴퓨터의 IP가 변경되기 때문인데요
VPN을 통해 사내 시스템 및 클라우드 서버에 안전하게 접근할 수 있도록 하는 방법을 살펴보겠습니다.
체커는 다음과 같이 내부 네트워크 및 AWS 기반 운영 서비스가 구성되어 있습니다.
실 서비스에 사용되는 AWS EC2, RDS의 경우 회사 공인 IP로만 접근되도록 설정되어 있고, 내부 Linux, Windows 서버 또한 내부망에서만 접속할 수 있도록 되어 있습니다.
하지만 Linux, Windows, AWS 외에도 사내에서만 접근해야하는 JIRA, Confluence, Portal 등 수십여개의 사내 시스템이 있는데 고정IP가 없는 제주오피스와, 외부에서 급하게 접속해야 할 경우가 빈번하게 발생하고 있어 기존에는 모두 Public 으로 열어두었습니다.
조직은 점점 커지고 있고, 내부 시스템은 더 많아 지는데다 체커의 문화 특성상 사내 모든 데이터가 공개되어 있기 때문에 보안 및 접근제어가 무척 중요했습니다. 결국 13명의 작은 조직임에도 더 효율적이고 안전한 업무를 위해 VPN, LDAP을 도입하게 되었습니다.
체커에서 월 만원에 구축한 VPN 구성을 소개합니다!
- SoftEther VPN 설치하기
SoftEther VPN은 상당히 유명한 오픈소스 VPN 프로젝트입니다. (https://www.softether.org/) 홈페이지에 가면 Windows, Linux, Mac 등 OS 별로 Server/Client가 제공되고 있으며 설치 방법 또한 매우 간단합니다.
저는 AWS에 새로운 t2.micro 인스턴스를 생성하고 SoftEther VPN을 설치했습니다.
이제 이 서버를 통해 VPN에 접속하면, 이 인스턴스에 설정된 52.xx.xx.xx IP로 내 컴퓨터의 IP가 바뀌게 됩니다.
2. SoftEther Client 설치 및 접속확인
SoftEther Client에는 VPN 서버를 관리하는 VPN Server Manager, VPN 접속을 위한 VPN Client 2가지가 있습니다. 최초 서버 구성을 위해서는 Server Manager를 실행합니다.
계정 생성 후 접속을 하면 잘 접속됩니다.
IP 또한 확인해보면 EC2 VPN 서버의 IP인 52.xx.xx.xx로 표시됩니다.
3. LDAP 구성하기
회사 구성원이 10명 미만일 때는 입사/퇴사 관리비용이 비교적 많이 들지 않지만 구성원이 점점 늘게되면 관리비용이 n², n³ 으로 기하급수적으로 증가합니다.
결국 LDAP과 같은 방법으로 계정 통합관리가 되지 않으면 Google Apps, Agit, JIRA, Confluence, Jenkins, Portal, Admin, VPN 등 인증이 필요한 수십여개의 시스템에서 각각 계정을 모두 추가/삭제 해야하기 때문에 구성원 수 X 시스템 수 만큼의 반복작업을 해야 하는 것이죠.
LDAP은 경량 디렉토리 액세스 프로토콜(Lightweight Directory Access Protocol)로 TCP/IP를 기반으로 디렉터리 서비스를 조회하고 수정하는 응용 프로콜입니다. 좀더 쉽게 풀어 설명하면 트리 구조로 데이터에 속성정보를 저장해두고, 필요할 때 마다 조회할 수 있는 방법중 하나로 생각하면 됩니다.
LDAP은 프로토콜이기 때문에, 프로토콜을 구현한 구현체(응용프로그램)가 필요한데요, 윈도우 서버를 사용한다면 Active Directory 라는 서비스를 사용하면 되고, 리눅스의 경우는 OpenLDAP(https://www.openldap.org/)과 같은 오픈소스 LDAP 구현체면 충분히 사용할 만합니다.
4. PHP-LDAP-Admin 설치
OpenLDAP 설치 후 조직을 구성하려고 하면 여간 귀찮은 일이 아닙니다. 기본적인 인터페이스가 CUI( 명령행 사용자 인터페이스 )이기 때문인데요
GUI 기반 LDAP Client인 PHP-LDAP-Admin(http://phpldapadmin.sourceforge.net/)을 설치하면 손쉽게 LDAP을 관리할 수 있습니다.
PHP-LDAP-Admin 설치 후에 그룹과 사용자를 생성하면 쉽고 간편하게 LDAP으로 조직을 구성할 수 있습니다.
5. SoftEther와 OpenLDAP을 연결하기 위한 FreeRadius 설치
LDAP구성을 마치고 SoftEther와 연동하려고 하니 문제가 있었습니다. SoftEther VPN Server에서 LDAP을 직접 지원하지 않습니다. ㅠㅠ
공식 문서를 좀 뒤져보니, RADIUS라는 프로토콜을 사용하면 LDAP을 연동할 수 있다고 합니다. (https://www.softether.org/4-docs/1-manual/2._SoftEther_VPN_Essential_Architecture/2.2_User_Authentication)
결국 SoftEther -> RADIUS -> LDAP 으로 구성해야 SoftEther에서 LDAP 인증이 가능했습니다. ( RADIUS는 Remote Authentication Dial In User Service의 약자로 네트워킹 프로토콜을 통해 인증, 인가 등을 관리하는 IETF 표준이라고 합니다. 저도 첨봤네요 -,.-)
LDAP서버에 RADIUS 프로토콜 Linux OpenSource 버전인 FreeRadius (https://freeradius.org/) 를 설치하고 LDAP모듈을 활성화한 후 접속해보니 잘 접속이 됩니다.
6. VPN 접속하기
Mac에서는 L2TP 방식의 VPN 접속을 직접 지원합니다.
Windows에서는 SoftEther Client를 사용하는 방법도 있고, Windows가 제공하는 VPN 설정으로 접속 또한 가능하고요.
7. 속도측정
VPN에 접속하게 되면 VPN 서버를 통해 인터넷에 연결되기 때문에 VPN 서버의 성능에 따라 속도가 저하가 있을 수 있습니다. 제가 사용한 t2.micro 인스턴스의 경우 월 만원 수준의 저렴한 서버로 1CPU / 1GB 메모리에 대역폭이 매우 작은 인스턴스 입니다.
기존대비 절반 정도의 속도 저하가 있지만, 월 만원이라는 비용을 감안하면 업무를 진행하는데는 전혀 문제 없는 수준의 속도입니다. 더 빠른 속도가 필요하면 더 좋은 인스턴스로 업그레이드 하면 됩니다.
8. VPN IP 추가
이제 NGINX와 AWS Security Group에 VPN Server IP를 모두 넣어줍니다.
이제 VPN 연결을 통해 사내 모든 시스템과 AWS에 접속할 수 있습니다.
9. 결론
AWS EC2(한달 약 $10) + 오픈소스 (SoftEther, FreeRadius, OpenLDAP, PHPLdapAdmin) 조합이면 부담없는 가격에 효율적인 사내망 운영과 안전한 운영서버 접근제어가 가능한 VPN을 구축할 수 있습니다!
PS.물론 대용량 트래픽이 많은 서비스를 VPN을 통해 사용할 경우 AWS 트래픽 비용이 추가적으로 더 발생할 수는 있습니다!