개인 IP 주소를 외부에 드러내지 않고 집에서 마인크래프트 서버를 운영하고 싶으신가요? 물론 가능합니다! 서버를 서비스 거부 공격으로부터 안전하게 보호하려면 아마존 웹 서비스(Amazon Web Services)에서 무료 프록시를 구성하기만 하면 됩니다. 이 가이드에서 그 방법을 자세히 알려드리겠습니다.
이 안내는 마인크래프트뿐만 아니라 모든 게임 서버에 적용할 수 있습니다. 특정 포트에서 프록시 트래픽을 처리하도록 설정하기만 하면 됩니다. 마인크래프트의 기본 포트인 25565를 게임 서버가 작동하는 포트로 바꿔주시면 됩니다.
작동 원리
마인크래프트 서버를 직접 호스팅하고 인터넷에 공개하고 싶다고 가정해 봅시다. 서버를 운영하는 것 자체는 그리 어렵지 않습니다. 설치가 간단하며, 심하게 개조된 서버라 할지라도 몇 명의 플레이어와 함께 2~3GB 이상의 RAM만 사용하면 됩니다. 따라서 타인에게 호스팅 비용을 지불하는 대신 오래된 노트북이나 데스크톱 컴퓨터에서 서버를 손쉽게 돌릴 수 있습니다.
하지만 다른 사용자가 서버에 접속하려면 서버의 IP 주소를 알려줘야 합니다. 이 과정에서 몇 가지 문제점이 발생할 수 있습니다. 특히 라우터에 여전히 기본 관리자 암호가 설정되어 있다면 주요 보안 위험이 될 수 있습니다. 게다가 DDOS(분산 서비스 거부) 공격에 취약해져 마인크래프트 서버가 멈출 뿐만 아니라, 공격이 멈출 때까지 인터넷 연결이 차단될 수 있습니다.
이제 라우터에 직접 연결하도록 허용할 필요가 없습니다. 대신 아마존 웹 서비스에서 작은 리눅스 서버를 임대할 수 있습니다. 구글 클라우드 플랫폼이나 마이크로소프트 애저(Microsoft Azure)에서도 가능하며, 이들 모두 무료 이용 등급을 제공합니다. 이 서버는 마인크래프트 서버를 호스팅할 만큼 강력할 필요는 없고, 연결만 전달해 주면 됩니다. 이렇게 하면 자신의 IP 주소 대신 프록시 서버의 IP 주소를 다른 사용자에게 제공할 수 있습니다.
이제 다른 사용자가 서버에 연결하기 위해 AWS 프록시 서버의 IP 주소를 마인크래프트 클라이언트에 입력한다고 가정해 봅시다. 패킷은 25565 포트(마인크래프트 기본 포트)를 통해 프록시로 전송됩니다. 프록시는 25565 포트의 트래픽을 감지하여 가정용 라우터로 전달하도록 설정됩니다. 이 과정은 사용자 모르게 백그라운드에서 일어납니다. 연결하는 사람은 이러한 과정을 전혀 인지하지 못합니다.
그런 다음 실제 PC로 연결을 전달하려면 가정용 라우터에서 포트 포워딩이 구성되어야 합니다. PC는 서버를 실행하고 클라이언트 패킷에 응답합니다. 응답은 다시 프록시로 전달되며, 프록시는 패킷을 재구성하여 프록시가 응답하는 것처럼 보이게 만듭니다. 클라이언트는 이 과정이 진행되는 것을 모르고 단순히 프록시가 서버를 실행하는 시스템이라고 생각합니다.
이것은 가정용 라우터가 컴퓨터를 보호하는 것처럼 서버 앞에 다른 라우터를 추가하는 것과 같습니다. 하지만 이 새로운 라우터는 아마존 웹 서비스에서 실행되며 모든 AWS 서비스(예: AWS Shield)의 보호를 받습니다. 공격이 감지되면 서버에 영향을 주지 않고 자동으로 완화됩니다. 서버가 어떤 이유로 멈추지 않는다면 언제든지 인스턴스를 종료하고 가정과의 연결을 끊을 수 있습니다.
프록시를 처리하기 위해 sslh라는 유틸리티를 사용할 것입니다. 이 유틸리티는 프로토콜 다중화를 위한 것으로, 동일한 포트에서 SSH(일반적으로 22번 포트)와 HTTPS(443번 포트)를 실행하려는 경우 발생하는 문제를 해결해 줍니다. sslh는 이 문제에 대응하여 앞에 위치하며, 패킷을 의도된 응용 프로그램으로 리디렉션합니다. 라우터와 마찬가지로 전송 계층 수준에서 이 작업을 수행합니다. 즉, 마인크래프트 트래픽을 감지하여 가정 서버로 전달할 수 있습니다. sslh는 기본적으로 불투명하여 패킷을 다시 써서 가정의 IP 주소를 숨깁니다. 따라서 와이어샤크 같은 도구를 사용하더라도 누군가가 이 정보를 파악하는 것은 불가능합니다.
새 VPS 생성 및 연결
이제 프록시 서버를 설정할 준비가 되었습니다. 리눅스 경험이 있다면 더 쉽게 진행할 수 있지만 필수는 아닙니다.
먼저 아마존 웹 서비스로 이동하여 계정을 만드십시오. 직불 또는 신용카드 정보를 입력해야 하지만, 이는 중복 계정 생성을 방지하기 위한 것입니다. 현재 생성하는 인스턴스에 대해서는 요금이 청구되지 않습니다. 무료 등급은 1년 후에 만료되므로, 사용이 끝나면 반드시 꺼두어야 합니다. 구글 클라우드 플랫폼에서 f1-micro 인스턴스를 사용하려면 영구적으로 무료로 이용할 수 있습니다. 구글은 또한 적절한 클라우드 서버를 실행하는 데 실제로 사용할 수 있는 300달러의 크레딧을 1년 동안 제공합니다.
AWS는 대역폭에 대해 소액의 요금을 부과합니다. 1GB를 무료로 이용할 수 있지만 그 이상에 대해서는 GB당 0.09달러의 요금이 부과됩니다. 현실적으로 이 한도를 넘기지는 않겠지만, 청구서에 20센트가량의 요금이 있다면 주의 깊게 살펴보시기 바랍니다.
계정을 생성한 후 “EC2″를 검색하십시오. EC2는 AWS의 가상 서버 플랫폼입니다. 새로운 계정에서 EC2가 활성화되기까지 약간의 시간이 걸릴 수 있습니다.
“인스턴스” 탭에서 “인스턴스 시작”을 클릭하여 시작 마법사를 실행합니다.
운영 체제로 기본 “Amazon Linux 2 AMI” 또는 “Ubuntu Server 18.04 LTS”를 선택할 수 있습니다. 다음을 누르면 인스턴스 유형을 선택하라는 메시지가 표시됩니다. 여기서 무료 등급 인스턴스인 t2.micro를 선택하십시오. 이 인스턴스는 AWS 무료 등급으로 1년 내내 실행할 수 있습니다.
“검토 및 시작”을 선택합니다. 다음 페이지에서 “시작”을 클릭하면 아래와 같은 대화 상자가 나타납니다. “새 키 페어 생성”을 클릭한 다음 “키 페어 다운로드”를 클릭합니다. 이 키는 인스턴스에 대한 접근 권한을 부여하므로 잃어버리지 않도록 주의해야 합니다. 보관을 위해 문서 폴더에 저장하는 것이 좋습니다. 다운로드가 완료되면 “인스턴스 시작”을 클릭합니다.
인스턴스 페이지로 돌아갑니다. 여기서 서버 주소 역할을 할 인스턴스의 IPv4 공개 IP를 찾을 수 있습니다. 원한다면 AWS 탄력적 IP(재부팅 시 변경되지 않음)를 사용하거나 dot.tk와 같은 서비스를 사용하여 무료 도메인 이름을 설정하여 주소를 찾기 위해 이 페이지로 계속 돌아올 필요가 없도록 할 수 있습니다.
나중에 사용할 수 있도록 이 주소를 저장해 둡니다. 이제 25565 포트를 열기 위해 인스턴스의 방화벽을 편집해야 합니다. 보안 그룹 탭에서 사용 중인 인스턴스 그룹(아마도 launch-wizard-1)을 선택한 다음 “편집”을 클릭합니다.
새로운 사용자 지정 TCP 규칙을 추가하고 포트 범위를 25565로 설정합니다. 소스는 “어디서나” 또는 0.0.0.0/0으로 설정해야 합니다.
변경 사항을 저장하여 방화벽을 업데이트합니다.
이제 프록시를 설정하기 위해 SSH를 통해 서버에 연결합니다. macOS/Linux를 사용하는 경우 터미널을 열면 됩니다. Windows를 사용한다면 PuTTY와 같은 SSH 클라이언트를 사용하거나 Windows용 리눅스 하위 시스템을 설치해야 합니다. 후자가 더 안정적이므로 후자를 권장합니다.
가장 먼저 해야 할 일은 키 파일이 있는 문서 폴더로 이동하는 것입니다.
cd ~/Documents/
Windows용 리눅스 하위 시스템을 사용하는 경우 C 드라이브는 /mnt/c/에 있으며 문서 폴더로 이동해야 합니다.
cd /mnt/c/Users/사용자이름/Documents/
-i 플래그를 사용하여 키 파일을 통해 SSH로 연결할 것이라고 알려주어야 합니다. 파일의 확장자는 .pem이므로 다음과 같이 입력해야 합니다.
ssh -i keyfile.pem [email protected]
“0.0.0.0”을 IP 주소로 바꾸십시오. AWS Linux 대신 Ubuntu 서버를 만든 경우 “ubuntu” 사용자로 연결합니다.
액세스 권한이 부여되어야 하며, 명령 프롬프트가 서버 프롬프트로 변경된 것을 확인할 수 있어야 합니다.
SSLH 구성
이제 패키지 관리자를 사용하여 sslh를 설치합니다. AWS Linux의 경우 yum을 사용하고, Ubuntu의 경우 apt-get을 사용합니다. AWS Linux에서 EPEL 저장소를 추가해야 할 수도 있습니다.
sudo yum install epel-release
sudo yum install sslh
설치가 완료되면 nano를 사용하여 구성 파일을 엽니다.
nano /etc/default/sslh
RUN= 매개변수를 “yes”로 변경합니다.
마지막 DAEMON 줄 아래에 다음을 입력합니다.
DAEMON_OPTS="--user sslh --listen 0.0.0.0:25565 --anyprot your_ip_address:25565 --pidfile /var/run/sslh/sslh.pid
“your_ip_address”를 가정용 IP 주소로 바꾸십시오. IP를 모른다면 “내 IP 주소는 무엇입니까?”를 검색해 보세요.
이 구성은 sslh 프록시가 25565 포트에서 모든 네트워크 장치로부터 수신하도록 합니다. 마인크래프트 클라이언트가 다른 포트를 사용하거나 다른 게임을 플레이한다면 다른 포트 번호로 교체하십시오. 일반적으로 sslh는 다른 프로토콜을 감지하고 다른 위치로 라우팅하는 데 사용되지만, 여기서는 모든 트래픽을 감지하여 your_ip_address:25565로 전달하도록 설정할 것입니다.
Control+X를 누른 다음 Y를 눌러 파일을 저장합니다. sslh를 활성화하려면 다음 명령어를 입력합니다.
sudo systemctl enable sslh
sudo systemctl start sslh
시스템에서 systemctl을 사용할 수 없다면 서비스 명령어를 대신 사용해야 할 수도 있습니다.
이제 sslh가 실행되어야 합니다. 가정용 라우터에서 포트 포워딩이 설정되어 있고 25565 트래픽을 컴퓨터로 보내고 있는지 확인하십시오. 또한 컴퓨터에 고정 IP 주소를 할당하여 변경되지 않도록 하는 것이 좋습니다.
다른 사용자가 서버에 액세스할 수 있는지 확인하려면 프록시의 IP 주소를 온라인 상태 검사기에 입력해 봅니다. 프록시의 IP를 마인크래프트 클라이언트에 입력하고 접속을 시도해 볼 수도 있습니다. 만약 작동하지 않는다면 인스턴스의 보안 그룹에서 포트가 열려 있는지 다시 한번 확인해 보십시오.