Panduan Pasukan Lucee MY

Kuatkan admin Lucee: had IP, kata laluan dan audit

Langkah menguatkan pentadbir Lucee: sekatan IP di proksi, kata laluan yang kuat, 2FA, audit akses dan sebab akaun admin tidak boleh terdedah ke internet.

Kuatkan admin Lucee: had IP, kata laluan dan audit
0
Kandungan

Kuatkan admin Lucee: had IP, kata laluan dan audit

Panel admin Lucee ialah pintu belakang yang memberi kawalan penuh ke atas seluruh enjin, jadi menguatkannya bukan pilihan tetapi keperluan asas sebelum laman anda terbit. Tiga perkara yang paling berkesan ialah menutup laluan /lucee/admin daripada internet, menetapkan kata laluan admin yang kuat dan disimpan dengan betul, serta merekodkan setiap akses untuk audit. Artikel ini memandu ketiga-tiganya langkah demi langkah, dan menutup dengan senarai semakan selepas pemasangan.

Kenapa /lucee/admin tidak boleh terbuka ke internet

Panel Lucee Admin tinggal di bawah laluan /lucee/admin/. Dua halamannya ialah server.cfm untuk server admin dan web.cfm untuk web admin. Sesiapa yang membuka halaman itu dan melepasi kata laluan mendapat kuasa penuh: menukar datasource, memuat turun konfigurasi, memasang sambungan, menjalankan kod, dan memulakan semula enjin. Kuasa sebesar itu tidak sepatutnya diletakkan di belakang satu kata laluan yang boleh dicuba tanpa had.

Kata laluan hanyalah satu lapisan. Jika panel terbuka kepada internet, penyerang boleh mencuba kata laluan secara automatik tanpa henti, atau menunggu kelemahan dalam enjin yang belum ditampal dan mengeksploitasinya sebelum anda sempat menutup. Menutup laluan itu pada lapisan proksi menghapuskan kedua-dua risiko sekaligus, kerana permintaan luar ditolak sebelum sempat sampai ke Lucee. Panduan lengkap tentang panel ini ada dalam panduan tetapan admin Lucee.

Sekatan IP di proksi, bukan di dalam Lucee

Tempat yang betul untuk menyekat admin ialah pelayan web di hadapan, bukan di dalam Lucee sendiri. Sebabnya mudah: proksi ialah pintu pertama yang menerima permintaan, dan jika ia menolak sebelum menghantar ke enjin, penyerang tidak pernah menyentuh Lucee. Lucee juga tidak direka untuk sekatan IP berbutir pada laluan admin, dan membiarkan panel terbuka di belakang proksi bermakna enjin itu masih boleh dicapai terus jika seseorang menemui port Tomcat yang terdedah.

Dengan nginx, kunci lokasi /lucee/admin/ kepada IP tertentu dan tolak semua yang lain:

location /lucee/admin/ {
    allow 203.0.113.10;   # ganti dengan IP pejabat anda
    deny all;
    proxy_pass http://127.0.0.1:8888;
}

Dengan Traefik, guna middleware IPWhitelist dan pasangkannya pada penghala aplikasi:

http:
  middlewares:
    admin-whitelist:
      ipWhiteList:
        sourceRange:
          - "203.0.113.10"
  routers:
    app:
      rule: "Host(`contoh.my`)"
      middlewares:
        - admin-whitelist

Nota penting: deny all atau senarai putih mesti menolak semua yang tidak tersenarai, bukan sekadar membenarkan satu IP tanpa menutup yang lain. Satu kesilapan kecil di sini sama dengan membuka pintu. Butiran penuh tentang meletakkan pelayan web di hadapan Lucee dan menyalurkan kepala X-Forwarded-* ada dalam nginx atau Apache di hadapan Lucee.

Kata laluan admin yang kuat dan cara menyimpannya

Lucee tiada kata laluan lalai: kali pertama anda membuka admin, ia meminta anda menetapkan satu. Jangan tangguhkan langkah ini, kerana panel yang belum berkata laluan ialah panel terbuka kepada sesiapa yang menemui URL itu.

