Website hanya bisa diakses melalui VPN dengan Docker dan traefik.io

Muhamad Septian
4 min readJul 16, 2022

Hai semuanya, apa kabar? Semoga baik-baik saja yah. Ini artikel tutorial pertama saya sebagai karyawan Anteraja 😁 cukup senang rasanya bisa menjadi salah satu karyawan dalam startup terbaik Indonesia.

VPN? Apa itu? Apa VPN selalu berhubungan dengan hal yang negatif? Eits tenang aja, disini kita akan membahas salah satu hal positif dari VPN yaitu mengamankan website dengan VPN.

Mengamankan gimana tuh? Jadi kita akan hanya bisa mengakses website dengan VPN yang sudah kita tentukan. Jadi hanya orang yang mempunyai koneksi VPN tersebut yang bisa mengakses website kita. Kalo di startup gunanya untuk mengakses website internal dan website yang sedang dalam tahap development.

Foto: VPNPROS

Sebelum kita lanjut, ada beberapa hal yang perlu disiapkan nih. Seperti:

  • Server VPN (disini saya menggunakan OS Ubuntu 22)
  • Server untuk Docker (disini saya menggunakan OS Ubuntu 22)
  • OpenVpn Client
  • Teh 🍵

Install dan Konfigurasi VPN Server

Pertama-tama kita harus menginstall VPN Server pada server kita. Dikarenakan saya menggunakan VPS dengan OS Ubuntu 22 maka saya menggunakan sedikit bantuan dari Github untuk install openvpn server secara otomatis.

  1. Login kedalam server yang akan kamu jadikan VPN Server
~# ssh vipien@123.123.123.123

2. Install VPN server dengan bantuan script

~# wget https://git.io/vpn -O openvpn-install.sh
~# bash openvpn-install.sh

3. Lanjutkan install dengan default value (tinggal tekan enter saja)

4. Setelah selesai maka tinggal kamu download kedalam komputer kamu file ovpn nya yang terletak di /root/client.ovpn

Install dan konfigurasi docker serta traefik

Setelah kamu mendapatkan file client.ovpn maka langkah selanjutnya kamu menginstall docker dan traefik pada server kamu.

  1. Login kedalam server yang akan kamu install docker dan traefik
~# ssh docker@456.456.456.456

2. Install Docker

~# export USE_HOSTNAME=server.example.com
~# echo $USE_HOSTNAME > /etc/hostname
~# hostname -F /etc/hostname
~# apt-get update
~# apt-get upgrade -y
~# curl -fsSL get.docker.com -o get-docker.sh
~# rm get-docker.sh

3. Install Traefik.io

~# docker network create --driver=overlay traefik-public
~# export NODE_ID=$(docker info -f '{{.Swarm.NodeID}}')
~# docker node update --label-add traefik-public.traefik-public-certificates=true $NODE_ID
~# export EMAIL=admin@example.com
~# export DOMAIN=traefik.example.com
~# export USERNAME=admin
~# export PASSWORD=changethis
~# export HASHED_PASSWORD=$(openssl passwd -apr1 $PASSWORD)
~# curl -L dockerswarm.rocks/traefik.yml -o traefik.yml
~# docker stack deploy -c traefik.yml traefik

Jika sudah, silahkan kamu cek apakah traefik sudah terintall dengan benar atau tidak dengan membuka url traefik.example.com dan login menggunakan username dan password yang sudah kamu buat. Jika sudah terinstall maka kamu akan masuk ke halaman dashboard traefik seperti berikut.

Foto: dockerswarm.rocks

Konfigurasi whitelist IP VPN pada traefik

Setelah traefik berjalan dengan sempurna maka kita tinggal konfigurasi website hanya bisa diakses menggunakan VPN.

  1. Buat yml untuk docker stacknya dan simpan dengan nama app.yml
version: '3.3'

services:
app:
image: traefik/whoami:latest
networks:
- traefik-public
deploy:
placement:
constraints:
- node.role != manager
labels:
- traefik.enable=true
- traefik.docker.network=traefik-public
- traefik.constraint-label=traefik-public
- traefik.http.routers.app-http.rule=Host(`whoami.example.com`)
- traefik.http.routers.app-http.entrypoints=http
- traefik.http.routers.app-http.middlewares=https-redirect,app-ipwhitelist
- traefik.http.routers.app-https.rule=Host(`whoami.example.com`)
- traefik.http.routers.app-https.entrypoints=https
- traefik.http.routers.app-https.tls=true
- traefik.http.routers.app-https.tls.certresolver=le
- traefik.http.services.app.loadbalancer.server.port=80
- traefik.http.routers.app-https.middlewares=https-redirect,app-ipwhitelist
- traefik.http.middlewares.app-ipwhitelist.ipwhitelist.sourcerange=123.123.123.123 <- IP VPN
networks:
traefik-public:
external: true

2. Deploy app.yml kedalam docker

~# docker stack deploy -c app.yml app

Testing VPN dan koneksi terhadap website

  1. Silahkan kamu buka website yang sudah kamu deploy kedalam docker sebelumnya. Berikut adalah tampilan jika kamu belum terkoneksi dengan VPN

2. Import client.ovpn kedalam aplikasi ovpn client

3. Nyalakan koneksi VPN kamu

4. Test apakah IP sudah berubah sesuai dengan IP VPN kamu

5. Jika sudah sesuai maka langkah terakhir silahkan kamu buka website yang sudah kamu deploy kedalam docker sebelumnya. Berikut adalah tampilan jika kamu membuka webiste dengan sudah terhubung dengan koneksi VPN

--

--