Cara Pasang dan Lindungi Webmin di Ubuntu 24.04
Ketahui cara memasang Webmin pada Ubuntu 24.04 dengan selamat. Panduan ini merangkumi konfigurasi Fail2ban pada port 10000, penggunaan sijil Let's Encrypt, serta 2FA.
Apa yang anda sedang bina
Webmin ialah panel kawalan web yang menyediakan antara muka pelayar untuk keseluruhan pelayan Linux, pengguna, pakej, cron job, firewall, Apache, BIND, cakera, dan seratus modul lain, yang boleh dicapai melalui HTTPS pada port 10000. Pemasangannya hanya memerlukan tiga arahan dan mengambil masa kira-kira satu minit. Sebab panduan ini menghabiskan sebahagian besar kandungannya pada bahagian kedua adalah kerana Webmin log masuk sebagai root dan boleh melakukan apa sahaja yang boleh dilakukan oleh root. Webmin yang terbuka luas atau tidak disahkan bukan sekadar "risiko untuk diurus"; ia adalah kompromi pelayan sepenuhnya dengan halaman log masuk di hadapannya. Jadi, pasang ia dalam sepuluh minit, kemudian habiskan baki sejam untuk memastikan hanya anda yang boleh mencapainya.
Prasyarat dan satu amaran jujur
Sebuah VPS KVM Ubuntu 24.04 baharu dengan akses root atau pengguna sudo. Webmin berasaskan Perl dan ringan; 1 GB RAM sudah mencukupi dan ia beroperasi dengan penggunaan kurang daripada satu perempat gigabait semasa melahu. Ia mendengar pada TCP 10000 melalui pelayan webnya sendiri (miniserv.pl), bukan Apache atau nginx, jadi tiada perisian lain perlu dipasang terlebih dahulu.
Dua perkara perlu diputuskan sebelum anda bermula. Pertama, akaun yang anda gunakan untuk log masuk: Webmin mengesahkan identiti melalui akaun Unix menggunakan PAM, jadi anda log masuk sebagai root atau pengguna dalam kumpulan sudo menggunakan kata laluan Unix akaun tersebut. Imej pelayan awan biasanya hanya menggunakan kunci SSH tanpa kata laluan ditetapkan pada pengguna lalai, dan Webmin tidak boleh melog masuk akaun tanpa kata laluan. Tetapkan kata laluan dengan sudo passwd youruser terlebih dahulu, jika tidak, log masuk akan gagal tidak kira apa yang anda taip.
Kedua, dan ini adalah amarannya: jangan sekadar membuka port 10000 kepada internet dan membiarkannya begitu sahaja. Tentukan sekarang sama ada anda akan mengakses Webmin melalui terowong SSH (disyorkan, tiada apa yang terdedah) atau mengehadkannya kepada IP anda sendiri. Keputusan tunggal itu akan menentukan setiap langkah di bawah, jadi baca kedua-dua pilihan sebelum anda menyentuh firewall.
Memasang Webmin daripada repositori rasmi
Webmin menerbitkan repositori apt yang ditandatangani. Skrip persediaan menambah repositori tersebut serta kunci tandatangan GPG-nya supaya pelaksanaan apt upgrade pada masa hadapan akan menarik Webmin seperti pakej lain. Anda akan menerima kemas kini yang disahkan dan bukannya fail .deb yang dimuat turun yang tidak akan menampal dirinya sendiri.
curl -o webmin-setup-repo.sh https://raw.githubusercontent.com/webmin/webmin/master/webmin-setup-repo.sh
sudo sh webmin-setup-repo.shSkrip tersebut akan memaparkan tindakan yang bakal dilakukan dan meminta Setup repository? (y/N), jawab dengan y. Apabila selesai, pasang pakej tersebut. Flag --install-recommends akan menarik dependensi modul Perl dan SSL yang biasa supaya modul individu tidak gagal kemudian hari akibat ralat pustaka yang hilang.
sudo apt-get install --install-recommends webminWebmin pernah menamakan semula skrip ini sebelum ini, panduan lama merujuk kepada setup-repos.sh, jadi jika URL asal memberikan ralat 404, ambil skrip satu baris semasa terus daripada webmin.com/download dan bukannya menetapkan nama fail. Pemasangan yang betul berakhir dengan baris seperti Webmin install complete. You can now login to https://your-host:10000/ as root. Servis tersebut diaktifkan dan sedang berjalan, konfigurasi disimpan di bawah /etc/webmin, permintaan direkodkan ke /var/webmin/miniserv.log, dan log masuk yang gagal dihantar ke syslog, atau pada Ubuntu 24.04, ke systemd journal.
Sahkan bahawa ia benar-benar aktif dan sedang mendengar sebelum anda membuka pelayar web:
sudo systemctl status webmin --no-pager
sudo ss -tlnp | grep 10000Anda mahukan status active (running) dan satu baris yang menunjukkan miniserv.pl terikat pada 0.0.0.0:10000, alamat tersebut akan berubah kepada 127.0.0.1:10000 sebaik sahaja anda menggunakan laluan terowong di bawah. Jika ss tidak menunjukkan apa-apa pada port 10000, Webmin tidak bermula; baca journalctl -u webmin -n 50 sebelum meneruskan langkah seterusnya.
Log masuk pertama dan amaran sijil
Halakan pelayar anda ke https://YOUR_SERVER_IP:10000. Dua perkara akan berlaku pada pelayan yang baru dipasang.
Jika ufw aktif (imej pelayan Ubuntu secara lalai membiarkannya tidak aktif, namun banyak penyedia mengaktifkannya terlebih dahulu), halaman tersebut tidak akan dimuatkan sama sekali, yang akan dibincangkan dalam bahagian mod kegagalan di bawah. Jika port tersebut terbuka, pelayar anda akan memaparkan sekatan skrin penuh: "Your connection is not private" dengan kod NET::ERR_CERT_AUTHORITY_INVALID dalam Chrome, atau SEC_ERROR_UNKNOWN_ISSUER / "Warning: Potential Security Risk Ahead" dalam Firefox. Ini adalah perkara biasa dan bukan tanda pencerobohan. Webmin menjana sijil yang ditandatangani sendiri (self-signed) semasa pemasangan (/etc/webmin/miniserv.pem), dan kerana tiada pihak berkuasa sijil (certificate authority) yang menjaminnya, pelayar enggan mempercayainya secara automatik. Sambungan tersebut masih disulitkan; ia cuma tidak disahkan oleh pihak ketiga. Klik untuk meneruskan (Advanced, kemudian Proceed) buat masa ini, kita akan menggantikan sijil ini dengan betul nanti.
Log masuk dengan root atau pengguna sudo anda berserta kata laluan Unix, dan anda akan tiba di papan pemuka System Information. Satu kesilapan biasa di sini ialah menaip http:// dan bukannya https://. miniserv menjawab permintaan HTTP biasa pada port tersebut dengan teks tepat "This web server is running in SSL mode. Try the URL https://...", penyelesaiannya adalah dengan menukar http kepada https pada bar alamat.
Keputusan keselamatan: bagaimana anda akan mencapai Webmin?
Kini bahagian yang penting. Panel yang setara dengan root tidak sepatutnya berada di internet terbuka dan melayan percubaan log masuk daripada setiap pengimbas di seluruh dunia. Anda mempunyai dua pilihan yang wajar, mengikut keutamaan. Setiap permukaan pentadbiran yang dihoskan sendiri akan berdepan dengan persoalan yang sama, itulah sebabnya sama ada Vaultwarden selamat bergantung pada titik akhir pentadbirannya dan fail sandarannya dan bukannya penyukuannya.
Terowong SSH dalam Pilihan B adalah yang lebih baik, kerana ia tidak mendedahkan apa-apa pun. Senarai benarkan IP dalam Pilihan A boleh diterima jika alamat anda adalah statik. Tidak melakukan kedua-duanya adalah kesilapan yang cuba dielakkan oleh panduan ini. Jika anda lebih suka mencapai Webmin melalui rangkaian peribadi berbanding kedua-duanya, letakkan pelayan di sebalik VPN WireGuard yang dihoskan sendiri dan ikat Webmin pada alamat terowong dan bukannya alamat awam.
Pilihan A: Hadkan Webmin kepada IP anda
Di dalam panel, buka Webmin, kemudian Webmin Configuration, seterusnya IP Access Control. Pilih "Only allow from listed addresses" dan masukkan IP awam anda, yang boleh ditemui dengan menjalankan curl ifconfig.me pada komputer riba anda. Simpan. Webmin menulis tetapan ini ke baris allow= dalam /etc/webmin/miniserv.conf dan memulakan semula dirinya sendiri.
Perangkapnya: jika IP rumah anda bersifat dinamik dan berubah, atau anda tersalah taip alamat tersebut, anda akan terkunci keluar. Pelayar kemudian akan memaparkan "Access denied for <your IP>" dan tiada borang log masuk, serta tiada laluan web untuk kembali masuk. Anda perlu membaikinya daripada konsol pelayan melalui SSH atau VNC pembekal anda:
sudo nano /etc/webmin/miniserv.conf
# find the line that begins allow=
# correct your IP, or delete the whole line to allow all again
sudo systemctl restart webminMemadam baris allow= akan memulihkan akses terbuka sepenuhnya, jadi lakukan perkara itu hanya untuk pemulihan, kemudian tetapkan nilai yang betul dengan segera.
Pilihan B: ikat pada localhost dan buat tunnel melalui SSH (disyorkan)
Lebih baik daripada sebarang senarai benarkan (allowlist) adalah dengan tidak mendengar pada antaramuka awam sama sekali. Arahkan miniserv untuk hanya mengikat pada loopback, kemudian capai ia melalui tunnel SSH terenkripsi yang sudah anda percayai.
Sunting /etc/webmin/miniserv.conf dan tambah, atau ubah, satu baris:
bind=127.0.0.1Mulakan semula dengan sudo systemctl restart webmin. Webmin kini tidak boleh dicapai dari internet, imbasan port 10000 tidak menemui apa-apa, dan semakan ss dari awal tadi kini menunjukkan ia terikat pada 127.0.0.1:10000. Dari komputer riba anda, buka satu tunnel:
ssh -L 10000:localhost:10000 youruser@YOUR_SERVER_IPBiarkan sesi tersebut terbuka dan layari https://localhost:10000. Trafik tersebut bergerak di dalam SSH, yang sudah disahkan oleh kunci anda dan dienkripsi, jadi anda boleh menerima sijil self-signed di sini dengan selamat; lapisan SSH yang melakukan perlindungan sebenar. Tutup sesi SSH dan Webmin akan hilang. Tiada apa yang perlu dimasukkan ke dalam senarai benarkan, tiada apa yang terdedah, tiada servis tambahan untuk diperkukuhkan.
Jika anda menetapkan bind=127.0.0.1 dan terlupa tentang tunnel tersebut, akses jauh akan terhenti serta-merta; itu adalah fungsi yang sedang berjalan, bukan satu kerosakan. Pulihkan dengan cara yang sama seperti Pilihan A: dari konsol, buang baris bind atau tetapkan bind=0.0.0.0, kemudian mulakan semula. Ini adalah tabiat tunneling yang sama yang anda akan gunakan untuk mencapai kotak pembangunan jauh yang menjalankan Claude Code dalam tmux, satu sesi SSH, semuanya peribadi, tiada apa-apa tambahan yang mendengar pada antaramuka awam.
Gantikan sijil yang ditandatangani sendiri dengan sijil sebenar
Jika anda mendedahkan Webmin pada nama hos di bawah Pilihan A, hilangkan amaran pelayar dengan sijil Let's Encrypt yang sebenar. Anda memerlukan nama DNS, contohnya panel.example.com, dengan rekod A yang menghala ke pelayan tersebut, dan sesuatu yang menjawab cabaran HTTP port 80 semasa pengesahan.
Webmin mempunyai fungsi ini terbina dalam: Webmin, kemudian Webmin Configuration, kemudian SSL Encryption, kemudian tab Let's Encrypt. Masukkan nama hos, halakan "website root directory" ke laluan yang dihidangkan pada port 80 untuk domain tersebut, dan buat permintaan. Webmin akan mendapatkan sijil, mengemas kini baris certfile= dan keyfile= dalam miniserv.conf untuk anda, serta memperbaharuinya secara automatik sebelum tamat tempoh. Muat semula halaman dan ikon mangga akan kelihatan bersih.
Satu-satunya masalah yang nyata: pelayan Webmin sendiri berjalan pada port 10000, bukan 80, jadi cabaran http-01 memerlukan pelayan web sebenar, sama ada Apache atau nginx, yang menjawab untuk panel.example.com pada port 80, atau pengesahan berasaskan DNS. Pada kotak yang hanya menjalankan Webmin tanpa apa-apa pada port 80, permintaan akan gagal dengan ralat pengesahan sehingga anda memberikan cara untuk Let's Encrypt mencapai fail cabaran tersebut. Mekanisme, rekod DNS, cabaran port 80, dan pembaharuan adalah sama seperti mengeluarkan sijil untuk mana-mana laman web. Jika anda mahukan latar belakang tersebut, panduan sijil TLS Let's Encrypt dengan Certbot dan nginx menerangkan aliran pengesahan dan tetapan DNS secara terperinci. Jika anda menggunakan laluan terowong SSH, anda boleh melangkau bahagian ini sepenuhnya: sijil yang ditandatangani sendiri sudah memadai di sebalik SSH, dan sijil sebenar yang dikeluarkan untuk panel.example.com hanya akan menghasilkan amaran ketidakpadanan nama apabila anda melawati https://localhost:10000.
Aktifkan pengesahan dua faktor
Kata laluan sahaja merupakan perlindungan yang lemah untuk panel root, jadi tambahkan faktor kedua. Buka Webmin, kemudian Webmin Configuration, seterusnya Two-Factor Authentication. Pilih penyedia Google Authenticator; ini adalah TOTP standard, jadi ia berfungsi dengan Authy, 1Password, atau mana-mana aplikasi pengesah, kemudian simpan. Webmin akan memasang modul Perl kecil yang diperlukan (Authen::OATH berserta penjana kod QR) dan mendayakan ciri tersebut; langkah ini sahaja belum melindungi mana-mana akaun.
Setiap akaun kemudian perlu mendaftarkan peranti masing-masing. Dengan 2FA didayakan, buka Webmin, kemudian Webmin Users, pilih akaun tersebut, pilih Enable Two-Factor For User, dan Webmin akan memaparkan kod QR; imbas kod tersebut dengan aplikasi dan masukkan satu kod yang dijana untuk pengesahan. Mulai saat itu, log masuk akan meminta token enam digit selepas kata laluan. Lakukan pendaftaran sebelum anda log keluar; jika 2FA diwajibkan tetapi akaun anda belum mengimbas kod, anda masih boleh membatalkan keperluan tersebut daripada konsol, namun adalah lebih mudah untuk mendaftar terlebih dahulu.
Tambah Fail2ban untuk menyekat log masuk brute-force
Walaupun titik tamat log masuk dihadkan, percubaan gagal yang berulang perlu dikenakan tindakan. Webmin melaporkan log masuk gagal ke syslog dalam bentuk webmin[12345]: Invalid login as root from 10.0.0.9, atau Non-existent login as ... bagi nama pengguna yang bukan akaun Unix. Pada Ubuntu 24.04, baris tersebut masuk ke dalam systemd journal kerana imej standard tidak mempunyai /var/log/auth.log. Fail2ban menyediakan penapis webmin-auth standard yang memadankan tepat kedua-dua baris tersebut, dan jail di bawah menetapkan backend = systemd secara automatik, jadi ia tidak memerlukan regex tersuai atau laluan log.
Cipta /etc/fail2ban/jail.d/webmin.local:
[webmin-auth]
enabled = true
port = 10000
filter = webmin-auth
backend = systemd
maxretry = 4
bantime = 1hMuat semula dengan sudo systemctl restart fail2ban, kemudian sahkan jail tersebut aktif:
sudo fail2ban-client status webmin-authAnda sepatutnya melihat jail tersebut disenaraikan dengan pembilang sekatan bermula pada sifar (pada backend journal, tiada baris File list:). Untuk menguji sambungan dari hujung ke hujung, sengajakan kegagalan log masuk beberapa kali dari rangkaian lain, kemudian jalankan semula arahan status dan perhatikan Currently banned meningkat. Jika ia tidak meningkat, pastikan anda tidak menguji dari alamat yang berada dalam ignoreip Fail2ban, dan jalankan journalctl SYSLOG_IDENTIFIER=webmin pada pelayan untuk mengesahkan baris Invalid login benar-benar ditulis. Jika Fail2ban belum dipasang pada mesin ini, panduan Fail2ban pada Ubuntu 24.04 untuk SSH merangkumi pemasangan dan jail SSH yang perlu anda jalankan bersama-sama dengan jail ini.
Hadkan akses setiap pengguna Webmin
Tidak semua pengguna panel memerlukan akses root ke atas segala-galanya. Di bawah Webmin, kemudian Webmin Users, cipta log masuk Webmin tambahan dan berikan setiap pengguna hanya modul yang diperlukan, contohnya pengendali sandaran yang hanya melihat modul cron dan filesystem. Menyunting pengguna akan memaparkan senarai semak setiap modul; menyahpilih satu modul akan membuangnya daripada menu pengguna tersebut dan menyekat URL yang berkaitan. Ini merupakan pertahanan mendalam (defence in depth): walaupun sesi Webmin berkeistimewaan rendah dicuri, ia tidak boleh menulis semula /etc/shadow apabila modul Users tiada dalam senarainya.
Memastikan Webmin sentiasa dikemas kini
Oleh sebab anda memasang daripada repositori apt, sudo apt update && sudo apt upgrade akan menarik keluaran Webmin baharu bersama-sama dengan pakej sistem yang lain. Lakukan patching dengan segera kerana panel kawalan merupakan sasaran utama. Webmin juga boleh mengemas kini dirinya sendiri melalui Webmin, kemudian Webmin Configuration, seterusnya Upgrade Webmin, namun kaedah apt adalah lebih kemas pada Ubuntu kerana ia mengekalkan konsistensi versi dengan pengurusan pakej anda yang lain. Jangan anggap perkara ini sebagai pilihan: beberapa CVE Webmin yang lepas melibatkan pepijat pelaksanaan kod jauh (remote-code-execution), dan satu-satunya perbezaan antara sistem yang "telah ditampal" dengan sistem yang "telah diceroboh" ialah kepantasan pentadbir menjalankan naik taraf tersebut.
Mod kegagalan, berserta rentetan yang akan anda lihat
"Your connection is not private" / NET::ERR_CERT_AUTHORITY_INVALID. Dipaparkan pada muatan pertama. Punca: sijil yang ditandatangani sendiri (self-signed) yang dijana oleh Webmin semasa pemasangan tidak mempunyai pengeluar yang dipercayai. Ini bukan serangan; saluran tersebut disulitkan, cuma tidak disahkan oleh pihak ketiga. Pembaikan: teruskan melalui amaran tersebut buat masa ini, kemudian keluarkan sijil Let's Encrypt yang sah, atau terimanya secara kekal jika anda mencapai Webmin melalui terowong SSH.
"This web server is running in SSL mode. Try the URL https://..." Anda menaip http://server:10000. miniserv hanya menggunakan TLS pada port tersebut dan memberitahu anda perkara itu dalam teks biasa. Pembaikan: tukar http kepada https pada bar alamat.
Halaman tamat masa, ERR_CONNECTION_TIMED_OUT / "This site can't be reached". Permintaan tidak sampai ke Webmin. Pada Ubuntu, ini hampir selalu disebabkan oleh ufw yang menggugurkan port 10000. Sahkan dengan sudo ufw status; jika 10000 tidak disenaraikan, sama ada bukanya dengan sudo ufw allow 10000/tcp atau, lebih baik, biarkan ia tertutup dan gunakan terowong SSH daripada Pilihan B. Perhatikan perbezaan: timeout bermaksud firewall menggugurkan paket secara senyap, manakala ERR_CONNECTION_REFUSED sebaliknya bermaksud port boleh dicapai tetapi Webmin tidak berjalan, semak sudo systemctl status webmin.
"Access denied for <your IP>." Anda menetapkan IP Access Control di bawah Pilihan A dan alamat semasa anda tiada dalam senarai kebenaran, IP dinamik yang telah berubah, atau kesilapan menaip. Tiada laluan pelayar untuk kembali masuk. Pembaikan daripada konsol: edit baris allow= dalam /etc/webmin/miniserv.conf, betulkan atau padamkannya, dan jalankan sudo systemctl restart webmin.
"Login failed. Please try again." dengan kelayakan yang anda tahu betul. Akaun tersebut tidak mempunyai kata laluan Unix, yang merupakan standard pada imej awan yang hanya menggunakan kunci (key-only). Webmin mengesahkan melalui PAM terhadap kata laluan Unix, dan kata laluan itu tidak wujud untuk pengguna tersebut. Pembaikan: jalankan sudo passwd youruser pada pelayan, kemudian log masuk. Jika /var/webmin/miniserv.log menunjukkan Non-existent login as ..., anda sedang menaip nama pengguna yang bukan akaun Unix sama sekali.
Untuk lebih daripada beberapa pelayan, automasi lebih berskala berbanding panel kawalan pada setiap kotak: playbook Ansible pertama anda adalah tempat bermulanya perkara tersebut.
FAQ
Adakah selamat untuk mendedahkan Webmin kepada internet awam?
Anggap Webmin yang menghadap internet sebagai shell root dengan halaman log masuk, kerana itulah fungsi sebenarnya. Ia hanya cukup selamat jika menggunakan lapisan perlindungan: sijil sebenar, pengesahan dua faktor, Fail2ban, dan sama ada senarai putih IP yang ketat atau, lebih baik lagi, tiada pendedahan awam langsung. Persediaan paling rendah risiko adalah dengan mengikat Webmin kepada 127.0.0.1 dan mencapainya melalui terowong SSH, supaya port 10000 tidak menjawab sesiapa pun di internet terbuka.
Bagaimanakah cara untuk menghilangkan amaran sijil Webmin?
Amaran (NET::ERR_CERT_AUTHORITY_INVALID) muncul kerana Webmin dibekalkan dengan sijil yang ditandatangani sendiri (self-signed). Terbitkan sijil sebenar daripada Webmin, Webmin Configuration, SSL Encryption, Let's Encrypt, menggunakan nama DNS yang menghala ke pelayan dengan sesuatu yang melayani cabaran port-80 untuk pengesahan. Jika anda hanya mencapai Webmin melalui terowong SSH ke localhost, amaran tersebut tidak berbahaya, SSH sudah menyulitkan dan mengesahkan sambungan, dan anda boleh menerima sijil yang ditandatangani sendiri itu dengan selamat.
Bagaimanakah cara untuk mengehadkan Webmin kepada alamat IP saya sahaja?
Pergi ke Webmin, Webmin Configuration, IP Access Control, pilih "Only allow from listed addresses", dan masukkan IP awam anda daripada curl ifconfig.me. Webmin menyimpan ini dalam baris allow= pada /etc/webmin/miniserv.conf. Berhati-hati dengan IP rumah yang dinamik: jika ia berubah, anda akan disekat dan perlu membaiki baris allow= daripada konsol pelayan, jadi alamat statik atau kaedah terowong SSH adalah lebih boleh dipercayai dalam praktiknya.
Mengapakah log masuk saya gagal walaupun kata laluan betul?
Webmin mengesahkan melalui PAM terhadap kata laluan Unix anda, dan imej awan biasanya hanya menggunakan kunci tanpa kata laluan ditetapkan pada akaun lalai, jadi tiada apa-apa untuk dipadankan oleh PAM dan log masuk ditolak. Jalankan sudo passwd youruser pada pelayan untuk menetapkan satu, kemudian log masuk. Baris Non-existent login as ... dalam /var/webmin/miniserv.log pula bermaksud nama pengguna itu sendiri bukan akaun Unix yang sebenar.
Apakah kelebihan Webmin berbanding SSH biasa?
Webmin ialah lapisan kebolehterokaan dan kemudahan. Ia sangat berguna untuk menyemak fail log, mengurus pengguna dan cron, menyunting peraturan firewall, serta melihat status cakera dan servis tanpa perlu menghafal setiap arahan, yang sesuai untuk pentadbir sekali-sekala atau pasukan dengan kemahiran bercampur. SSH biasa lebih pantas, boleh diskripkan, dan mendedahkan permukaan serangan yang jauh lebih kecil untuk kerja rutin. Ramai pentadbir menjalankan kedua-duanya: SSH untuk kegunaan harian, dan Webmin diikat kepada localhost di sebalik terowong untuk kerja-kerja klik-dan-pilih sekali-sekala. Jika soalan sebenar anda adalah panel mana yang lebih baik berbanding panel lawan shell, adalah berbaloi untuk menimbang Cockpit berbanding Webmin terlebih dahulu, memandangkan kedua-duanya berbeza dari segi jumlah sistem yang boleh diubah dan cara setiap satunya mengesahkan anda.