Matrix Protocol with Synapse and Element
Membangun platform komunikasi terenkripsi dan terdesentralisasi menggunakan protokol Matrix, menghadirkan server Synapse untuk infrastruktur yang aman dan klien Element sebagai antarmuka pengguna.
Daftar Isi
- Pendahuluan
- Arsitektur
- Cara Kerja Synapse
- Prasyarat Sistem
- Panduan Instalasi dan Konfigurasi Synapse Matrix Server dengan TLS
- Konfigurasi dan Penggunaan Element
- Mengaktifkan Pendaftaran Pengguna di Synapse
- Troubleshooting
- Keamanan dan Pertimbangan untuk Produksi
- Pranala Menarik
- Pranala Luar
Pendahuluan
Matrix adalah protokol komunikasi terbuka dan terdesentralisasi yang dirancang dengan fokus kuat pada privasi dan keamanan komunikasi real-time. Protokol ini memungkinkan interoperabilitas yang aman antara berbagai layanan pesan instan sambil mempertahankan kontrol data pengguna. Synapse adalah implementasi referensi server Homeserver Matrix yang ditulis dalam Python, menyediakan infrastruktur komunikasi yang terenkripsi secara end-to-end encryption (E2EE). Element adalah client web populer yang memberikan antarmuka pengguna aman untuk berinteraksi dengan jaringan Matrix, dengan implementasi kriptografi yang kuat untuk melindungi percakapan pengguna.
Arsitektur
Arsitektur Matrix terdiri dari tiga komponen utama: Client, Homeserver, dan Federation. Setiap pengguna (atau perangkat) berinteraksi dengan jaringan melalui sebuah Client yang terhubung ke sebuah Homeserver miliknya. Homeserver tersebut kemudian bertanggung jawab untuk menyinkronkan data pengguna dan, yang terpenting, berkomunikasi dengan Homeserver lain dalam jaringan yang terdesentralisasi. Model ini memastikan bahwa tidak ada satu pun otoritas pusat yang mengontrol seluruh jaringan, sambil tetap mempertahankan konsistensi data di seluruh Client.
Alur Komunikasi
Alur komunikasi antara dua pengguna (Client A dan Client B) pada Homeserver yang berbeda, seperti yang diilustrasikan dalam diagram berikut:
1
2
3
4
5
6
7
8
9
10
11
{ Matrix client A } { Matrix client B }
^ | ^ |
| events | Client-Server API | events |
| V | V
+------------------+ +------------------+
| |---------( HTTPS )--------->| |
| homeserver | | homeserver |
| |<--------( HTTPS )----------| |
+------------------+ Server-Server API +------------------+
History Synchronisation
(Federation)
- Pengiriman Events: Client A mengirim sebuah events (misalnya, pesan teks) ke Homeserver-nya melalui API Client-Server (HTTPS).
- Rute Federasi: Homeserver A, setelah menerima dan memvalidasi events dari Client A, mengidentifikasi bahwa events tersebut ditujukan untuk sebuah room yang juga melibatkan pengguna di Homeserver B.
- Komunikasi Server-ke-Server: Homeserver A kemudian meneruskan events tersebut secara langsung ke Homeserver B menggunakan API Server-Server melalui koneksi HTTPS yang aman.
- Distribusi ke Client: Homeserver B menerima events tersebut, memvalidasinya, dan kemudian mendistribusikannya ke semua Client yang terkait dengan Pengguna B (dalam hal ini, Client B) melalui koneksi Client-Server-nya.
Model Kepercayaan
Matrix mengadopsi model kepercayaan terdistribusi berbasis prinsip Trust-on-First-Use (TOFU) yang memungkinkan pengguna untuk memverifikasi perangkat melalui mekanisme pertukaran kode QR atau perbandingan emoji. Sistem ini memfasilitasi pembatalan verifikasi apabila suatu perangkat diduga mengalami kompromi keamanan, sekaligus memberikan perlindungan terhadap serangan man-in-the-middle melalui implementasi kriptografi asimetris. Selain itu, sistem secara proaktif menghasilkan peringatan kepada pengguna ketika terjadi perubahan pada kunci enkripsi, memungkinkan deteksi dini terhadap upaya penyadapan atau pencurian identitas.
Cara Kerja Synapse
Sebagai komponen inti infrastruktur Matrix, Synapse menerapkan serangkaian mekanisme keamanan multidimensi yang mencakup manajemen kriptografi, autentikasi, proteksi data, dan keamanan federasi. Dalam hal manajemen kriptografi, Synapse mengimplementasikan protokol Olm dan Megolm untuk enkripsi end-to-end, menyimpan kunci enkripsi dengan proteksi akses ketat melalui mekanisme isolasi proses, dan menerapkan prinsip forward secrecy dimana setiap pesan menggunakan kunci enkripsi unik yang mengalami rotasi secara berkala.
Pada lapisan autentikasi dan otorisasi, Synapse mendukung Multi-factor authentication untuk memperkuat proses verifikasi identitas pengguna, menerapkan manajemen token akses dengan masa berlaku terbatas dan mekanisme revocation yang responsif, serta mengimplementasikan Role-based access control (RBAC) yang membatasi hak akses berdasarkan hierarki peran pengguna yang terdefinisi dengan jelas.
Untuk aspek proteksi data, Synapse menerapkan isolasi data melalui segmentasi penyimpanan dimana data pengguna ditempatkan dalam database terenkripsi, menjalankan pembersihan data otomatis yang menghapus data media tidak diperlukan berdasarkan kebijakan retensi yang ditetapkan, dan menyediakan mekanisme backup terenkripsi dengan kunci yang dikelola terpisah dari sistem utama.
Pada level federasi, Synapse menjamin keamanan komunikasi antarserver melalui verifikasi sertifikat TLS mutual authentication untuk semua koneksi federasi, menerapkan penandatanganan digital (signed events) pada setiap events untuk menjamin integritas dan non-repudiation, serta mengintegrasikan mekanisme anti-spam yang mencakup deteksi pola anomalitas dan rate limiting berbasis reputasi server.
Prasyarat Sistem
- Sistem Operasi Linux (Debian/Ubuntu recommended), macOS, atau Windows dengan WSL2
- Hak akses root/sudo untuk instalasi paket dan konfigurasi sistem
- Docker yang terinstal dan berjalan dengan baik
1 2
# Verifikasi instalasi Docker docker --version
Panduan Instalasi dan Konfigurasi Synapse Matrix Server dengan TLS
Generate Konfigurasi Awal
Langkah pertama dalam instalasi Synapse adalah menghasilkan file konfigurasi dasar. Docker volume digunakan untuk persistensi data:
1
2
3
4
5
docker run -it --rm \
--mount type=volume,src=synapse-data,dst=/data \
-e SYNAPSE_SERVER_NAME=192.168.100.185 \
-e SYNAPSE_REPORT_STATS=no \
matrixdotorg/synapse:latest generate
Penjelasan parameter:
--mount type=volume,src=synapse-data,dst=/data
: Membuat volume Docker bernamasynapse-data
dan mount ke path/data
dalam container-e SYNAPSE_SERVER_NAME=192.168.100.185
: Menetapkan nama server ke alamat IP lokal-e SYNAPSE_REPORT_STATS=no
: Menonaktifkan pelaporan statistik untuk privasimatrixdotorg/synapse:latest
: Image Docker resmi Synapse dari Docker Hub
Menjalankan Container Synapse Awal
Setelah konfigurasi dasar dihasilkan, jalankan container untuk pertama kali:
1
2
3
4
docker run -d --name synapse \
--mount type=volume,src=synapse-data,dst=/data \
-p 8008:8008 \
matrixdotorg/synapse:latest
Perintah ini menjalankan container Synapse dalam mode detached, memetakan port 8008 host ke port 8008 container.
Generate Sertifikat TLS untuk IP Lokal
Untuk mengaktifkan TLS pada lingkungan pengembangan dengan IP lokal, buat sertifikat self-signed:
Buat direktori untuk menyimpan sertifikat
1
mkdir -p ~/synapse-ssl/certs && cd ~/synapse-ssl/certs
Generate private key (RSA 2048-bit)
1
openssl genrsa -out 192.168.100.185.key 2048
Generate Certificate Signing Request (CSR)
1
2
openssl req -new -key 192.168.100.185.key -out 192.168.100.185.csr \
-subj "/CN=192.168.100.185"
Generate self-signed certificate dengan SAN (Subject Alternative Name)
1
2
3
openssl x509 -req -days 365 -in 192.168.100.185.csr \
-signkey 192.168.100.185.key -out 192.168.100.185.crt \
-extfile <(echo "subjectAltName=IP:192.168.100.185")
Sertifikat self-signed tidak akan dipercaya oleh klien secara default dan hanya cocok untuk pengembangan. Untuk produksi, gunakan sertifikat dari otoritas sertifikat terpercaya.
Modifikasi Konfigurasi Synapse
Akses shell container Synapse untuk mengedit file konfigurasi:
1
docker exec -it synapse bash
Di dalam container, instal editor teks dan edit file konfigurasi:
1
cd /data && apt update && apt install -y nano
1
nano homeserver.yaml
Temukan atau tambahkan bagian-bagian berikut dalam file homeserver.yaml
:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
server_name: "192.168.100.185"
public_baseurl: "https://192.168.100.185:8008/"
listeners:
- port: 8008
tls: true
type: http
x_forwarded: true
resources:
- names: [client, federation]
compress: false
# Bind ke semua interface termasuk IP lokal
bind_addresses: ['0.0.0.0']
# Konfigurasi TLS
tls_certificate_path: "/data/192.168.100.185.crt"
tls_private_key_path: "/data/192.168.100.185.key"
# Nonaktifkan verifikasi sertifikat untuk federation (hanya untuk testing)
federation_verify_certificates: false
# Tetap bisa menerima koneksi HTTP dari localhost (opsional, untuk testing)
use_insecure_ssl_client_just_for_testing_do_not_use: true
Simpan perubahan dan keluar dari editor (untuk nano
: Ctrl+X
> Y
> Enter
).
Keluar dari sesi container dengan perintah:
1
exit
Menyalin Sertifikat dan Menjalankan Ulang Synapse
Hentikan dan hapus container Synapse yang ada:
1
docker stop synapse && docker rm synapse
Atur izin yang sesuai untuk file kunci privat:
1
chmod 644 ~/synapse-ssl/certs/192.168.100.185.key && chmod 644 ~/synapse-ssl/certs/192.168.100.185.crt
Salin sertifikat ke volume Docker:
1
2
docker run --rm -v synapse-data:/data -v ~/synapse-ssl/certs:/certs busybox \
sh -c "cp /certs/192.168.100.185.crt /certs/192.168.100.185.key /data/ && chmod 644 /data/192.168.100.185.*"
Jalankan container Synapse dengan konfigurasi yang diperbarui:
1
2
3
4
5
6
docker run -d --name synapse \
--mount type=volume,src=synapse-data,dst=/data \
-p 8008:8008 \
-p 8448:8448 \
--user 991:991 \
matrixdotorg/synapse:latest
Penjelasan parameter:
-p 8448:8448
: Memetakan port federation Matrix--user 991:991
: Menjalankan Synapse dengan user ID yang aman (bukan root)
Verifikasi
Untuk memverifikasi bahwa Synapse berjalan dengan benar:
- Akses https://192.168.100.185:8008
- Seharusnya menampilkan pesan default Synapse
- Periksa log container:
1
docker logs synapse
- Log harus menunjukkan proses startup yang berhasil tanpa error kritis
- Periksa status container:
1
docker ps -f name=synapse
- Container harus dalam status “Up”
1 2
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7fbfd3b85216 matrixdotorg/synapse:latest "/start.py" 15 minutes ago Up 8 seconds (health: starting) 0.0.0.0:8008->8008/tcp, [::]:8008->8008/tcp, 0.0.0.0:8448->8448/tcp, [::]:8448->8448/tcp, 8009/tcp synapse
Setelah container berjalan, verifikasi bahwa SSL berfungsi dengan benar:
Test koneksi SSL dengan curl
1
curl -vk https://192.168.100.185:8008
Konfigurasi dan Penggunaan Element
Opsi 1: Menggunakan Element Web (Rekomendasi)
- Buka https://app.element.io di browser
- Klik “Create Account”
- Klik “Edit” dan Masukkan URL homeserver: https://192.168.100.185:8008
- Masukkan kredensial dan klik “Register”
Pesan kesalahan
"Registration has been disabled on this homeserver"
muncul ketika pengguna mencoba mendaftar melalui klien Matrix (seperti Element) yang terhubung ke instans Synapse dengan pendaftaran dinonaktifkan. Konfigurasi ini diatur dalam filehomeserver.yaml
melalui parameterenable_registration
(Lihat Modifikasi Konfigurasi Synapse).
Opsi 2: Menggunakan Element Desktop
- Download dan install Element Desktop dari https://element.io/download
- Masukkan URL homeserver: https://192.168.100.185:8008
Mengaktifkan Pendaftaran Pengguna di Synapse
Modifikasi Konfigurasi Synapse
Langkah 1: Akses Container Synapse
Jika Synapse dijalankan dalam container Docker, gunakan perintah:
1
docker exec -it synapse bash
Perintah exec
digunakan untuk menjalankan perintah di dalam container yang sedang berjalan. Opsi -it
memberikan sesi interaktif dengan terminal.
Langkah 2: Edit File Konfigurasi
Edit file konfigurasi utama Synapse:
1
nano /data/homeserver.yaml
Gunakan editor teks seperti
vim
ataunano
sesuai preferensi. Path/data/
adalah volume Docker yang umum digunakan untuk menyimpan data persisten.
Langkah 3: Modifikasi Parameter Pendaftaran
Temukan atau tambahkan parameter berikut dalam homeserver.yaml
:
1
2
3
4
5
6
7
8
9
10
11
# Mengaktifkan pendaftaran pengguna melalui antarmuka web
enable_registration: true
# Izinkan pendaftaran tanpa verifikasi email (untuk lingkungan testing)
enable_registration_without_verification: true
# Opsional: Batasan pendaftaran (contoh: wajib memberikan email)
# registrations_require_3pid: ['email']
# Opsional: Mengharuskan token untuk pendaftaran (jika menggunakan pendaftaran undangan)
# registration_requires_token: false
Penjelasan Parameter:
enable_registration
: Mengizinkan pengguna mendaftar secara mandiri.enable_registration_without_verification
: Melewati verifikasi email (tidak disarankan untuk produksi).registrations_require_3pid
: Memverifikasi identitas melalui email atau nomor telepon.registration_requires_token
: Membatasi pendaftaran hanya dengan token undangan.
Langkah 4: Simpan dan Keluar
Simpan perubahan dan keluar dari editor (untuk nano
: Ctrl+X
> Y
> Enter
).
Langkah 5: Keluar dari Container
Keluar dari sesi container dengan perintah:
1
exit
Langkah 6: Restart Container
Restart container untuk menerapkan perubahan:
1
docker restart synapse
Restart diperlukan untuk memuat ulang konfigurasi. Pastikan tidak ada interupsi layanan kritis selama proses restart.
Alternatif: Membuat Pengguna melalui Command-Line
Jika pendaftaran publik tidak diinginkan, gunakan skrip register_new_matrix_user
yang disertakan dalam Synapse:
Membuat Akun Admin
1
2
3
4
docker exec -it synapse register_new_matrix_user \
-c /data/homeserver.yaml \
http://localhost:8008 \
-u admin -p passwordadmin -a
Opsi -a
memberikan hak administrator kepada pengguna.
Membuat Akun Pengguna Biasa
1
2
3
4
docker exec -it synapse register_new_matrix_user \
-c /data/homeserver.yaml \
http://localhost:8008 \
-u user1 -p passworduser
Verifikasi Pendaftaran
Setelah mengaktifkan pendaftaran, uji melalui klien Matrix.
Untuk instans dengan sertifikat self-signed, browser mungkin memperingatkan risiko keamanan. Pastikan konfigurasi SSL sudah benar untuk produksi.
Troubleshooting
Masalah Umum dan Solusi
Koneksi TLS Gagal
Jika klien tidak dapat terhubung karena masalah sertifikat, verifikasi dengan openssl:
1
openssl s_client -connect 192.168.100.185:8008 -showcerts
- Untuk pengembangan, tambahkan pengecualian sertifikat di browser
- Untuk testing, gunakan flag
--insecure
pada curl
1curl --insecure https://192.168.100.185:8008
Port Sudah Digunakan
Error "Address already in use"
menunjukkan konflik port, periksa proses yang menggunakan port 8008 atau 8448:
1
sudo netstat -tulpn | grep :8008
- Hentikan proses yang menggunakan port tersebut
- Atau ubah port yang digunakan Synapse dalam konfigurasi
Container Tidak Berjalan
Periksa log container:
1
docker logs synapse
Jalankan container dalam mode interaktif untuk debugging:
1
2
3
4
docker run -it --rm --name synapse-debug \
--mount type=volume,src=synapse-data,dst=/data \
-p 8008:8008 \
matrixdotorg/synapse:latest bash
Masalah Federation
Federation Matrix memerlukan konfigurasi DNS yang tepat untuk produksi. Untuk testing dengan IP lokal:
1
2
3
# Dalam homeserver.yaml
federation_domain_whitelist:
- example.com # Domain yang diizinkan untuk federation
Keamanan dan Pertimbangan untuk Produksi
Konfigurasi Keamanan
Hardening TLS
Untuk lingkungan produksi, selalu gunakan sertifikat dari otoritas terpercaya:
1
2
3
4
5
6
# Konfigurasi TLS yang aman
tls_certificate_path: "/path/to/fullchain.pem"
tls_private_key_path: "/path/to/privkey.pem"
# Hanya gunakan cipher yang aman
tls_cipher_suite: "ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384"
Manajemen Pengguna
Nonaktifkan pendaftaran publik di lingkungan produksi:
1
2
enable_registration: false
registration_requires_token: true
Firewall dan Jaringan
Batasi akses ke port Synapse:
1
2
3
ufw allow 8008/tcp # Client access
ufw allow 8448/tcp # Federation
ufw deny 8008/udp # Blok UDP yang tidak diperlukan
Backup dan Pemulihan
Backup Rutin
Backup volume Docker:
1
2
docker run --rm -v synapse-data:/source -v /backup:/backup busybox \
tar czf /backup/synapse-backup-$(date +%Y%m%d).tar.gz -C /source ./
Backup Konfigurasi Database
Synapse menggunakan SQLite secara default (untuk instalasi kecil): Backup database:
1
sqlite3 /data/homeserver.db ".backup '/backup/homeserver.db.bak'"
Monitoring dan Logging
Aktifkan Logging Terstruktur
Dalam homeserver.yaml
:
1
2
3
4
5
6
7
log_config: "/data/log.config"
# File log.config
version: 1
formatters:
precise:
format: '%(asctime)s - %(name)s - %(lineno)d - %(levelname)s - %(request)s - %(message)s'
Monitoring Kesehatan
Health check endpoint:
1
curl -f http://localhost:8008/health
Pertimbangan Kinerja
Konfigurasi Database
Untuk instalasi medium hingga besar, pertimbangkan migrasi ke PostgreSQL:
1
2
3
4
5
6
7
8
9
database:
name: psycopg2
args:
user: synapse_user
password: secure_password
host: localhost
database: synapse
cp_min: 5
cp_max: 10
Optimisasi Memori
Alokasi memori yang tepat:
1
2
rc_messages_per_second: 0.2
rc_message_burst_count: 10.0
Update dan Pemeliharaan
Strategi Update
- Selalu backup sebelum update
- Test update di lingkungan staging
- Ikuti release notes resmi
- Monitor performa pasca-update
Otomasi Update
1
2
3
4
5
# Script update sederhana
docker pull matrixdotorg/synapse:latest
docker stop synapse
docker rm synapse
# Jalankan container dengan konfigurasi baru
Considerations for Scale
Worker Configuration
Untuk instalasi besar, implementasikan workers:
1
2
3
4
5
6
7
instance_map:
main:
host: localhost
port: 8034
federation_sender:
host: localhost
port: 8035
Load Balancing
Gunakan reverse proxy seperti nginx atau Caddy. Contoh konfigurasi nginx:
1
2
3
4
5
6
7
8
9
10
11
12
upstream synapse {
server localhost:8008;
}
server {
listen 443 ssl;
server_name matrix.example.com;
location / {
proxy_pass http://synapse;
}
}