Konfigurasi SELinux dengan Web Server Nginx

Konfigurasi SELinux dengan Web Server Nginx. Saya melihat beberapa tutorial yang membahas tentang instalasi Nginx di CentOS menyarankan pengguna untuk menonaktifkan selinux. Menurut saya menonaktifkan fitur pengamanan default yang disediakan oleh sistem bukan praktik yang bagus. Jika kalian memang tidak bisa "menangani" selinux, pakailah distro lain seperti Ubuntu.

Mengaktifkan SELinux secara Global
Secara global disini maksudnya agar rule dari SELinux ini aktif dan berlaku untuk seluruh service yang berjalan.

Pertama, pastikan selinux kalian sudah aktif. Cek dengan perintah
sestatus

Jika statusnya belum enable, kita aktifkan terlebih dahulu selinux secara global dengan perintah
sudo setenforce Enforcing
Atau aktifkan secara permanen dengan cara mengedit file /etc/selinux/config dan ubah baris Ubah baris SELINUX, ubah nilainya menjadi menjadi SELINUX=enforcing.

Install sealert
Kedua tool ini berguna untuk memeriksa kesalahan kesalahan konfigurasi dari aplikasi.
sudo yum install policycoreutils-python setroubleshoot-server

Atur Mode Permissive di Nginx
Selanjutnya adalah mengubah (sementara) mode selinux di Nginx ke permissive. Tujuannya agar kita bisa memeriksa apakah rule dari SELinux berbenturan dengan konfigurasi yang kita tetapkan di Nginx. Di mode permissive saat ada kesalahan konfigurasi atau ada konfigurasi di Nginx yang tidak memenuhi standar keamanan menurut SELinux, SELinux tidak akan mentrigger firewall yang menyebabkan Nginx menjadi error, namun hanya akan mencatat seluruh kesalahan tersebut dalam file log. Gunakan semanage untuk mengatur mode permissive di selinux Nginx.
sudo semanage permissive -a httpd_t
Ok, sekarang seluruh kesalahan konfigurasi akan dicatat dalam file log, namun Nginx masih bisa berjalan normal tanpa diblokir oleh selinux.

Melihat Peletakan Konfigurasi yang Benar
Maksud dari peletakan konfigurasi yang benar disini adalah tempat tempat file ataupun direktori nginx yang sesuai dengan selinux. Misal direktori standard untuk web server adalah di /usr/share/nginx/html.
sudo semanage fcontext -l | grep nginx

Memeriksa Kesalahan Konfigurasi
Gunakan perintah
sudo sealert -a /var/log/audit/audit.log
Contoh output:
Well, error tersebut disebabkan karena saya menggunakan direktori Nginx yang non standard. Saya menggunakan lokasi file web di /server/labs-server yangmana menyalahi aturan dari SELinux.

Solusinya adalah mengubah direktori web server ke lokasi default di /usr/share/nginx, atau mengijinkan SELinux menggunakan direktori non standard. Untuk opsi kedua, gunakan perintah
sudo semanage fcontext -a -t httpd_sys_content_t "/server(/.*)?"
sudo restorecon -R -v /server
Mengembalikan Nginx ke Mode Enforcing
Jika semuanya sudah oke, tidak ada yang error lagi, jalankan perintah berikut untuk menjalankan mode enforcing di Nginx.
sudo semanage permissive -d httpd_t
Untuk beberapa perintah atau opsi yang bisa digunakan, kalian bisa cek dengan command
man httpd_selinux
Oke mungkin sekian tutorial kali ini, semoga bermanfaat. Jika ada yang ingin ditanyakan silahkan tinggalkan komentar.

Referensi:
  • https://www.getpagespeed.com/server-setup/nginx/nginx-selinux-configuration
  • https://www.rootusers.com/how-to-enable-or-disable-selinux-in-centos-rhel-7/
  • https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/security-enhanced_linux/index
  • https://www.nginx.com/blog/using-nginx-plus-with-selinux/