익명성, 보안 등을 위해 한 때 VPN 네트워크 환경에서 서버를 구축하여 운용할 수 있는 방법이 없는지 곰곰이 생각했었다.
익명성을 보장해주는 웹 호스팅 또는 서버 호스팅을 사용하면 되는 것 아니냐 할 수 있는데 리눅스 환경을 제외하고 사실 자신의 컴퓨터만큼 편리하게 작업할 수 있는 곳은 많이 없다..
(Windows Server을 지원해주는 호스팅 업체를 사용해도 되겠지만... 비싸다.)
본론으로 들어가자면 VPN 환경이나 공공 네트워크를 이용하는 경우 웹 서버를 구축하여 외부망에 제공해주기 위해선 NAT 프로토콜로 인한 포트 포워딩을 해줘야 한다.
하지만 다들 알다시피 타 서비스 VPN이나, 공공 와이파이 같은 경우 라우터에 접속하는 것도, 라우터에 접속하여 로그인하는 것도 사실 어려운 문제이다.
이런 문제를 해결하기 위해선 로컬망에서 데이터를 대신 전달해줄 수 있는 중계서버망이 하나 필요한데 이제 그것이 리버스 프록시로 돌아가는 Cloudflare 또는 ngrok 서비스가 중계역할을 해준다.
근데 여기서 의문점이 하나 들 수 있다.
익명성을 위한 거라면 중계서버(Cloudflare, ngrok)를 경유하여 통신하는 것 자체가 익명성을 위한 것 아니냐라고 할 수 있다.
하지만 여기선 확실하게 보안과 익명성이 보장되냐가 문제인것인데, 실제로 Cloudflare을 적용하여 불법적인 사이트로 운영되고 있는 사이트가 굉장히 많다.
그만큼 리버스 프록시 서비스로 서버를 운용하기에 굉장히 편리하고 매력적인 솔루션들을 많이 갖고 있다.
하지만 조금만 검색해보면 Cloudflare가 수사에 협조하여 불법 사이트들에 대한 정보들을 준다는 기사들이 한 두 개 정도 보이는데 이것이 확실한 건 아니지만 이러한 의혹 자체가 생기는 것은 결코 익명성으로 안전함을 100% 보장받지는 못한다는 것이다.
그럼 ngrok 서비스는 괜찮나?
ngrok 서비스는 실제로 옛날에 해커들이 모의 해킹할 때 많이 사용됐었던 서비스이다.
하지만 악용되는 것을 막으려고 했는지 생성된 url 도메인에 자신이 사용하고 있는 공인 아이피 주소를 표기하여 url을 생성해준다.
결론은 익명성을 완벽히 보장해줄 수 있는 2차적인 무엇인가가 필요한데 그것이 VPN 인 것이다.
VPN 도 결국 서버 로그가 남기 때문에 위험하지 않냐라고 할 순 있지만 Express VPN과 같이 서버를 RAM으로 돌려서 로그기록조차 남지 않는 서비스를 이용하면 된다. 그 외에도 익명성이 보장되는 유료 VPN들이 많다.
결국 Cloudflare나, ngrok은 단지 포트 포워딩을 하지 않고 외부망에서 돌리기 위한 매개체일 뿐이다.
(ngrok을 통한 방법은 기존 방법과 별 다를 바 없기 때문에 올리지 않겠다.)
Cloudflare 통한 서버 연결
가장 먼저 웹 서버를 구축해줘야 한다.
xampp를 이용하든 amp를 이용하든 서버 먼저 켜준다.
기본적인 적용 방법은 아래와 비슷하다.
*이것을 적용하려면 마찬가지로 자신이 사용하고 있는 도메인 네임서버에 Cloudflare 네임서버를 등록시켜야 한다.
(자세한 방법은 구글링 하면 바로 나올 것이다.)
다른 것은 위는 리눅스에서 작업하는 것이고 지금부터 하는 것은 윈도우 환경에서 작업하는 것이다.
윈도우 환경에선 이 파일을 사용하면 된다.
cmd나 쉘을 이용하여 위처럼 cloudflared.exe를 실행할 수 있다.
처음 사용한다면 'cloudflared tunnel login' 명령어를 이용해서 자신의 클라우드플레어 계정에 액세스 해야 한다.
자세한 방법은 위 링크에서 확인하면 된다.
cloudflared tunnel create (사용할 터널 이름)
그리고 이런 식으로 사용할 터널 이름을 생성해준다.
cloudflared tunnel create nextcloud
Tunnel credentials written to /home/janne/.cloudflared/01f0928b-6a11-4254-854c-4173b5b74f2e.json. cloudflared chose this file based on where your origin certificate was found. Keep this file secret. To revoke these credentials, delete the tunnel.
Created tunnel nextcloud with id 01f0928b-6a11-4254-854c-4173b5b74f2e
그럼 이렇게 해당 터널의 아이디가 생성될 것인데 이제 이 아이디를 같이 첨부해둔 config.yml 에다가 적어 넣으면 된다.
(위 내용은 리눅스에서 실행한 것이다. 윈도우에서도 경로 형식만 다르고 나머진 똑같다.)
tunnel: 4d039b14-b643-44fb-b0af-304cc63444c8
credentials-file: C:\Users\jaymon\.cloudflared\4d039b14-b643-44fb-b0af-304cc63444c8.json
ingress:
- hostname: vpner.foolblack.com
service: http://172.20.158.8
- service: http_status:404
config.yml 파일 안에 위 내용을 똑같이 복붙 하고 자신이 생성했던 터널의 아이디와 경로 부분, 앞으로 설정할 hostname, vpn으로 할당된 내부 아이피로 바꾸면 된다.
*바꿔야 하는 부분
- tunnel : 자신이 생성한 터널 아이디
- credentials-file : 자신이 생성한 터널 아이디 .json 경로
- hostname : 클라우드 플레어 대시보드에서 생성할 도메인 이름
- service : vpn을 킨 상태에서 cmd로 ipconfig 조회해보면 ipv4 부분에 vpn 네트워크로부터 할당받은 내부 아이피가 있는데 그걸 적으면 된다. (밑에 http_status:404는 가만히 냅두면 된다)
그럼 이제 클라우드 플레어 대시보드에서 도메인을 생성해야 한다.
자신이 사용하고자 하는 도메인을 CNAME 레코드로 추가하여 '대상' 부분에 '<your-tunnel-id>.cfargotunnel.com'
이런 형식으로 기입하면 된다.
예) 자신의 터널 아이디가 0e3rwer3rs-4234-fwf-wer3라면 '0e3rwer3rs-4234-fwf-wer3.cfargotunnel.com' 이런식으로 입력
(이렇게 추가한 도메인을 저기 config.yml 'hostname' 부분에 적어주면 된다.)
cloudflared tunnel --config [config.yml 경로] run [터널 NAME]
이제 위 명령어를 통해 터널을 활성화 시켜줄 수 있다.
터널이 제대로 활성화됐는지 안됐는지는 클라우드 플레어의 Zero Trust 대시보드를 통해 확인할 수 있다.
초반 Zero Trust 등록은 위 링크에서 확인 할 수 있다. (매우 간단)
그리고 Access - Tunnels 부분에서 활성화와 비활성화된 터널들을 확인할 수 있다.
정상적으로 외부망에서 접속된 모습
이러한 방식으로 어디서든 서버를 구축하여 외부망에 노출시킬 수 있다.
'서버 > Cloudflare' 카테고리의 다른 글
[Cloudflare]클라우드 플레어 명령어 list (0) | 2022.03.01 |
---|---|
[Cloudflare]SSH, VNC, Minecraft 등을 Cloudflare을 통해 액세스 하는법 (0) | 2022.02.28 |
[Cloudflare]NextCloud에 Cloudflare 적용하기!! (OwnCloud도 가능) (0) | 2022.02.09 |
댓글