Lewati ke isi

AI & Otomasi

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.

Terbit 6 menit baca

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
  1. Bagaimana mengamankan Ollama langkah demi langkah?
  2. Langkah 1: Cek apakah port 11434 terbuka
  3. Langkah 2: Kembalikan ke localhost
  4. Langkah 3: Perhatikan Docker
  5. Langkah 4: Tutup port di firewall
  6. Langkah 5: Pilih cara akses yang aman
  7. Langkah 6: Batasi laju permintaan dan catat log
  8. Langkah 7: Perbarui Ollama secara rutin
  9. Cara akses mana yang paling aman?
  10. 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?

KebutuhanCara aksesTingkat risiko
Hanya aplikasi di server yang sama127.0.0.1:11434Rendah
Container lain di host yang samaJaringan Docker internal, tanpa publish portRendah
Tim internal dari laptopVPN atau jaringan meshRendah
Aplikasi di internetReverse proxy HTTPS dengan kunci, endpoint dibatasi, rate limitSedang, tergantung pengelolaan kunci
Port 11434 dibuka langsungTidak disarankanTinggi

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 -tlnp menunjukkan Ollama di 127.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.

Sumber & referensi

Baca juga