Kata laluan itu tidak pernah disimpan sebagai teks biasa. Lucee menyimpannya sebagai hash bergaram dalam dua kunci, iaitu hspw untuk hash dan salt untuk garam. Pada Lucee 5 ia tersimpan sebagai atribut XML dalam lucee-server.xml, manakala pada Lucee 6 dan 7 ia tersimpan sebagai kunci JSON dalam fail .CFConfig.json. Kerana ia hash dan bukan teks biasa, kata laluan yang kuat dan unik menjadi pertahanan sebenar, bukan sekadar formaliti.

Dua cara menetapkan kata laluan awal tanpa membuka panel ialah pemboleh ubah persekitaran LUCEE_ADMIN_PASSWORD, atau fail password.txt dalam direktori context yang Lucee baca dan padam selepas menghash nilainya:

# pemboleh ubah persekitaran, hanya untuk pemasangan awal
LUCEE_ADMIN_PASSWORD=KataLaluanKuatYangPanjang123!

# atau fail password.txt dalam direktori context
echo "KataLaluanKuatYangPanjang123!" > /opt/lucee/server/lucee-server/context/password.txt

Jangan simpan kata laluan dalam git atau kod sumber, kerana ia kekal dalam sejarah walaupun dipadam kemudian. Gunakan pemboleh ubah persekitaran atau pengurus rahsia dan suntik semasa mula. Jika anda terlupa atau admin terkunci, panduan reset kata laluan admin Lucee menunjukkan cara memulihkannya dengan selamat.

Pengesahan dua faktor: apa yang ada dan apa yang perlu ditambah

Admin Lucee tidak menyediakan pengesahan dua faktor (2FA) terbina dalam. Jangan keliru dengan tetapan akses di bahagian Security: tetapan itu mengawal sama ada panel terbuka, tertutup, atau hanya untuk localhost, tetapi ia bukan lapisan kedua selepas kata laluan.

Untuk 2FA sebenar, tambahkannya pada lapisan proksi atau aplikasi. Cara paling praktikal ialah meletakkan pengesahan tambahan di hadapan laluan /lucee/admin/, sama ada melalui middleware autentikasi pada Traefik atau nginx, atau melalui halaman log masuk aplikasi anda sendiri sebelum membenarkan akses ke panel.

Sekatan IP yang dibincangkan di atas sebenarnya sudah berfungsi sebagai lapisan kedua yang kuat: penyerang bukan sahaja perlu tahu kata laluan, tetapi juga mesti datang dari IP yang dibenarkan. Gabungan kata laluan kuat, sekatan IP dan 2FA menutup laluan yang paling kerap dieksploitasi.

Audit akses admin

Menguatkan admin tidak bermakna anda boleh berhenti memerhatikannya. Anda perlu tahu siapa yang membuka panel, dari IP mana, dan bila, supaya sebarang akses yang tidak dikenali dapat dikesan dengan segera.

Lucee menulis log remote client untuk permintaan yang masuk, tetapi untuk rekod yang boleh diaudit dan dicari, bangunkan log audit berstruktur seperti yang diterangkan dalam log audit dalam CFML. Rekodkan sekurang-kurangnya pelaku, tindakan, sasaran, alamat IP dan masa.

Satu perkara halus apabila Lucee berada di belakang proksi: cgi.remote_addr mengandungi IP proksi, bukan IP pelawat sebenar. IP pelawat tiba dalam header X-Forwarded-For, dan header itu hanya boleh dipercayai apabila permintaan benar-benar melalui proksi anda. Cebisan berikut membaca IP sebenar dan menyemaknya terhadap senarai dibenarkan, sebagai lapisan kedua dan alat audit, bukan pengganti sekatan proksi:

<cfscript>
// Lapisan kedua, bukan pengganti sekatan proksi. Gunakan untuk audit:
// sahkan IP sebenar yang sampai ke Lucee dan semak ia dalam senarai dibenarkan.
req = getHTTPRequestData();
hdr = req.headers;

ip = cgi.remote_addr;
if (structKeyExists(hdr, "x-forwarded-for") && len(trim(hdr["x-forwarded-for"]))) {
    ip = trim(listFirst(hdr["x-forwarded-for"], ","));
}

senaraiBenar = ["203.0.113.10", "203.0.113.11"];
if (arrayContains(senaraiBenar, ip)) {
    writeOutput("DIBENARKAN: " & ip);
} else {
    writeOutput("DITOLAK: " & ip);
}
</cfscript>

