Pendahuluan
Di era serangan siber yang makin kompleks, model keamanan tradisional berbasis perimeter sudah tidak cukup. Solusi modern adalah Zero Trust Network Access (ZTNA), di mana tidak ada yang dipercaya secara default, bahkan dari dalam jaringan.
Artikel ini membahas cara membuat solusi ZTNA ringan berbasis Linux, menggunakan WireGuard untuk enkripsi dan nftables untuk kontrol akses berbasis identitas dan IP-binding.
Konsep Arsitektur
-
WireGuard VPN sebagai tiket masuk terenkripsi dan identitas pengguna.
-
nftables sebagai kontrol siapa boleh akses ke resource mana.
-
Binding IP dengan public key WireGuard.
Cocok untuk:
-
Admin mengakses server internal (Debian, MikroTik, OLT, dll)
-
Akses teknisi ke router klien atau sistem monitoring
-
Tanpa solusi ZTNA komersial
Langkah 1: Instal WireGuard di Linux
sudo apt update && sudo apt install wireguard -y
Buat folder config dan key:
mkdir -p /etc/wireguard && cd /etc/wireguard
umask 077
wg genkey | tee server.key | wg pubkey > server.pub
Contoh /etc/wireguard/wg0.conf:
[Interface]
PrivateKey = <ISI-DARI-server.key>
Address = 10.20.0.1/24
ListenPort = 51820
SaveConfig = true
# Client 1: Teknisi A
[Peer]
PublicKey = <PUBKEY-KLIEN-A>
AllowedIPs = 10.20.0.10/32
Langkah 2: Tambah Klien WireGuard (Teknisi A)
Di sisi klien:
wg genkey | tee client.key | wg pubkey > client.pub
File konfigurasi klien:
[Interface]
PrivateKey = <ISI-DARI-client.key>
Address = 10.20.0.10/32
DNS = 1.1.1.1
[Peer]
PublicKey = <PUBKEY-SERVER>
Endpoint = your.server.ip:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25
Langkah 3: Konfigurasi nftables untuk Zero Trust
Instalasi:
sudo apt install nftables -y
Contoh /etc/nftables.conf:
#!/usr/sbin/nft -f
flush ruleset
table inet filter {
chain input {
type filter hook input priority 0; policy drop;
iif "lo" accept
ct state established,related accept
# allow WireGuard
tcp dport 51820 accept
udp dport 51820 accept
# hanya izinkan IP tertentu dari WireGuard
ip saddr 10.20.0.10 accept # Teknisi A
}
chain forward {
type filter hook forward priority 0; policy drop;
ip saddr 10.20.0.10 ip daddr 192.168.1.0/24 accept # akses subnet tertentu
}
}
Aktifkan:
sudo systemctl enable nftables
sudo systemctl start nftables
Tips ZTNA Lanjutan
-
Gunakan 1 key per orang → identitas unik.
-
Pantau koneksi: wg show
-
Kombinasikan dengan fail2ban
-
Aktifkan logging di nftables
-
Tambahkan notifikasi Telegram untuk koneksi mencurigakan
Bonus: Skrip Auto-Tambahkan Peer
#!/bin/bash
NAME=$1
IP=$2
wg genkey | tee ${NAME}.key | wg pubkey > ${NAME}.pub
echo "[Peer]
PublicKey = $(cat ${NAME}.pub)
AllowedIPs = ${IP}/32" >> /etc/wireguard/wg0.conf
wg addconf wg0 <(wg-quick strip wg0)
Penutup
ZTNA tidak harus mahal dan kompleks. Dengan WireGuard dan nftables, kamu bisa menciptakan sistem otentikasi berbasis identitas dan IP secara ringan, cepat, dan aman.
Zero Trust Network (ZTNA) Ringan dengan WireGuard + nftables di Linux
Pendahuluan
Di era serangan siber yang makin kompleks, model keamanan tradisional berbasis perimeter sudah tidak cukup. Solusi modern adalah Zero Trust Network Access (ZTNA), di mana tidak ada yang dipercaya secara default, bahkan dari dalam jaringan.
Artikel ini membahas cara membuat solusi ZTNA ringan berbasis Linux, menggunakan WireGuard untuk enkripsi dan nftables untuk kontrol akses berbasis identitas dan IP-binding.
Konsep Arsitektur
-
WireGuard VPN sebagai tiket masuk terenkripsi dan identitas pengguna.
-
nftables sebagai kontrol siapa boleh akses ke resource mana.
-
Binding IP dengan public key WireGuard.
Cocok untuk:
-
Admin mengakses server internal (Debian, MikroTik, OLT, dll)
-
Akses teknisi ke router klien atau sistem monitoring
-
Tanpa solusi ZTNA komersial
Langkah 1: Instal WireGuard di Linux
sudo apt update && sudo apt install wireguard -y
Buat folder config dan key:
mkdir -p /etc/wireguard && cd /etc/wireguard
umask 077
wg genkey | tee server.key | wg pubkey > server.pub
Contoh /etc/wireguard/wg0.conf:
[Interface]
PrivateKey = <ISI-DARI-server.key>
Address = 10.20.0.1/24
ListenPort = 51820
SaveConfig = true
# Client 1: Teknisi A
[Peer]
PublicKey = <PUBKEY-KLIEN-A>
AllowedIPs = 10.20.0.10/32
Langkah 2: Tambah Klien WireGuard (Teknisi A)
Di sisi klien:
wg genkey | tee client.key | wg pubkey > client.pub
File konfigurasi klien:
[Interface]
PrivateKey = <ISI-DARI-client.key>
Address = 10.20.0.10/32
DNS = 1.1.1.1
[Peer]
PublicKey = <PUBKEY-SERVER>
Endpoint = your.server.ip:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25
Langkah 3: Konfigurasi nftables untuk Zero Trust
Instalasi:
sudo apt install nftables -y
Contoh /etc/nftables.conf:
#!/usr/sbin/nft -f
flush ruleset
table inet filter {
chain input {
type filter hook input priority 0; policy drop;
iif "lo" accept
ct state established,related accept
# allow WireGuard
tcp dport 51820 accept
udp dport 51820 accept
# hanya izinkan IP tertentu dari WireGuard
ip saddr 10.20.0.10 accept # Teknisi A
}
chain forward {
type filter hook forward priority 0; policy drop;
ip saddr 10.20.0.10 ip daddr 192.168.1.0/24 accept # akses subnet tertentu
}
}
Aktifkan:
sudo systemctl enable nftables
sudo systemctl start nftables
Tips ZTNA Lanjutan
-
Gunakan 1 key per orang → identitas unik.
-
Pantau koneksi: wg show
-
Kombinasikan dengan fail2ban
-
Aktifkan logging di nftables
-
Tambahkan notifikasi Telegram untuk koneksi mencurigakan
Bonus: Skrip Auto-Tambahkan Peer
#!/bin/bash
NAME=$1
IP=$2
wg genkey | tee ${NAME}.key | wg pubkey > ${NAME}.pub
echo "[Peer]
PublicKey = $(cat ${NAME}.pub)
AllowedIPs = ${IP}/32" >> /etc/wireguard/wg0.conf
wg addconf wg0 <(wg-quick strip wg0)
Penutup
ZTNA tidak harus mahal dan kompleks. Dengan WireGuard dan nftables, kamu bisa menciptakan sistem otentikasi berbasis identitas dan IP secara ringan, cepat, dan aman.