모바일 통신의 보안과 개인정보 보호를 유지하는 데 좋은 VPN이 얼마나 중요한지 이미 이해하셨을 것입니다.
공공 공항이나 커피숍 Wi-Fi 연결을 통해 뱅킹을 위해 휴대폰을 사용해야 하거나 온라인 상호 작용을 엉뚱한 사람이 듣고 있는 것이 걱정되는 경우, 좋은 VPN이 제공하는 터널링된 암호화는 매우 유용할 수 있습니다.
하지만 비결은 정말로 "좋은" VPN, 그리고 편리하고 저렴한 VPN을 찾는 것입니다.
시중에는 수많은 상업용 VPN 서비스가 있으며, 휴대폰이나 노트북용 서비스 중 하나를 구성하는 것은 일반적으로 충분히 간단합니다.
그러나 이러한 서비스에는 두 가지 잠재적인 단점이 있습니다. 비용이 많이 들고 월 평균 지불액이 약 10달러이며, (우연히든 고의로든) 데이터가 유출되거나 오용되지 않는다고 100% 확신할 수 없습니다.
또한 저렴한 VPN은 데이터 사용과 연결할 수 있는 장치 수를 제한하는 경우가 많습니다.
학습 내용을 보충하기 위해 비디오 버전의 튜토리얼을 시청하고 싶다면 여기를 따라 가십시오:
WireGuard가 제공하는 것
그러나 어쨌든 클라우드 기반 Linux 서버를 실행하는 경우 WireGuard VPN을 구축하는 것은 귀하의 삶에 타협 없는 보안과 개인 정보 보호를 추가할 수 있는 간단하고 무료 방법이 될 수 있습니다.
VPN을 귀하와 몇몇 친구가 소유한 장치로만 제한하려는 경우 서버에 추가 리소스 로드가 발생하지 않을 수도 있습니다. 전용 AWS EC2 t2.micro 예약 인스턴스를 시작하고 비용을 지불해야 하더라도 연간 비용은 여전히 대부분의 상용 VPN보다 훨씬 저렴해야 합니다. 그리고 보너스로 데이터를 완벽하게 제어할 수 있습니다.
지금은 Ubuntu Linux 서버에서 오픈 소스 WireGuard 소프트웨어를 사용하여 이 모든 것이 어떻게 작동하는지 보여 드리겠습니다.
왜 WireGuard인가? 사용하기가 정말 쉽고 공격에 특히 잘 견디도록 설계되었으며 기능이 매우 뛰어나 최근 Linux 커널 자체에 통합되었습니다.
이를 실현하기 위한 실제 작업은 실제로 5분 정도 밖에 걸리지 않습니다. 하지만 계획을 세우고 예상치 못한 문제를 해결하고 필요한 경우 새 서버를 시작하면 프로젝트에 상당한 시간이 추가될 수 있습니다.
환경 설정 방법
먼저, 사용 중인 방화벽에서 UDP 포트 51820을 열어야 합니다. AWS EC2 인스턴스와 연결된 보안 그룹을 찾는 방법은 다음과 같습니다.
이제 Linux 서버에서 sudo 쉘을 사용하여 WireGuard 및 resolvconf 패키지 설치부터 시작하겠습니다.
기술적으로 여기에서는 resolvconf가 필요하지 않을 수도 있지만 Linux 시스템을 WireGuard 클라이언트로 설정하려는 경우 이것이 필요하기 때문입니다. 저도 여기에 던져야겠다고 생각했어요.
apt install wireguard resolvconf
암호화 키 생성 방법
wg genkey 명령은 새로운 개인 암호화 키를 생성하고 이를 /etc/wireguard 디렉토리에 파일로 저장합니다. 이 디렉터리는 WireGuard를 설치할 때 자동으로 생성되었습니다.
chmod 명령은 해당 개인 키 파일에 대해 적절한 제한적 권한을 설정합니다.
Linux의 모든 것과 마찬가지로 이 작업을 수행하는 다른 방법도 있지만 올바르게 수행했는지 확인하세요.
wg genkey | sudo tee /etc/wireguard/private.key
chmod go= /etc/wireguard/private.key
다음으로, 개인 키 값을 사용하여 일치하는 공개 키를 생성합니다. 이 공개 키는 /etc/wireguard 디렉터리에도 저장됩니다. 목표는 서버의 공개를 추가하는 것입니다. 사용할 모든 클라이언트 장치의 WireGuard 구성에 키를 추가한 다음 해당 클라이언트의 공개 키를 여기에서 서버 구성에 추가합니다.
개인 키는 생성된 컴퓨터 외부로 절대 나가서는 안 되며 항상 주의 깊게 보호해야 합니다.
cat /etc/wireguard/private.key | wg pubkey | sudo tee
WireGuard 서버 구성 방법
이제 서버 구성 파일을 만들 준비가 되었습니다. 관례에 따라 파일 이름을 wg0.conf로 지정하지만 원하는 이름을 지정할 수 있습니다. 동시에 여러 구성(파일 이름이 다름)이 존재할 수도 있습니다.
구성은 다음과 같습니다:
[Interface]
Address = 10.5.5.1/24
ListenPort = 51820
# Use your own private key, from /etc/wireguard/privatekey
PrivateKey = your_key
[Peer]
# Workstation public key
PublicKey = your_key
# VPN client's IP address in the VPN
AllowedIPs = 10.5.5.2/32
[Peer]
# laptop public key
PublicKey = your_key
# VPN client's IP address in the VPN
AllowedIPs = 10.5.5.3/32
이 파일에는 인터페이스와 두 개의 피어라는 세 가지 섹션이 있습니다. 인터페이스 섹션에서는 서버가 사용할 개인 NAT 네트워크 주소를 정의합니다. 물론 클라이언트가 서버의 공용 IP 주소를 통해 처음 액세스를 요청한 후 연결되는 개인 주소입니다.
서버나 클라이언트에서 사용하는 네트워크 블록과 겹치지 않는 유효한 개인 IP 범위를 사용하는 한 내 주소 지정을 따를 필요가 없습니다.
AWS에서 이전에 설정한 UDP 보안 그룹 규칙과 일치하도록 ListenPort를 51820으로 정의합니다. 하지만 원하는 경우 보안을 조금 더 추가하기 위해 다른 주소를 선택할 수도 있습니다.
마지막으로 서버의 개인 키를 PrivateKey 값으로 붙여넣습니다. 그러면 WireGuard가 들어오는 클라이언트 요청을 인증할 수 있습니다.
첫 번째 peer 섹션에는 공개 외에는 아무것도 포함되어 있지 않습니다. 한 클라이언트의 키와 할당된 개인 IP 주소입니다. 두 번째 peer 섹션은 두 번째 클라이언트 시스템에 대해서도 동일한 작업을 수행합니다.
클라이언트에서 공개 키를 가져오는 것은 이 전체 설정과 관련된 가장 수동적인 작업입니다. 그러나 이는 자체 VPN이므로 일반적으로 서버 구성에 직접 복사하여 붙여넣는 방법을 찾을 수 있으므로 모든 내용을 힘들게 입력할 필요가 없습니다.
그것이 전부여야 합니다. 저는 wg-quick을 사용하겠습니다 VPN을 활성화하는 명령입니다. up WireGuard에게 방금 만든 wg0.conf 구성을 읽고 이를 사용하여 새 VPN 인터페이스를 구축하도록 지시합니다.
wg-quick up wg0
wg 실행 중 그것이 효과가 있었음을 우리에게 보여줄 것입니다. 마지막으로 systemctl enable을 실행하겠습니다. 서버가 재부팅될 때마다 Linux에게 이 WireGuard 인터페이스를 자동으로 로드하도록 지시합니다.
systemctl enable wg-quick@wg0
WireGuard 클라이언트 구성 방법
이것이 서버 측에서 필요한 전부입니다. WireGuard로 클라이언트 장치를 설정하는 것은 훨씬 쉬울 수도 있고 거의 동일할 수도 있습니다.
그게는 무엇인가요? 무슨 뜻인가요? Windows, macOS, Android 또는 iOS로 작업하는 경우 이 wireguard.com/install 페이지에서 GUI 앱에 대한 링크를 사용할 수 있습니다. 해당 앱은 다음을 위한 키 쌍을 생성합니다. 당신. 서버의 IP 주소나 도메인과 해당 공개 키만 입력하면 됩니다. 그런 다음 클라이언트의 공개 키를 가져와서 앞서 보여드린 대로 서버 wg0.conf 파일에 추가합니다.
그러나 추가하려는 Linux PC 또는 노트북 클라이언트인 경우에는 좀 더 복잡합니다. 기본적으로 키 생성을 포함하여 서버 구성에 대해 본 모든 단계를 따르게 됩니다. wg0-conf라는 이름의 구성 파일을 생성할 수도 있습니다(원하는 이름인 경우). 하지만 구성 파일의 모양은 다음과 같습니다.
[Interface]
# The address your computer will use on the VPN
Address = 10.5.5.2/32
DNS = 8.8.8.8
# Load your privatekey from file
PostUp = wg set %i private-key /etc/wireguard/privatekey
# Also ping the vpn server to ensure the tunnel is initialized
PostUp = ping -c1 10.47.47.1
[Peer]
# VPN server's wireguard public key
PublicKey = your_key
# Public IP address of your VPN server (USE YOURS!)
Endpoint = 54.160.21.183:51820
# 10.0.0.0/24 is the VPN subnet
AllowedIPs = 10.47.47.0/24
# PersistentKeepalive = 25
Interface 섹션은 이번에는 클라이언트 시스템을 나타내고 Peer은 아래 섹션은 서버를 나타냅니다. Interface부터 시작해 보겠습니다. . 개인 IP 주소는 서버 구성에서 이 특정 클라이언트에 제공한 주소와 일치해야 합니다.
클라이언트가 로컬 DNS 서버를 우회해야 하는 경우 여기에서 사용자 지정 DNS 서버를 지정할 수 있습니다. 이는 Google에서 제공하는 것입니다.
서버에서 했던 방식으로 로컬 개인 키를 구성 파일에 하드 코딩하는 대신, 개인 키 파일이 로드될 때마다 WireGuard에 이를 읽도록 지시할 수 있습니다. 이는 아마도 일종의 보안 모범 사례일 것입니다. 서버에서도 쉽게 수행할 수 있습니다. 마지막으로 구성 스크립트는 PostUp과의 연결을 테스트합니다. 핑 명령.
Peer – 또는 서버 – 구성에는 서버의 공개가 필요합니다. 여기에 추가된 키입니다.
Endpoint WireGuard에게 서버를 찾을 위치를 알려주는 곳입니다. 이것 없이는 아무것도 작동하지 않습니다! 이를 위해서는 서버의 공용 IP(또는 도메인 이름)와 선택한 포트가 필요합니다. 다시 말하지만, 51820이 WireGuard 기본값입니다.
마지막으로 AllowedIPs 설정은 사용할 네트워크 주소 범위를 정의하며 선택 사항인 PersistentKeepalive 값을 사용하면 연결 끊김을 방지할 수 있습니다.
wg-quick up wg0를 사용하여 서버에서와 정확히 동일하게 클라이언트에서 WireGuard를 실행합니다. . 그러나 이 모든 단계는 Linux 클라이언트에만 필요합니다. 다른 플랫폼용 앱을 사용할 수 있습니다.
마무리
그게 바로 그거예요. 내가 말했듯이 약 5분 만에 작동하는 VPN이 완성됩니다. 이제 귀하의 온라인 개인 정보를 보호하고 통신 보안을 확보해야 할 이유가 하나 줄어들었습니다.
더 많은 기술을 알고 싶으시면 제 YouTube 채널을 구독하시고, 잠시 시간이 나면 제 bootstrap-it.com 웹사이트를 통해 제공되는 다양한 Linux, 보안, 데이터 분석, AWS 도서 및 강좌를 확인해 보세요.
무료로 코딩을 배우세요. freeCodeCamp의 오픈 소스 커리큘럼은 40,000명 이상의 사람들이 개발자로 취업하는 데 도움을 주었습니다. 시작하세요