Panduan Hardening Linux Server: 15 Langkah Mengamankan Ubuntu dan Debian
Server Linux yang baru selesai diinstal belum tentu siap langsung digunakan untuk lingkungan produksi. Meskipun Ubuntu dan Debian memiliki mekanisme keamanan yang cukup baik, konfigurasi default masih dapat meninggalkan sejumlah permukaan serangan yang sebenarnya tidak diperlukan.
Di sinilah Linux server hardening menjadi penting.
Hardening adalah proses memperkuat konfigurasi sistem agar risiko akses tidak sah, eksploitasi layanan, pencurian kredensial, malware, hingga penyalahgunaan hak akses dapat dikurangi.
Hardening bukan berarti membuat server “tidak bisa ditembus”. Tujuan yang lebih realistis adalah mengurangi attack surface, membatasi hak akses, memperkuat autentikasi, mematikan layanan yang tidak diperlukan, serta meningkatkan kemampuan mendeteksi dan merespons insiden.
Panduan ini membahas 15 langkah praktis yang dapat diterapkan pada Ubuntu Server dan Debian Server, baik untuk server VPS, server sekolah, server aplikasi, server database, maupun infrastruktur jaringan.
Catatan: contoh perintah dalam artikel perlu disesuaikan dengan versi Linux, aplikasi, kebutuhan layanan, dan arsitektur server Anda. Jangan menjalankan perintah keamanan secara membabi buta pada server produksi.
Apa Itu Linux Server Hardening?
Linux server hardening adalah serangkaian tindakan untuk meningkatkan keamanan sistem operasi dan layanan yang berjalan di dalamnya.
Bayangkan sebuah server sebagai gedung dengan banyak pintu.
Setiap port, service, akun, aplikasi, dan mekanisme autentikasi dapat dianalogikan sebagai pintu atau jalur masuk.
Semakin banyak pintu yang terbuka tanpa alasan, semakin besar pula area yang harus diamankan.
Hardening berusaha menjawab beberapa pertanyaan penting:
- Apakah semua service memang diperlukan?
- Siapa yang boleh login?
- Dari mana administrator boleh mengakses server?
- Apakah login menggunakan password masih diperlukan?
- Apakah root dapat login langsung?
- Apakah firewall sudah membatasi koneksi?
- Apakah aktivitas login tercatat?
- Apakah sistem mendapatkan security update?
- Apakah terdapat mekanisme untuk mendeteksi percobaan login berulang?
- Apakah user memiliki privilege sesuai kebutuhannya?
Dengan pendekatan tersebut, hardening tidak hanya berfokus pada satu tool seperti firewall atau Fail2ban, tetapi merupakan proses keamanan berlapis.
15 Langkah Hardening Linux Server
1. Update Sistem dan Security Patch
Langkah pertama adalah memastikan sistem menggunakan paket dan security update terbaru.
Pada Ubuntu atau Debian:
sudo apt update
sudo apt upgrade
Jika ingin memperbarui seluruh paket dengan perubahan dependency yang diperlukan:
sudo apt full-upgrade
Setelah proses update selesai, periksa apakah diperlukan reboot:
[ -f /var/run/reboot-required ] && echo "Reboot diperlukan"
Kemudian:
sudo reboot
Mengapa update penting?
Kerentanan keamanan dapat ditemukan setelah sistem operasi dirilis. Vendor kemudian menyediakan patch untuk memperbaikinya.
Server yang tidak pernah mendapatkan update ibarat rumah dengan kunci lama yang sudah diketahui kelemahannya.
Best practice
Lakukan:
- update secara berkala,
- gunakan repository resmi,
- hindari repository tidak terpercaya,
- monitor security advisory,
- uji update terlebih dahulu pada server staging jika sistem sangat kritis.
2. Buat User Administrator Non-Root
Jangan menggunakan akun root untuk aktivitas administrasi sehari-hari.
Buat user administrator:
sudo adduser adminsys
Masukkan user tersebut ke grup sudo:
sudo usermod -aG sudo adminsys
Verifikasi:
groups adminsys
Kemudian coba:
su - adminsys
Tes privilege:
sudo whoami
Jika output:
root
berarti user telah memiliki privilege sudo.
Pada Debian, pastikan paket sudo tersedia:
sudo apt install sudo
3. Disable Root Login melalui SSH
Salah satu konfigurasi penting adalah menonaktifkan login root secara langsung melalui SSH.
Edit konfigurasi:
sudo nano /etc/ssh/sshd_config
Cari:
PermitRootLogin yes
Ubah menjadi:
PermitRootLogin no
Pada sistem yang menggunakan konfigurasi drop-in, periksa juga:
ls -la /etc/ssh/sshd_config.d/
Setelah perubahan, validasi konfigurasi:
sudo sshd -t
Jika tidak ada error, restart atau reload SSH:
sudo systemctl reload ssh
Nama service pada sebagian sistem dapat berbeda, misalnya:
sudo systemctl reload sshd
Jangan menutup sesi SSH yang sedang aktif sebelum memastikan login menggunakan user administrator berhasil.
4. Gunakan SSH Key Authentication
Password merupakan salah satu target umum serangan brute force.
SSH key memberikan mekanisme autentikasi yang lebih kuat dibanding password sederhana.
Di komputer client:
ssh-keygen -t ed25519
Kemudian salin public key ke server:
ssh-copy-id adminsys@IP_SERVER
Setelah itu coba login:
ssh adminsys@IP_SERVER
Public key biasanya berada di:
~/.ssh/id_ed25519.pub
Private key:
~/.ssh/id_ed25519
Jangan membagikan private key.
Setelah autentikasi key benar-benar berfungsi, password authentication dapat dinonaktifkan.
Edit:
sudo nano /etc/ssh/sshd_config
Gunakan:
PasswordAuthentication no
Kemudian:
sudo sshd -t
sudo systemctl reload ssh
Perhatian penting
Jangan menonaktifkan password authentication sebelum memastikan SSH key dapat digunakan.
Jika salah konfigurasi, Anda berisiko kehilangan akses administratif.
5. Batasi Akses SSH
SSH tidak selalu harus dapat diakses dari seluruh Internet.
Jika administrasi hanya dilakukan dari jaringan tertentu, batasi sumber koneksi pada firewall.
Contohnya menggunakan UFW:
sudo ufw allow from 192.168.10.0/24 to any port 22 proto tcp
Kemudian:
sudo ufw enable
Pendekatan ini lebih baik daripada membiarkan SSH terbuka untuk seluruh alamat Internet jika kebutuhan infrastrukturnya memungkinkan.
Untuk lingkungan enterprise, akses administrator dapat ditempatkan melalui:
- VPN,
- management VLAN,
- bastion host,
- jump server,
- zero-trust access solution.
6. Konfigurasi Firewall
Firewall adalah salah satu lapisan keamanan paling penting.
Pada Ubuntu dan Debian, UFW dapat digunakan sebagai interface sederhana untuk firewall.
Instal:
sudo apt install ufw
Lihat status:
sudo ufw status verbose
Sebelum mengaktifkan firewall, izinkan SSH:
sudo ufw allow 22/tcp
Untuk web server:
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
Kemudian:
sudo ufw enable
Periksa:
sudo ufw status numbered
Prinsip dasarnya:
Izinkan hanya trafik yang memang dibutuhkan.
Contohnya server web mungkin hanya membutuhkan:
22/tcp SSH
80/tcp HTTP
443/tcp HTTPS
Server database sebaiknya tidak otomatis membuka port database ke Internet.
7. Install dan Konfigurasi Fail2ban
Fail2ban dapat membantu merespons pola percobaan login berulang dengan memblokir sumber yang dianggap melakukan serangan berdasarkan aturan yang dikonfigurasi.
Instal:
sudo apt install fail2ban
Aktifkan:
sudo systemctl enable --now fail2ban
Periksa:
sudo systemctl status fail2ban
Lihat jail:
sudo fail2ban-client status
Untuk SSH:
sudo fail2ban-client status sshd
Konfigurasi sebaiknya dilakukan melalui:
/etc/fail2ban/jail.local
Contoh sederhana:
[sshd]
enabled = true
port = ssh
maxretry = 5
findtime = 10m
bantime = 1h
Nilai tersebut bukan angka sakral. Sesuaikan dengan pola akses dan kebutuhan server.
Fail2ban bukan pengganti firewall. Ia merupakan salah satu lapisan tambahan.
8. Audit User dan Hak Akses
Semakin banyak akun pada server, semakin besar pula kebutuhan untuk mengontrol privilege.
Lihat user:
cat /etc/passwd
Untuk melihat user dengan shell login:
grep -E '/bash$|/sh$' /etc/passwd
Periksa grup:
getent group
Periksa siapa yang memiliki akses sudo:
getent group sudo
Cari konfigurasi sudo:
sudo visudo
Prinsip pentingnya adalah least privilege.
Artinya, user hanya diberikan hak yang benar-benar diperlukan.
Contohnya:
Administrator:
sudo
Operator aplikasi:
akses service tertentu
User aplikasi:
tidak memiliki login interaktif
Database service:
tidak membutuhkan shell administrator
9. Hapus atau Nonaktifkan Service yang Tidak Diperlukan
Setiap service yang aktif berpotensi menambah attack surface.
Lihat service aktif:
systemctl --type=service --state=running
Lihat port yang sedang listening:
sudo ss -tulpn
Contoh output:
LISTEN 0 4096 0.0.0.0:22
LISTEN 0 4096 0.0.0.0:80
LISTEN 0 4096 127.0.0.1:5432
Jika terdapat service yang tidak diperlukan, jangan langsung menghapusnya.
Identifikasi terlebih dahulu:
systemctl status nama-service
Kemudian jika memang tidak diperlukan:
sudo systemctl disable --now nama-service
Jika benar-benar tidak dibutuhkan dan paketnya ingin dihapus:
sudo apt remove nama-paket
Prinsipnya sederhana:
Jangan mengamankan pintu yang sebenarnya tidak perlu ada. Tutup atau hapus pintunya.
10. Periksa Port yang Terbuka
Port terbuka tidak selalu berarti vulnerability, tetapi port yang tidak diperlukan meningkatkan permukaan serangan.
Gunakan:
sudo ss -tulpn
Atau:
sudo ss -lntup
Perhatikan port seperti:
22 SSH
53 DNS
80 HTTP
443 HTTPS
3306 MySQL/MariaDB
5432 PostgreSQL
6379 Redis
8080 aplikasi
Database seperti PostgreSQL dan MariaDB sebaiknya tidak diekspos ke Internet tanpa alasan yang kuat.
Lebih baik menggunakan:
Internet
|
Firewall
|
Web Server
|
Private Network
|
Database Server
daripada:
Internet
|
Database
11. Audit Log Sistem
Log merupakan sumber informasi penting ketika terjadi masalah keamanan.
Pada sistem berbasis systemd:
journalctl
Melihat log boot:
journalctl -b
Melihat error:
journalctl -p err
Melihat log SSH:
journalctl -u ssh
Atau:
journalctl -u sshd
Melihat login:
last
Melihat login gagal:
sudo lastb
Anda juga dapat memantau log secara realtime:
sudo journalctl -f
Untuk server penting, pertimbangkan central logging menggunakan sistem seperti:
- Loki,
- Elasticsearch/OpenSearch,
- Graylog,
- SIEM,
- syslog server.
12. Install Audit Framework
Untuk kebutuhan audit yang lebih mendalam, Linux Audit Framework dapat digunakan.
Install:
sudo apt install auditd
Aktifkan:
sudo systemctl enable --now auditd
Periksa:
sudo systemctl status auditd
Log audit umumnya berada di:
/var/log/audit/audit.log
Audit dapat membantu mengetahui aktivitas tertentu pada sistem, misalnya perubahan file, aktivitas user, dan event keamanan yang sesuai dengan rule yang diterapkan.
Pada lingkungan produksi, konfigurasi audit perlu dirancang agar memberikan informasi yang berguna tanpa menghasilkan volume log yang tidak terkendali.
13. Perketat Permission File dan Direktori
Linux memiliki model permission yang sangat kuat.
Contoh:
ls -lah /etc
Permission:
-rw-r--r--
dapat dibaca oleh owner, group, dan user lainnya sesuai bit permission.
Untuk file sensitif, permission perlu diperiksa.
Contohnya:
chmod 600 ~/.ssh/id_ed25519
Direktori SSH:
chmod 700 ~/.ssh
Public key:
chmod 644 ~/.ssh/id_ed25519.pub
Periksa ownership:
ls -la ~/.ssh
Jangan menggunakan:
chmod -R 777
sebagai solusi masalah permission.
Perintah tersebut sering menyelesaikan masalah akses dengan cara yang sangat… kreatif, sekaligus membuka masalah keamanan baru.
14. Amankan Konfigurasi SSH
Selain root login dan SSH key, konfigurasi SSH dapat diperketat.
Contoh parameter yang umum diperiksa:
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
MaxAuthTries 3
X11Forwarding no
Namun tidak semua parameter harus diterapkan secara identik pada setiap server.
Periksa konfigurasi efektif:
sshd -T
Contohnya:
sshd -T | grep permitrootlogin
Validasi konfigurasi:
sudo sshd -t
Kemudian reload:
sudo systemctl reload ssh
Melakukan validasi sebelum reload adalah kebiasaan kecil yang dapat menghindarkan administrator dari drama “SSH tidak bisa masuk setelah edit config”.
15. Terapkan Monitoring dan Security Baseline
Hardening bukan pekerjaan sekali selesai.
Setelah konfigurasi keamanan diterapkan, server tetap perlu dipantau.
Beberapa metrik yang dapat diperhatikan:
- login gagal,
- login berhasil,
- port baru,
- service baru,
- penggunaan CPU,
- penggunaan RAM,
- disk usage,
- perubahan konfigurasi,
- error aplikasi,
- perubahan user,
- aktivitas sudo,
- network traffic,
- proses mencurigakan.
Untuk monitoring dapat menggunakan:
Prometheus
Grafana
Icinga
Zabbix
Netdata
Loki
Untuk keamanan yang lebih lanjut dapat digunakan:
Wazuh
OSSEC
SIEM
IDS/IPS
Contoh Baseline Hardening Ubuntu/Debian
Setelah instalasi server baru, checklist sederhana dapat terlihat seperti berikut:
[ ] Update sistem
[ ] Buat user administrator
[ ] Batasi privilege
[ ] Konfigurasi SSH key
[ ] Disable root login
[ ] Pertimbangkan disable password authentication
[ ] Aktifkan firewall
[ ] Batasi port
[ ] Install Fail2ban
[ ] Audit user
[ ] Audit service
[ ] Audit listening port
[ ] Aktifkan logging
[ ] Audit permission
[ ] Aktifkan monitoring
Checklist tersebut dapat dijadikan standard operating procedure (SOP) untuk setiap deployment server baru.
Studi Kasus: Hardening Ubuntu Server untuk Web Application
Misalkan terdapat server:
Ubuntu Server
IP: 203.0.113.10
Aplikasi berjalan pada:
Nginx
PHP
MariaDB
SSH
Kebutuhan:
Internet
|
+--- HTTPS 443
|
+--- HTTP 80
|
+--- SSH 22 dari jaringan admin
Database tidak boleh diakses langsung dari Internet.
Firewall dapat dirancang seperti:
Allow:
80/tcp
443/tcp
22/tcp dari IP/jaringan admin
Deny:
semua koneksi lain yang tidak diperlukan
MariaDB:
127.0.0.1:3306
atau hanya dapat diakses melalui private network.
Arsitektur ini jauh lebih aman dibanding membuka:
22
80
443
3306
5432
6379
8080
ke seluruh Internet hanya karena “aplikasinya mungkin membutuhkan”.
Hardening Bukan Sekadar Mengganti Port SSH
Mengubah port SSH dari:
22
menjadi:
2222
dapat mengurangi noise dari scanner otomatis tertentu, tetapi bukan mekanisme keamanan utama.
Jangan menganggap perubahan port sebagai pengganti:
- SSH key,
- firewall,
- MFA,
- least privilege,
- Fail2ban,
- patch management,
- logging,
- monitoring.
Port 2222 tetap dapat ditemukan menggunakan port scanning.
Prinsip Defense in Depth
Keamanan server sebaiknya menggunakan beberapa lapisan.
Contoh:
INTERNET
|
[Firewall]
|
[Network ACL]
|
[SSH Hardening]
|
[Authentication]
|
[Least Privilege]
|
[Application]
|
[File Permission]
|
[Logging]
|
[Monitoring]
Jika satu lapisan gagal, lapisan lainnya masih dapat memberikan perlindungan.
Inilah konsep defense in depth.
Kesalahan Hardening yang Sering Terjadi
Mematikan SSH Sebelum Menguji Key
Administrator menonaktifkan:
PasswordAuthentication no
sebelum memastikan SSH key bekerja.
Dampak:
Tidak bisa login
Solusi:
Buka sesi SSH kedua dan uji login menggunakan key terlebih dahulu.
Mengaktifkan Firewall Tanpa Allow SSH
Kesalahan klasik:
sudo ufw enable
tanpa:
sudo ufw allow 22/tcp
Dampaknya dapat berupa terputusnya akses remote.
Selalu siapkan rule akses administrator sebelum mengaktifkan firewall.
Menggunakan chmod 777
Jika aplikasi mengalami permission denied:
chmod -R 777 /var/www/html
bukan solusi yang baik.
Cari penyebab sebenarnya:
ls -lah
Periksa:
- owner,
- group,
- permission,
- SELinux/AppArmor jika relevan,
- konfigurasi web server,
- user service.
Menghapus Service Tanpa Memahami Dependensinya
Jangan menghapus service hanya karena namanya terlihat tidak familiar.
Gunakan:
systemctl status service-name
dan:
apt show package-name
Identifikasi fungsi service terlebih dahulu.
Membuka Semua Port di Firewall
Contoh buruk:
allow 0.0.0.0/0
untuk banyak service internal.
Gunakan prinsip:
Allow what is required, deny what is unnecessary.
Tidak Memantau Log
Server dapat terlihat normal selama berbulan-bulan sementara log sebenarnya menunjukkan ribuan percobaan login.
Gunakan:
journalctl
dan sistem monitoring terpusat untuk server penting.
Tips Profesional Linux Server Hardening
Gunakan beberapa prinsip berikut sebagai baseline.
1. Least Privilege
Berikan privilege minimum yang diperlukan.
2. Minimize Attack Surface
Matikan service, port, dan fitur yang tidak diperlukan.
3. Patch Management
Jangan menunggu server terkena masalah baru melakukan update.
4. Strong Authentication
Gunakan SSH key dan, bila memungkinkan, MFA pada sistem pendukung.
5. Network Segmentation
Pisahkan jaringan:
Management
Application
Database
Monitoring
Backup
6. Centralized Logging
Jangan hanya mengandalkan log lokal pada server kritis.
7. Monitoring
Deteksi perubahan kondisi server sedini mungkin.
8. Backup
Hardening tidak menggantikan backup.
Pastikan backup:
- terjadwal,
- terenkripsi bila diperlukan,
- memiliki retensi,
- diuji restore,
- tidak hanya berada di server yang sama.
9. Dokumentasikan Konfigurasi
Catat perubahan seperti:
tanggal
administrator
perubahan
alasan
konfigurasi sebelum
konfigurasi sesudah
10. Uji Sebelum Produksi
Untuk server penting:
Development
↓
Staging
↓
Production
Jangan menjadikan server produksi sebagai laboratorium eksperimen jam 2 pagi.
Hardening Checklist untuk Server Produksi
Berikut checklist yang dapat digunakan:
SYSTEM
[ ] OS updated
[ ] Security patches applied
[ ] Unnecessary packages removed
USER
[ ] Root login disabled
[ ] Admin user created
[ ] Sudo reviewed
[ ] Unnecessary users removed/locked
SSH
[ ] SSH key enabled
[ ] Password authentication reviewed
[ ] Root SSH disabled
[ ] SSH configuration validated
NETWORK
[ ] Firewall enabled
[ ] Unnecessary ports blocked
[ ] Management network restricted
[ ] Database not publicly exposed
SECURITY
[ ] Fail2ban configured
[ ] Audit logging enabled
[ ] File permissions reviewed
[ ] AppArmor/SELinux status reviewed
MONITORING
[ ] System monitoring enabled
[ ] Log monitoring enabled
[ ] Alerting configured
BACKUP
[ ] Backup scheduled
[ ] Backup tested
[ ] Restore procedure documented
Apakah Hardening Membuat Server 100% Aman?
Tidak.
Tidak ada konfigurasi hardening yang dapat memberikan jaminan server 100% aman.
Hardening bertujuan mengurangi risiko dan memperkecil attack surface.
Keamanan server merupakan proses berkelanjutan yang melibatkan:
Hardening
+
Patch Management
+
Monitoring
+
Logging
+
Backup
+
Incident Response
+
Security Awareness
Bahkan server yang telah dikonfigurasi dengan baik tetap dapat mengalami masalah jika aplikasi yang berjalan memiliki vulnerability atau kredensial administrator bocor.

