이 문서는 저의 새로운 Pluralsight 과정인 "온프레미스 리소스를 AWS 인프라에 연결하기"의 일부를 수정했습니다.
Amazon Web Services에서 실행 중인 리소스에 연결해야 하는 경우가 있습니까? SSH를 사용하여 퍼블릭 EC2 인스턴스에 액세스하고 S3 데이터를 암호화하면 모든 의도와 목적에 대해 충분히 안전합니다. 그러나 백엔드 RDS 데이터베이스 인스턴스에 들어가거나 공개되지 않은 AWS 기반 데이터로 작업하는 것은 어떻습니까? 관리자가 이러한 리소스를 일반 대중의 손이 닿지 않는 곳에 보관하는 데에는 여러 가지 이유가 있습니다. 하지만 필요할 때 접근할 수 없다면 그들이 당신에게 무슨 도움이 될까요?
따라서 ACL 및 보안 그룹을 보호하는 안전하고 신뢰할 수 있는 방법을 찾아야 합니다. Pluralsight의 "AWS 인프라에 온프레미스 리소스 연결" 과정에서 다루는 솔루션 중 하나는 Direct Connect입니다. 그러나 Direct Connect의 가격표가 회사의 예산 낭비라면 일종의 VPN 터널이 도움이 될 수 있습니다.
가상 사설망이란 무엇입니까?
가상 사설망(VPN)은 다른 방식으로 제한된 네트워크 활동이나 익명 브라우징을 허용하는 데 자주 사용됩니다. 하지만 이 기사의 내용은 그렇지 않습니다.
VPN은 공용 네트워크를 통해 두 사이트 간에 데이터를 안전하게 이동할 수 있는 지점 간 연결입니다. 효과적으로 터널은 지리적으로 분리된 두 개의 사설 사이트를 하나의 사설 네트워크로 결합하도록 설계할 수 있습니다. 우리의 맥락에서 이는 로컬 사무실 네트워크를 프라이빗 리소스를 호스팅하는 AWS VPC와 연결하는 것을 의미합니다.
두 가지 방법이 있습니다.
- AWS Virtual Private Gateway를 기반으로 구축된 관리형 VPN 연결
- 자체 VPN 사용
이 기사에서는 DIY 방법에 중점을 둘 것입니다.
OpenVPN 액세스 서버
이름에서 알 수 있듯이 OpenVPN은 오픈 소스 프로젝트이며 항상 무료 커뮤니티 에디션을 다운로드하고 자신의 VPN 서버에서 설정할 수 있습니다. 그러나 OpenVPN 회사는 AWS 친화적인 통합 및 자동화된 구성 도구와 함께 기본적으로 제공되는 EC2 AMI로 특별히 제작된 OpenVPN 액세스 서버도 제공합니다.
내가 볼 때 AWS VPC 내에서 AMI를 시작하고 제어된 원격 연결을 위해 여는 것이 이 작업을 완료하는 "올바른" 방법이 되었습니다.
비용은 얼마입니까? 테스트만 하고 한 번에 두 개 이상의 연결을 사용하여 VPN에 액세스할 계획이 없다면 AMI 자체는 무료입니다. EC2 인스턴스의 일반 비용은 여전히 부담되지만 계정이 여전히 프리 티어에 해당하는 경우 무료로 받을 수 있습니다.
VPN을 활성 프로덕션으로 전환하면 필요한 동시 연결 수에 따라 구매하는 라이선스가 달라집니다. 이 페이지에는 필요한 세부정보가 있습니다.
이 가이드에서 수행할 작업은 다음과 같습니다.
- 내 VPC에 사전 설치된 OpenVPN 액세스 서버로 Ubuntu AMI 선택, 프로비저닝 및 시작
- SSH를 사용하여 서버에 액세스하고 VPN 구성
- 관리자 사용자 설정
- 로컬 머신을 OpenVPN 클라이언트로 설정하고 내 AWS VPC의 프라이빗 인스턴스에 연결
준비되셨나요?
OpenVPN 액세스 서버 시작
EC2 대시보드에서 적절한 AWS 리전에 있는지 확인하고 VPN 서버 역할을 할 인스턴스를 시작합니다. Quick Start AMI 중 하나를 사용하는 대신 AWS Marketplace 탭을 클릭하고 "openvpn access server"를 검색하겠습니다. OpenVPN은 연결된 클라이언트의 수를 증가시키는 라이선스에 연결된 여러 공식 이미지를 제공합니다.
"Bring Your Own License" 배열을 통해 작동하는 이 Ubuntu 이미지를 사용하겠습니다. 앞서 썼듯이 실제로 우리가 하려는 일에 대한 라이선스는 필요하지 않습니다.
AMI를 선택하면 다양한 인스턴스 유형 및 EBS 스토리지 선택 사항을 사용하여 이 이미지가 시간당 비용을 얼마나 들이는지 알려주는 팝업이 열립니다. 그러나 이는 일반적인 AWS 인프라 비용일 뿐이며 라이선스 비용은 포함되어 있지 않습니다.
인스턴스 유형과 관련하여 프리 티어 내에서 유지하기 위해 t2.micro로 다운그레이드하겠습니다. 사용량이 많은 프로덕션 서버에는 더 많은 전력이 필요할 수 있습니다.
몇 분 안에 동일한 서브넷에서 두 번째 인스턴스를 시작하려고 하기 때문에 Configure Instance Details 페이지에서 "us-east-1b"를 선택하고 나중에 메모해 둡니다.
이제 보안 그룹 페이지는 OpenVPN AMI 설정이 정말 빛나는 곳입니다. 필요한 모든 것을 열어주는 보안 그룹이 제공됩니다. 포트 22는 서버로의 SSH 트래픽용이고, 943은 관리 GUI에 액세스하는 데 사용할 포트이고, 443은 TLS 암호화 HTTP 트래픽이며, OpenVPN은 포트 1194에서 들어오는 클라이언트 연결을 수신합니다.
참고 :가능한 경우 일반적으로 이러한 규칙을 강화하여 유효한 회사 IP 주소 범위의 요청만 수락하도록 하는 것이 좋지만 단기 테스트에는 문제가 없습니다.
여기에서 설정을 검토하고 나열된 SSH 암호화 키가 있는지 확인한 다음 트리거를 당깁니다.
인스턴스가 시작되면 서버에 SSH로 연결하는 데 사용할 사용자 계정이 openvpnas라는 사실을 포함하여 중요한 로그인 정보와 빠른 시작 가이드가 표시됩니다. 동일한 정보에 대한 링크가 포함된 이메일도 받게 됩니다.
EC2 인스턴스 콘솔로 돌아가서 새 머신이 부팅을 완료하는 동안 퍼블릭 IP 주소가 표시됩니다. 인스턴스를 재부팅해야 하는 경우 동일한 IP를 다시 얻을 수 있다는 보장이 없으므로 합리적인 수준의 혼란이 발생할 수 있습니다. 따라서 인스턴스에 탄력적 IP를 할당하는 것이 좋습니다.
그렇게 하려면 탄력적 IP를 클릭한 다음 새 주소 할당을 클릭합니다. 새 주소를 기록하고 페이지를 닫습니다. 이제 해당 주소를 선택한 상태에서 작업을 클릭하고 "주소 연결"을 클릭합니다. 인스턴스 상자를 한 번 클릭하면 유용한 태그가 있는 내 OpenVPN 인스턴스가 나열됩니다. 선택하고 "연결"을 클릭하기만 하면 됩니다. 이제부터 그것이 우리 서버에 접근하기 위한 영구적인 공인 IP가 될 것입니다.
서버 액세스
이 인스턴스에 대해 설정한 키 쌍을 호출하는 SSH 명령의 일부로 공용 IP 주소를 터미널에 붙여넣겠습니다.
ssh -i KeyPairName.pem openvpnas@<PublicIPAddress>
Windows 또는 macOS 컴퓨터에서 액세스하는 경우 상황이 약간 다르게 작동할 수 있지만 문서에서 필요한 모든 도움을 받을 수 있습니다.
하지만 인스턴스 콘솔을 나가기 전에 중요한 기능을 하나 더 수행하겠습니다. OpenVPN 인스턴스를 선택한 상태에서 작업, 네트워킹, "소스/대상 확인 변경"을 차례로 클릭합니다. 확인이 비활성화되어 있는지 확인하겠습니다. 내가 이것을 하지 않는 한 아무 것도 가능하지 않을 것입니다.
이제 내 SSH 세션으로 넘어갑니다. 시작하자마자 OpenVPN EULA 라이선스 계약과 설정 마법사가 나타납니다. 나중에 설정을 변경해야 하는 경우 다음 명령을 사용하여 언제든지 마법사를 다시 실행할 수 있습니다.
sudo ovpn-init — ec2.
대부분의 마법사 기본값은 잘 작동하지만 무슨 일이 일어나고 있는지 빠르게 설명할 가치가 있습니다. 다음은 필요한 경우 질문과 몇 가지 색상 설명입니다.
primary Access Server node? yes [You’d answer no if you were setting up a backup or failover node.]
specify the network interface and IP address to be used by the Admin Web UI [1 — For all interfaces; can be changed to static later.]
specify the port number for the Admin Web UI [default]
specify the TCP port number for the OpenVPN Daemon [default]
Should client traffic be routed by default through the VPN? [no--That’s not the kind of VPN we’re building here. What we’re doing is only about getting remote clients safely and securely into our VPC. The same applies to client DNS traffic.]
Should client DNS traffic be routed by default through the VPN? [no]
Use local authentication via internal DB? [no — can be useful, but we’ll use Linux/AWS authentication for simplicity.]
Should private subnets be accessible to clients by default? [yes — that’s the whole point of the VPN, after all.]
login to the Admin UI as “openvpn”? [yes]
Provide OpenVPN Access Server license key [Unnecessary for testing.]
마법사가 완료되면 일부 연결 정보가 표시되고 네트워크 시간 데몬 NTP를 설치하도록 권장됩니다. 이 Ubuntu 상자에서는 기본적으로 이미 설치되어 실행 중이므로 필요하지 않습니다.
앞에서 언급했듯이 웹 GUI에 로그인하는 데 사용할 수 있도록 openvpn 사용자에게 암호를 제공해야 합니다. passwd 명령을 사용하여 sudo로 수행합니다.
sudo passwd openvpn
이것이 우리가 필요로 하는 서버 측의 모든 것입니다. 이제 브라우저를 사용하여 웹 GUI에 로그인하겠습니다. 저는 보안 https 접두사 뒤에 슬래시와 admin이 오는 서버의 공용 IP 주소를 사용합니다.
https://<PublicIPAddress>/admin
인증 기관에서 제공한 인증서가 아닌 자체 서명된 인증서를 사용하고 있기 때문에 "연결이 비공개가 아닙니다"라는 경고가 표시됩니다.
우리는 VPN을 회사 내에서 선택한 사용자에게만 노출하고 그들이 우리의 인증서를 신뢰할 수 있어야 하기 때문에 그것은 우리에게 문제가 되지 않습니다. 따라서 경고를 클릭하고 로그인하고 EULA에 동의하겠습니다.
OpenVPN 관리 콘솔에서 제공하는 기능을 직접 탐색하는 데 시간을 할애하십시오.
VPN 클라이언트 설정
그러나 지금은 이전에 본 웹 액세스 주소를 사용하여 클라이언트 UI 페이지를 열 것입니다. 그러나 이번에는 슬래시 관리자가 없습니다. 이것은 이전과 동일한 openvpn 사용자를 사용하여 인증할 수 있는 로그인 화면에 불과합니다. (관리 콘솔에서 언제든지 새 사용자를 생성할 수 있습니다.)
로그인 화면 뒤에는 해당 플랫폼에 OpenVPN 클라이언트 앱을 설치하기 위한 지침이 포함된 링크 세트가 있습니다. 그러나 마지막 링크는 "Yourself"라고 합니다.
그것을 클릭하면 client.ovpn이라는 파일을 다운로드하고 저장하라는 메시지가 표시됩니다. 이 파일에는 서버와 인증에 사용할 실제 키와 일치하는 구성 설정이 포함되어 있습니다. 이 파일이 잘못된 사람의 손에 넘어가지 않도록 주의하여 처리해야 합니다. 여기에는 암호화되지 않은 연결을 통해 일반 이메일을 통해 전송하지 않는 것이 포함됩니다.
로컬에서 파일을 열고 내용을 복사하겠습니다. 그런 다음 로컬 네트워크에서 실행되는 Linux 가상 머신 내의 셸에서 client.ovpn이라는 새 파일을 만들고 내용을 붙여넣습니다. 클라이언트 UI에서 "Linux용 OpenVPN" 링크를 클릭한 경우 이전에는 Apt 패키지 관리자를 사용하여 OpenVPN을 설치하거나 CentOS 또는 Red Hat 시스템을 사용하는 경우 Yum만 추가하면 됩니다. 하나의 명령만 사용하면 됩니다. 작업이 완료되면 모든 준비가 완료됩니다.
nano client.ovpnsudo apt updatesudo apt install openvpn
다음으로 VPN 연결을 엽니다. 루트로 — sudo 사용 — 방금 만든 client.ovpn 구성 파일을 가리키는 구성 플래그와 함께 openvpn을 입력합니다.
sudo openvpn — config client.ovpn
인증하라는 메시지가 표시되면 서버에서 생성한 비밀번호와 함께 openvpn 계정을 사용하십시오.
이제 로컬 클라이언트에서 두 번째 셸 세션을 열어 로컬을 사용하여 OpenVPN 서버에 SSH 접속을 시도할 것입니다. IP 주소 — 작동하는 VPN 연결 없이는 불가능한 것입니다.
하지만 먼저 ip a를 실행하여 이 컴퓨터에서 활성화된 모든 네트워크 인터페이스를 나열합니다.
ip a
로컬 네트워크 외에 tun0이라는 네트워크도 표시되어야 합니다. 이 인터페이스는 OpenVPN에 의해 생성되었으며 일반적으로 172.16.x.x 범위 내에 있습니다.
내 개인 키(물론 로컬에 있어야 함)와 서버의 개인을 사용하여 원격 서버에 ssh합니다. IP 주소. 작동하면 VPN을 갖게 됩니다!
ssh -i KeyPairName.pem openvpnas@<PrivateIPAddress>
마지막으로 현재 구성된 VPN을 통해 Amazon VPC 내의 다른 프라이빗 리소스에 액세스할 수 있음을 보여드리겠습니다. 예를 들어, 공개 네트워크에 노출할 수 없는 VPC에서 실행 중인 데이터베이스 인스턴스가 있는 경우 유용할 수 있습니다.
표준 Ubuntu EC2 인스턴스를 시작하려고 하지만 하지 않을 것 공개 IP를 제공하십시오. OpenVPN 서버에 사용한 것과 동일한 us-east-1b 서브넷을 지정하여 작업을 단순하게 유지하겠습니다. 내가 사용할 보안 그룹은 포트 22를 통한 SSH 액세스를 허용하지만 다른 것은 허용하지 않습니다.
실행되면 개인 IP 주소를 기록하고 로컬 클라이언트로 돌아갑니다. 인스턴스가 완전히 시작되었다고 확신하면 동일한 개인 키, "ubuntu" 사용자 이름(일반 Ubuntu EC2 인스턴스의 기본값이기 때문에) 및 방금 복사한 개인 주소를 사용하여 ssh할 것입니다.
다시. 작동하면 AWS 프라이빗 리소스에 대한 VPN 연결이 완전히 구성된 것입니다. 순간을 즐겨보세요.
모든 서버를 종료하고 사용이 끝나면 탄력적 IP 주소를 해제하는 것을 잊지 마십시오. 불필요하게 비용이 발생하는 것을 원하지 않습니다.
이 기사는 저의 새로운 Pluralsight 과정인 "온프레미스 리소스를 AWS 인프라에 연결하기"의 일부를 수정한 것입니다. 내 책, Linux in Action, Linux in Motion이라는 하이브리드 과정에 대한 링크를 포함하여 내 Bootstrap IT 사이트에서 가져온 것보다 훨씬 더 많습니다. Linux in Motion은 2시간 이상의 비디오와 Linux 텍스트의 약 40%로 구성되어 있습니다. 실행 중입니다.