listFirst() mengambil nilai paling kiri kerana proksi menambah IP miliknya ke kanan senarai, jadi nilai paling kiri ialah pelawat asal. Sekali lagi, sekatan sebenar ialah di nginx atau Traefik; cebisan ini hanya untuk pengesahan dan audit.

Jadual lapisan pertahanan

LapisanTempatApa yang dilindungi
Sekatan IPnginx atau TraefikMenolak /lucee/admin kecuali IP dibenarkan
Kata laluan kuat.CFConfig.json (hspw dan salt)Hash bergaram, bukan teks biasa
2FAProksi atau aplikasiLapisan kedua selepas kata laluan
Audit aksesLog dan jadual auditRekod siapa, bila, dari IP mana
Matikan admin.CFConfig.json atau envadminEnabled=false dalam pengeluaran

Setiap lapisan berdiri sendiri, dan kehilangan satu tidak serta-merta membuka keseluruhan sistem.

Semakan selepas pemasangan

Selepas memasang Lucee, jalankan semakan ini sebelum laman anda terbit. Pertama, sahkan panel admin tidak boleh dicapai dari luar. Dari mesin di luar rangkaian anda, minta URL admin dan pastikan ia memulangkan 403 atau 404, bukan 200:

curl -s -o /dev/null -w '%{http_code}\n' https://contoh.my/lucee/admin/server.cfm

Jawapan 403 atau 404 bermakna proksi menolak permintaan; 200 bermakna panel masih terbuka dan mesti ditutup segera.

Kedua, sahkan kata laluan admin sudah ditetapkan dan bukan nilai lalai atau kosong. Ketiga, lumpuhkan admin sepenuhnya jika pentadbiran tidak diperlukan dalam pengeluaran, dengan LUCEE_ADMIN_ENABLED=false atau adminEnabled: false dalam .CFConfig.json. Keempat, jika anda mengautomasikan tetapan, gunakan kunci API dan bukannya kata laluan admin penuh, seperti yang diterangkan dalam Lucee Admin API.

Akhir sekali, jadikan semakan ini sebahagian daripada rutin keselamatan suku tahunan anda, supaya konfigurasi tidak reput dari semasa ke semasa. Ringkasan keselamatan CFML setiap suku menyediakan senarai semak yang boleh diulang setiap tiga bulan.

Sumber

Soalan Lazim

Kenapa /lucee/admin tidak boleh terbuka ke internet?

Kerana sesiapa yang melepasi kata laluannya mendapat kawalan penuh ke atas enjin, termasuk menukar datasource, memasang sambungan dan memulakan semula pelayan. Panel yang terbuka juga membuka ruang untuk serangan brute force dan eksploitasi kelemahan yang belum ditampal, jadi ia mesti ditutup pada lapisan proksi.

Adakah Lucee ada sekatan IP terbina dalam untuk admin?

Tidak. Lucee menyediakan tetapan akses yang menghadkan panel kepada localhost atau token URL, tetapi sekatan IP berbutir mengikut alamat pelawat dilakukan di pelayan web hadapan seperti nginx atau Traefik, di mana permintaan ditolak sebelum sampai ke enjin.

Adakah kata laluan admin Lucee disimpan sebagai teks biasa?

Tidak. Lucee menyimpannya sebagai hash bergaram dalam kunci hspw dan salt, sebagai atribut XML pada Lucee 5 atau kunci JSON dalam .CFConfig.json pada Lucee 6 dan 7.

Adakah admin Lucee menyokong pengesahan dua faktor?

Tidak secara terbina dalam. Anda menambah 2FA pada lapisan proksi atau aplikasi di hadapan laluan /lucee/admin/, dan sekatan IP yang betul boleh bertindak sebagai lapisan kedua yang kuat.

Bagaimana saya mengesahkan admin sudah tidak boleh dicapai dari luar?

Dari mesin di luar rangkaian anda, jalankan curl ke URL admin dan semak kod statusnya. Jawapan 403 atau 404 bermakna proksi menolak permintaan, manakala 200 bermakna panel masih terbuka dan perlu ditutup.

0 komen

0 komen

Log masuk untuk menjawab atau memberi komen.

Log masuk