Kesimpulan
Linux server hardening merupakan fondasi penting sebelum Ubuntu atau Debian digunakan sebagai server produksi.
Lima belas langkah yang dibahas mencakup:
- Update sistem.
- Membuat user administrator.
- Disable root login.
- Menggunakan SSH key.
- Membatasi akses SSH.
- Mengaktifkan firewall.
- Menggunakan Fail2ban.
- Mengontrol user privilege.
- Menonaktifkan service yang tidak diperlukan.
- Memeriksa port terbuka.
- Melakukan audit log.
- Mengaktifkan audit framework.
- Memperbaiki file permission.
- Memperketat konfigurasi SSH.
- Menerapkan monitoring dan security baseline.
Yang paling penting bukan sekadar menjalankan banyak command.
Hardening yang baik harus didasarkan pada pemahaman terhadap fungsi server, kebutuhan layanan, model ancaman, hak akses, network architecture, dan proses operasional.
Dengan pendekatan tersebut, Ubuntu dan Debian dapat memiliki baseline keamanan yang jauh lebih baik untuk digunakan sebagai server aplikasi, database, web, cloud, monitoring, maupun infrastruktur sekolah dan enterprise.
Frequently Asked Questions (FAQ)
Pertanyaan: Apa itu hardening Linux server?
Jawaban: Hardening adalah proses memperkuat konfigurasi Linux untuk mengurangi attack surface dan risiko akses tidak sah.
Pertanyaan: Apakah root login melalui SSH harus dinonaktifkan?
Jawaban: Umumnya disarankan menonaktifkan login root langsung dan menggunakan akun administrator dengan sudo.
Pertanyaan: Apakah SSH key lebih aman daripada password?
Jawaban: SSH key dapat memberikan autentikasi yang lebih kuat, terutama jika private key dilindungi dengan baik.
Pertanyaan: Apakah Fail2ban menggantikan firewall?
Jawaban: Tidak. Fail2ban dan firewall memiliki fungsi berbeda dan dapat digunakan sebagai lapisan keamanan tambahan.
Pertanyaan: Apakah semua port server harus ditutup?
Jawaban: Port yang tidak diperlukan sebaiknya tidak diekspos. Port yang memang diperlukan harus dibatasi sesuai kebutuhan.
Pertanyaan: Apakah mengubah port SSH meningkatkan keamanan?
Jawaban: Mengubah port dapat mengurangi sebagian automated scanning noise, tetapi bukan pengganti SSH key, firewall, dan kontrol akses.
Pertanyaan: Bagaimana cara mengetahui port yang sedang terbuka?
Jawaban: Gunakan ss -tulpn untuk melihat port listening dan proses yang terkait.
Pertanyaan: Apakah hardening membuat server aman 100%?
Jawaban: Tidak. Hardening mengurangi risiko, tetapi keamanan tetap membutuhkan patching, monitoring, backup, dan incident response.
Sudah melakukan hardening pada Ubuntu atau Debian Server Anda?
Coba gunakan checklist dalam artikel ini sebagai baseline sebelum server digunakan di lingkungan produksi. Jika Anda memiliki konfigurasi atau praktik hardening lain yang menurut Anda penting, bagikan pengalaman Anda di kolom komentar.
Jika artikel ini bermanfaat, bagikan kepada teman, siswa, rekan sysadmin, network administrator, atau siapa pun yang sedang belajar Linux Server.
Jangan lupa membaca artikel teknologi lainnya untuk mendapatkan tutorial Linux, networking, server administration, cybersecurity, cloud computing, DevOps, dan infrastruktur IT lainnya.
Satu konfigurasi keamanan yang dilakukan hari ini mungkin bisa mencegah satu masalah besar di kemudian hari.
Dukung kami dengan Subscribe & Join Membership channel YouTube | Walid Umar
Akses video pembelajaran eksklusif, materi persiapan UKK (Uji Kompetensi Siswa) dan Penyelesaian Soal LKS ITNSA