Mengamankan API Ollama agar Tidak Terbuka ke Publik
Ollama tidak punya autentikasi bawaan. Langkah mengecek apakah port 11434 terbuka, mengikatnya ke localhost, dan membukanya aman lewat proxy atau VPN.
Jawaban singkat
API Ollama tidak punya autentikasi, jadi siapa pun yang menjangkau port 11434 bisa memakai model, menarik, atau menghapus model di servermu. Biarkan Ollama terikat ke 127.0.0.1, tutup port dengan firewall, dan buka hanya lewat reverse proxy berkunci, VPN, atau jaringan privat.
Daftar isi
- Bagaimana mengamankan Ollama langkah demi langkah?
- Langkah 1: Cek apakah port 11434 terbuka
- Langkah 2: Kembalikan ke localhost
- Langkah 3: Perhatikan Docker
- Langkah 4: Tutup port di firewall
- Langkah 5: Pilih cara akses yang aman
- Langkah 6: Batasi laju permintaan dan catat log
- Langkah 7: Perbarui Ollama secara rutin
- Cara akses mana yang paling aman?
- Pertanyaan yang sering diajukan
Apakah server Ollama-mu bisa dipanggil oleh siapa saja di internet? Kalau kamu pernah mengubah OLLAMA_HOST ke 0.0.0.0 agar bisa diakses dari laptop, atau menjalankan Ollama di Docker dengan -p 11434:11434, jawabannya mungkin ya.
Ollama tidak punya sistem login atau API key bawaan. FAQ resminya menjelaskan cara membuka Ollama ke jaringan dengan mengubah OLLAMA_HOST, tetapi tidak menyediakan kontrol akses. Artinya, siapa pun yang bisa menjangkau port 11434 bisa menjalankan model dengan CPU atau GPU milikmu, melihat daftar model, menarik model baru, bahkan menghapusnya. Panduan ini menutup celah itu langkah demi langkah.
Bagaimana mengamankan Ollama langkah demi langkah?
Langkah 1: Cek apakah port 11434 terbuka
Di server, lihat alamat yang didengarkan Ollama:
sudo ss -tlnp | grep 11434
Kalau hasilnya 127.0.0.1:11434, Ollama hanya bisa diakses dari server itu sendiri. Kalau 0.0.0.0:11434 atau *:11434, Ollama mendengarkan di semua antarmuka. Lalu uji dari komputer lain (bukan dari server):
curl http://IP_PUBLIK_SERVER:11434/api/tags
Kalau keluar daftar model dalam JSON, API kamu terbuka ke publik. Segera lanjutkan ke langkah berikutnya.
Langkah 2: Kembalikan ke localhost
Secara default Ollama terikat ke 127.0.0.1 port 11434. Kalau kamu pernah mengubahnya lewat systemd, buka pengaturannya:
sudo systemctl edit ollama.service
Hapus baris Environment="OLLAMA_HOST=0.0.0.0:11434", atau ganti menjadi:
[Service]
Environment="OLLAMA_HOST=127.0.0.1:11434"
Lalu muat ulang:
sudo systemctl daemon-reload
sudo systemctl restart ollama
Ulangi pengecekan di langkah 1 untuk memastikan.
Langkah 3: Perhatikan Docker
Docker menulis aturan firewall sendiri untuk port yang dipublikasikan, sehingga port bisa terbuka walau UFW tampak menolaknya. Dokumentasi Docker menjelaskan perilaku ini. Kalau Ollama berjalan di container, publikasikan hanya ke localhost:
docker run -d --name ollama -v ollama:/root/.ollama \
-p 127.0.0.1:11434:11434 ollama/ollama
Di docker-compose.yml, tulis "127.0.0.1:11434:11434" di bagian ports. Kalau aplikasi lain (misalnya Open WebUI) berada di jaringan Docker yang sama, mereka bisa memanggil http://ollama:11434 tanpa port dipublikasikan sama sekali. Penjelasan lengkap soal ini ada di mengamankan Docker agar port tidak bocor.
Langkah 4: Tutup port di firewall
Sebagai lapisan tambahan, tolak port 11434 dari luar. Dengan UFW di Ubuntu:
sudo ufw deny 11434/tcp
sudo ufw status
Pastikan port SSH sudah diizinkan sebelum mengaktifkan UFW, agar kamu tidak terkunci dari server.
Langkah 5: Pilih cara akses yang aman
Kalau Ollama perlu dipakai dari luar server, ada dua pola yang aman.
Jaringan privat atau VPN. Hubungkan laptop atau server aplikasi ke server Ollama lewat WireGuard atau layanan mesh seperti Tailscale. Ollama cukup didengarkan di alamat jaringan privat itu, bukan di IP publik. Ini pilihan paling sederhana untuk pemakaian internal. Perbandingan alatnya ada di Tailscale vs Headscale vs NetBird.
Reverse proxy berkunci. Kalau aplikasi di internet perlu memanggil Ollama, taruh Nginx di depannya dengan HTTPS dan pemeriksaan kunci. Contoh konfigurasi di /etc/nginx/conf.d/ollama.conf:
map $http_authorization $ollama_ok {
default 0;
"Bearer GANTI_KUNCI_PANJANG_ACAK" 1;
}
server {
listen 443 ssl;
server_name ai.contoh.com;
ssl_certificate /etc/letsencrypt/live/ai.contoh.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/ai.contoh.com/privkey.pem;
location ~ ^/api/(pull|push|delete|create|copy|blobs) {
return 403;
}
location / {
if ($ollama_ok = 0) { return 401; }
proxy_pass http://127.0.0.1:11434;
proxy_set_header Host localhost:11434;
proxy_buffering off;
proxy_read_timeout 300s;
}
}
Blok pertama menolak endpoint pengelolaan model, sehingga pemegang kunci pun hanya bisa memakai model, bukan menarik atau menghapusnya. Header Host localhost:11434 mengikuti contoh di FAQ Ollama. proxy_buffering off membuat jawaban streaming langsung diteruskan. Uji dengan sudo nginx -t sebelum sudo systemctl reload nginx.
Aplikasi pemanggil cukup mengirim header Authorization: Bearer GANTI_KUNCI_PANJANG_ACAK. Banyak SDK yang kompatibel OpenAI bisa diarahkan ke https://ai.contoh.com/v1 dengan kunci itu.
Langkah 6: Batasi laju permintaan dan catat log
Model AI memakan sumber daya besar per permintaan. Tanpa batas, satu klien yang bocor kuncinya bisa membuat server sibuk terus. Tambahkan rate limiting di Nginx (caranya di rate limiting Nginx) dan pantau log akses secara berkala.
Langkah 7: Perbarui Ollama secara rutin
Ollama pernah punya celah serius. Contohnya CVE-2024-37032, celah path traversal pada versi sebelum 0.1.34 yang bisa dieksploitasi lewat endpoint penarikan model dan paling berbahaya pada instalasi yang API-nya terbuka ke publik. Memperbarui Ollama dan menutup port adalah dua lapis perlindungan yang saling melengkapi. Di Linux, menjalankan ulang skrip instalasi resmi akan memperbarui ke versi terbaru.
Cara akses mana yang paling aman?
| Kebutuhan | Cara akses | Tingkat risiko |
|---|---|---|
| Hanya aplikasi di server yang sama | 127.0.0.1:11434 | Rendah |
| Container lain di host yang sama | Jaringan Docker internal, tanpa publish port | Rendah |
| Tim internal dari laptop | VPN atau jaringan mesh | Rendah |
| Aplikasi di internet | Reverse proxy HTTPS dengan kunci, endpoint dibatasi, rate limit | Sedang, tergantung pengelolaan kunci |
| Port 11434 dibuka langsung | Tidak disarankan | Tinggi |
Pertanyaan yang sering diajukan
Apakah mengganti port 11434 ke angka lain sudah cukup aman?
Tidak. Pemindai di internet memeriksa banyak port, bukan hanya port default. Mengganti port hanya mengurangi sedikit kebisingan, bukan pengganti autentikasi.
Apakah OLLAMA_ORIGINS bisa dipakai untuk membatasi akses?
Tidak untuk keamanan server. OLLAMA_ORIGINS mengatur asal yang diizinkan untuk permintaan dari browser (CORS). Klien seperti curl atau skrip tidak terikat aturan itu.
Bagaimana kalau Ollama dipakai lewat Open WebUI?
Open WebUI punya login sendiri, jadi cukup Open WebUI yang dibuka lewat HTTPS. Ollama tetap di localhost atau jaringan Docker internal dan hanya dipanggil oleh Open WebUI.
Apakah basic auth Nginx bisa dipakai sebagai pengganti kunci Bearer?
Bisa, terutama untuk akses manusia lewat browser. Untuk aplikasi yang memakai SDK OpenAI, kunci Bearer biasanya lebih mudah karena SDK sudah mengirimkannya otomatis.
Bagaimana tahu server pernah disalahgunakan?
Periksa log Ollama dengan journalctl -u ollama, cek daftar model dengan ollama list untuk model yang tidak kamu kenal, dan perhatikan lonjakan pemakaian CPU atau GPU di jam yang tidak wajar.
Checklist singkat:
ss -tlnpmenunjukkan Ollama di127.0.0.1:11434.- Container Ollama tidak mempublikasikan port ke
0.0.0.0. - Firewall menolak port 11434 dari luar.
- Akses luar hanya lewat VPN atau proxy HTTPS berkunci.
- Endpoint pull, push, delete, dan create diblokir di proxy.
- Ollama diperbarui rutin.


