GNU/Linux >> Belajar Linux >  >> Linux

20 Hal Penting yang Perlu Diketahui jika Anda Menggunakan Server Web Nginx

Nginx Web Server adalah salah satu dari dua server web yang paling banyak digunakan di dunia. Ini memperkuat posisinya sebagai aplikasi server web yang sempurna sejak didirikan 15 tahun yang lalu. Nginx dikenal dengan kinerja superiornya, yang kira-kira 2,5 kali lebih cepat dari Apache. Ini paling cocok untuk situs web yang menangani sejumlah besar aset statis, tetapi juga dapat digunakan untuk situs web tujuan umum. Ini telah melampaui penggunaan yang dimaksudkan sejak lama dan sekarang digunakan untuk banyak tugas seperti reverse proxy, caching, load balancing, streaming media, dan banyak lagi.

Fakta Tentang Server Web Nginx

Nginx diucapkan sebagai Mesin X dan memiliki beragam kasus penggunaan di dunia web modern. Ini dapat digunakan untuk memberi daya pada beragam layanan web seperti layanan mikro, komputasi awan, dan gateway API di samping peran standarnya sebagai server web. Kami akan melanjutkan diskusi kami dengan asumsi server web Nginx berjalan di Linux atau sistem UNIX serupa.

1. Dasar-dasar Nginx

Anda perlu mendapatkan dasar-dasarnya dengan benar sebelum melanjutkan dengan topik teknis apa pun. Nah, berikut ini kami sajikan beberapa hal mendasar mengenai Nginx. Ada beberapa varian dari aplikasi ini, termasuk variasi berbayar dan gratis. Namun, server Nginx open source adalah yang paling banyak digunakan oleh pengembang hanya karena ia menawarkan hampir semua fungsi yang dapat Anda pikirkan dan tidak datang dengan label harga.

Setelah terinstal, Anda dapat menjalankan Sudo service Nginx start untuk menjalankan server Anda. File konfigurasi server disimpan di /usr/local/nginx/conf/ atau /etc/nginx/ direktori. Dokumen web disimpan di /usr/local/nginx/html/ atau /var/www/html direktori. Anda dapat menghentikan server yang sedang berjalan dengan mengeluarkan perintah sudo nginx -s berhenti.

2. Mengaktifkan SELinux

SELinux (Linux yang Ditingkatkan Keamanan) adalah fitur menarik dari kernel Linux, yang memberikan kontrol lebih besar atas keamanan sistem melalui kebijakan keamanan kontrol akses. Ini adalah praktik umum untuk mengaktifkan SELinux dalam sistem yang bermaksud menjalankan server web khusus. Anda perlu menggunakan getsebool -a perintah untuk ini.

$ sudo getsebool -a | kurang$ sudo getsebool -a | ambil $ sudo getsebool -a | terima

Perintah di atas akan memberi Anda informasi tentang pengaturan boolean apa yang dihidupkan dan dimatikan. Anda harus menonaktifkan semua entitas yang tidak diperlukan oleh sistem Anda untuk keamanan maksimum. Pengaturan ini secara kolektif dikenal sebagai boolean SELinux. Menetapkan nilai yang sesuai untuk variabel ini akan membuat sistem Anda jauh lebih aman untuk mencegah serangan web standar.

3. Menghapus Modul Nginx yang Tidak Diinginkan

- -

Terlepas dari sifat ringan dari server default Nginx, itu selalu merupakan ide yang baik untuk menghapus modul yang tidak diinginkan yang tidak diperlukan oleh server Anda. Ini akan meminimalkan jejak memori secara signifikan dan membuat server Anda lebih cepat dari biasanya. Selain itu, ini membatasi banyak kemampuan server Anda, jadi meskipun pengguna jahat mendapatkan akses ke server Anda, itu akan membutuhkan banyak waktu dan keterampilan untuk mendapatkan kendali penuh atas sistem itu sendiri.

Perintah di bawah ini menunjukkan cara menonaktifkan SSI dan modul indeks otomatis yang diinstal secara default dengan biner Nginx Anda.

sudo ./configure --without-http_autoindex_module --without-http_ssi_modulesudo makesudo make install

Anda dapat menggunakan perintah berikut untuk melihat modul yang dapat dimatikan saat mengkompilasi server Nginx Anda.

sudo ./configure --help | kurang

4. Meminimalkan Hak Istimewa Jaringan

Meminimalkan hak istimewa jaringan server web Anda juga membantu dalam meningkatkan keamanan. Anda dapat memanfaatkan opsi pemasangan untuk pekerjaan ini. Pada dasarnya ini berarti Anda dapat melayani semua halaman web Anda melalui partisi terpisah. Untuk melakukannya, Anda harus membuat partisi tambahan dan memasangnya di /nginx lokasi. Pastikan untuk memasangnya dengan izin noexec, nodev, dan nosetuid.

Anda dapat melakukannya dengan mengedit file /etc/fstab . Edit ini dengan editor favorit Anda dan tambahkan berikut ini di akhir file.

LABEL=/nginx /nginx ext3 default,nosuid,noexec,nodev 1 2

Jika sistem Anda berjalan pada sistem file yang berbeda, ganti ext3 dengan nama sistem file tersebut. Anda akan memerlukan hak sudo untuk melakukan ini.

5. Memperkuat Pengaturan Jaringan untuk Nginx

Anda dapat lebih memperkuat keamanan sistem Anda melalui konfigurasi beberapa pengaturan kernel dan jaringan. Edit /etc/sysctl. conf dan tambahkan baris berikut untuk memperkuat sistem server Anda.

# mencegah serangan smurfnet.ipv4.icmp_echo_ignore_broadcasts =1# berhenti menjadi routernet.ipv4.ip_forward =0net.ipv4.conf.all.send_redirects =0net.ipv4.conf.default.send_redirects =0# mencegah perubahan routing tablesnet .ipv4.conf.all.accept_redirects =0net.ipv4.conf.default.accept_redirects =0net.ipv4.conf.all.secure_redirects =0net.ipv4.conf.default.secure_redirects =0

Ada sejumlah besar opsi yang tersedia yang dapat Anda gunakan untuk mengamankan sistem Anda. Mereka akan berguna jika seseorang melanggar keamanan server Anda.

6. Mengubah Tajuk Versi Nginx

Mengubah tajuk versi server default Nginx Anda adalah cara yang bagus untuk mencegah peretas wannabe membobol sistem Anda. Banyak aplikasi dapat diumpankan data fuzzy untuk mendapatkan header versi dari perangkat lunak server. Pengguna jahat sering melakukan ini untuk mengetahui informasi server yang tepat sehingga mereka dapat menargetkan dan menggali kerentanan khusus untuk mereka.

Temukan baris di bawah ini dari file src/http/ngx_http_header_filter_module.c .

static char ngx_http_server_string[] ="Server:nginx" CRLF;static char ngx_http_server_full_string[] ="Server:" NGINX_VER CRLF;

Ganti dengan baris berikut.

static char ngx_http_server_string[] ="Server:Ninja Web Server" CRLF;static char ngx_http_server_full_string[] ="Server:Ninja Web Server" CRLF;

Ini menunjukkan informasi palsu tentang versi server kepada penyerang potensial.

7. Mencegah Buffer Overflow

Buffer overflows terjadi ketika potongan kode menulis data di luar batasnya. Ini adalah masalah rekayasa perangkat lunak klasik yang dimanfaatkan oleh peretas berpengalaman. Jika berhasil dirancang, serangan buffer overflow dapat memungkinkan pihak yang tidak diinginkan untuk masuk dan mengambil kendali sistem Anda. Anda dapat mencegah serangan ini sebagian besar dengan membatasi ukuran buffer untuk semua klien. Tambahkan yang berikut ini ke nginx.conf . Anda berkas.

# batasi ukuran bufferclient_body_buffer_size 1K;client_header_buffer_size 1k;client_max_body_size 1k;large_client_header_buffers 2 1k;# setel timeoutsclient_body_timeout 10;client_header_timeout 10;keepalive_timeout 5 10;
 Opsi ini pada dasarnya mengubah nilai default parameter ini dan mengurangi permukaan serangan. Anda dapat bermain dengan mereka untuk mengetahui apa yang sesuai dengan Server Web Nginx Anda.

8. Mengontrol Koneksi Simultan

Tidak masalah apakah Anda menjalankan server default Nginx atau yang lainnya, selalu merupakan praktik yang baik untuk membatasi jumlah koneksi simultan. Ini dapat berguna dalam banyak situasi, seperti mencegah serangan Denial of Service dan penyeimbangan beban yang lebih baik. Modul NginxHttpLimitZone memungkinkan admin membatasi koneksi simultan untuk sesi atau alamat IP tertentu.

limit_zone slimits $binary_remote_addr 5m;limit_conn slimits 5;

Tambahkan baris di atas di nginx.conf . Anda mengajukan. Ini membatasi jumlah koneksi simultan yang diizinkan hingga 5 per IP. Anda dapat dengan mudah mengganti nilai ini agar sesuai dengan kebutuhan Anda.

9. Memfilter Akses Domain

Salah satu jenis masalah paling umum yang dihadapi oleh Server Web Nginx modern adalah botnet. Mereka sering memindai server secara acak dan mencoba menemukan semua domain terkait. Anda dapat menolaknya dengan mudah dengan menambahkan baris berikut ke nginx.conf . Anda berkas.

# mencakup permintaan klien ke domain yang ditentukan ($host !~ ^(url.domain|www.url.domain|url.subdomain.domain)$ ) {return 444;}

Menambahkan baris ini ke file ini memungkinkan permintaan klien hanya untuk domain yang disebutkan. Anda dapat menentukan beberapa domain dengan menggunakan atau “|” operator.

10. Membatasi Metode yang Tersedia

Ada beberapa HTTP metode yang digunakan untuk mengambil halaman web berdasarkan permintaan pengguna. Beberapa di antaranya adalah DAPATKAN , POSTING , PUT , dan HAPUS . Namun, ada banyak metode tambahan. Itu selalu merupakan ide yang baik untuk membatasi metode ini untuk pengguna. Ini akan membantu mengurangi pelanggaran data yang tidak diinginkan dan menambahkan lapisan keamanan ekstra. Tambahkan baris berikut ke konfigurasi Nginx Anda.

# hanya izinkan GET &&HEAD &&POSTif ($request_method !~ ^(GET|HEAD|POST)$ ) {return 444;}

Sekarang, pengguna tidak dapat melakukan permintaan penghapusan atau pencarian di server Anda. Hanya DAPATKAN , KEPALA , dan POSTING metode yang tersedia untuk mereka. Anda dapat menemukan informasi lebih lanjut tentang metode HTTP di sini.

11. Membatasi Agen Pengguna

Agen pengguna adalah program komputer yang memungkinkan pengguna untuk berinteraksi dengan layanan. Browser web Ubuntu adalah agen pengguna web utama di sistem saya.

Terkadang, Anda mungkin ingin membatasi agen pengguna tertentu untuk mengakses server Anda seperti browser tanpa kepala yang terus mencari untuk mengikis data dari situs web Anda. Ini juga berguna saat memblokir botnet karena mereka sering menggunakan agen pengguna yang sama.

# block download agentsif ($http_user_agent ~* LWP::Simple|BBBike|wget) {return 403;}

Menambahkan ini ke konfigurasi Nginx Anda akan memblokir agen unduhan yang dikenal seperti wget dan BBBike. Baris di bawah ini akan memblokir beberapa robot yang dikenal yang disebut msnbot dan scrapbot .

#block robotsif ($http_user_agent ~* msnbot|scrapbot) {return 403;}

Anda dapat memblokir semua agen pengguna yang Anda inginkan. Namun, berhati-hatilah, atau Anda mungkin memblokir lalu lintas yang sah ke server web Nginx Anda.

12. Memblokir Spam Rujukan

Referral Spam adalah masalah umum yang dihadapi oleh banyak server web saat ini. Ini adalah teknik yang digunakan untuk mengiklankan situs web tertentu ke mesin pencari sehingga mereka mendapatkan lebih banyak lalu lintas ke situs mereka. Ini sangat berbahaya untuk server web dengan beban tinggi karena dapat menyebabkan kerusakan parah pada peringkat situs. Untungnya, Anda dapat memblokir sebagian besar spam ini dengan menambahkan hanya beberapa baris ke konfigurasi Nginx Anda.

#tolak referensi tertentu ( $http_referer ~* (babes|forsale|girl|jewelry|love|nudit|organic|poker|porn|sex|teen) ){# return 404;return 403;}

Tambahkan baris di atas ke nginx.conf . Anda file untuk memblokir beberapa spam rujukan yang paling umum. Anda dapat menambahkan lebih banyak kata ke baris ini sesuai kebutuhan.

13. Mencegah Tautan Panas Gambar

Tautan cepat gambar telah menjadi praktik umum bagi banyak admin web. Dalam praktik ini, admin sering menggunakan gambar yang dipersonalisasi dari server web Anda untuk melayani permintaan klien mereka. Ini bisa sangat berbahaya jika tidak ditangani karena server web Anda mungkin bertanggung jawab untuk mengirimkan aset gambar yang diminta oleh pengguna server web lain. Anda dapat dengan mudah mencegah hal ini dan menghemat bandwidth Anda yang berharga, seperti yang ditunjukkan di bawah ini.

# stop deep linking atau image hotlinkinglocation /images/ {valid_referers none diblokir www.example.com example.com;if ($invalid_referer) {return 403; }}

Menambahkan baris ini ke file konfigurasi Nginx Anda akan memblokir permintaan gambar dari server web yang disebutkan. Dengan cara ini, server default Nginx Anda hanya akan mengirimkan gambar ke permintaan klien yang autentik. Selain itu, Anda mungkin ingin menggunakan peta Nginx untuk memblokir hotlinking gambar untuk sejumlah besar domain.

14. Membatasi Akses Direktori

Anda sering dapat menemukan banyak halaman web yang tidak membatasi direktori mereka. Mereka sangat rentan terhadap pengguna jahat karena mereka memungkinkan mereka untuk melintasi situs seperti yang mereka inginkan dan sering menyebabkan eskalasi lebih lanjut dari hak istimewa situs. Cuplikan di bawah ini akan menunjukkan kepada Anda cara memblokir pengguna tertentu, mengizinkan rentang IP tertentu, dan menolak semua yang lain ke direktori /docs/ .

location /docs/ {# block one userdeny 192.168.1.1;# izinkan siapa saja di 192.168.1.0/24allow 192.168.1.0/24;# drop restdeny all;}

Tambahkan ini ke konfigurasi Nginx Anda dan ganti /docs/ dengan direktori yang berisi informasi sensitif. Anda juga dapat melindungi direktori Anda dengan kata sandi, seperti yang ditunjukkan di bawah ini. Pertama, buat file sandi dan tambahkan USER

$ sudo mkdir /usr/local/nginx/conf/.htpasswd/$ sudo htpasswd -c /usr/local/nginx/conf/.htpasswd/passwd PENGGUNA

Sekarang tambahkan baris ini ke nginx.conf berkas.

# password rotect /personal-images/ dan /delta/ direktori lokasi ~ /(personal-images/.*|delta/.*) {auth_basic "Restricted";auth_basic_user_file /usr/local/nginx/conf/.htpasswd/ passwd;}

15. Mengonfigurasi SSL untuk Server Web Nginx

SSL (Secure Sockets Layer) telah menjadi standar keamanan de-facto dari server web modern. Situs apa pun yang tidak menerapkan teknologi ini dianggap tidak aman bagi banyak profesional keamanan. Untungnya, konfigurasi dan pemeliharaan keamanan SSL untuk server Nginx sangatlah mudah.

Ada banyak cara untuk mengatur SSL untuk sebuah situs web. Admin dapat membuat sertifikat SSL yang ditandatangani sendiri, menggunakan otoritas sertifikat populer, atau mengatur proxy terbalik SSL. Jika Anda relatif baru dalam administrasi server web, kami akan menyarankan Anda untuk menggunakan sertifikasi Let's Encrypt yang populer. Ini gratis dan mudah digunakan otoritas sertifikasi, yang menyediakan sertifikat SSL/TLS yang aman. Kami akan menunjukkan cara melakukannya dalam panduan terpisah.

16. Meningkatkan Keamanan PHP

PHP adalah salah satu bahasa sisi server yang paling banyak digunakan dan melayani banyak halaman web di internet. Namun, itu cukup tua dan rentan terhadap beberapa kerentanan keamanan. Jadi, jika Anda menggunakan PHP di server Nginx Anda, Anda harus selalu berhati-hati dan menerapkan standar keamanan tertentu. Misalnya, menambahkan baris di bawah ini ke /etc/php.ini . Anda file akan meningkatkan keamanan dengan faktor yang signifikan.

# tolak fungsi pentingdisable_functions =phpinfo, sistem, email, exec# waktu eksekusi maksimal untuk skrip, dalam detikmax_execution_time =30# batas memori maksimal untuk skrip, dalam MBmemory_limit =4M# maks yang diizinkan POST datapost_max_size =4M# batasi informasi PHPexpose_php =Mati # log errorlog_errors =Aktif# aktifkan SQL safe modesql.safe_mode =Aktif

Masih banyak lagi instruksi peningkatan keamanan yang dapat Anda tambahkan dalam file ini untuk membuat server Anda tahan terhadap bahaya.

17. Meningkatkan Keamanan Server Default Nginx

Pengguna Linux dapat dengan mudah meningkatkan keamanan keseluruhan server Nginx dengan beberapa konfigurasi manual. Seperti yang disebutkan sebelumnya, Anda harus mengaktifkan SELinux di mesin apa pun yang menjalankan Nginx untuk perlindungan optimal. Menyiapkan izin yang benar di /nginx juga sangat penting. Untuk menemukan izin yang dimiliki pengguna pada dokumen Nginx Anda, jalankan perintah di bawah ini.

$ sudo find /nginx -user nginx$ sudo find /usr/local/nginx/html -user nginx

Pastikan hanya akar atau pemilik dokumen ini yang memiliki akses tulis ke dokumen tersebut. Ini bisa menjadi penyelamat jika terjadi pembobolan di masa mendatang karena penyerang akan membutuhkan lebih banyak waktu dan keahlian untuk mendapatkan hak lebih lanjut ke mesin. Gunakan perintah di bawah ini untuk menghapus arsip yang tidak diinginkan yang dibuat oleh vi atau editor teks Linux lainnya.

$ sudo find /nginx -name '.?*' -not -name .ht* -or -name '*~' -or -name '*.bak*' -or -name '*.old*' $ sudo find /usr/local/nginx/html/ -name '.?*' -not -name .ht* -or -name '*~' -or -name '*.bak*' -or -name '* .lama*'

18. Mengaudit Log Nginx

Memeriksa file log server Nginx Anda akan memberi Anda informasi berharga seperti minat pengguna, upaya otentikasi yang tidak diinginkan, dan sebagainya. Kemampuan untuk memantau log server dengan tepat merupakan aset yang berguna bagi webmaster karena alasan ini.

Anda dapat menemukan file log server Anda di /usr/local/nginx/logs direktori. Perintah di bawah ini menunjukkan kepada kita cara menangkapnya untuk informasi sensitif.

$ sudo grep "/login.php??" /usr/local/nginx/logs/access_log$ sudo grep "...etc/passwd" /usr/local/nginx/logs/access_log$ sudo egrep -i "denied|error|warn" /usr/local/nginx/ logs/error_log

Anda juga dapat menginstal atau membangun aplikasi audit khusus yang akan memeriksa log Nginx secara real-time dan memberi Anda informasi tentang apa yang terjadi di server Anda.

19. Menjalankan Nginx di Wadah

Sebagian besar profesional menyarankan pengguna untuk menjalankan server Nginx mereka dari dalam wadah khusus. Kontainer adalah lingkungan terisolasi pada mesin server yang dibangun untuk menjaga proses terpisah satu sama lain. Anda dapat dengan mudah menginstal dan menjalankan server Nginx Anda dalam wadah seperti LXD, Docker, penjara FreeBSD, XEN, dan emulator virtual Linux lainnya. Ini secara kolektif dikenal sebagai penjara chroot di antara webmaster.

Wadah khusus untuk server Anda akan berisi semua sumber daya yang diperlukan untuk menjalankan server dan menangani permintaan klien. Keuntungan yang Anda dapatkan adalah isolasi server ini dari sisa mesin Anda. Jadi, meskipun seseorang mendapatkan akses tidak sah ke server Anda melalui beberapa celah, mereka tidak akan dapat mengontrol inti sistem Anda.

20. Beberapa Saran Bermanfaat

Anda dapat dengan mudah mengonfigurasi berbagai aspek server web Nginx Anda dengan memodifikasi file konfigurasi terpusat. Ada banyak hal yang harus dilakukan. Misalnya, gunakan yang berikut ini untuk menghindari clickjacking.

add_header X-Frame-Options SAMAORIGIN;

Baris berikutnya akan menonaktifkan sniffing tipe konten oleh beberapa browser.

add_header X-Content-Type-Options nosniff;

Untuk mengaktifkan filter skrip lintas situs (XSS), Anda dapat menggunakan

add_header X-XSS-Protection "1; mode=block";

Ada banyak fitur bermanfaat yang dapat Anda temukan dari dokumentasi Nginx. Namun, pastikan Anda memahami apa yang mereka lakukan sebelum menerapkan apa pun. Jika tidak, situs Anda mungkin mengalami downtime karena kesalahan konfigurasi.

Mengakhiri Pikiran

Ada terlalu banyak alasan untuk popularitas server web Nginx. Ini telah menjadi perangkat lunak server terbaik karena set fitur yang kaya dan kemampuan konfigurasi yang tampaknya tidak terbatas. Kita sering melihat banyak admin hanya menginstal dan menggunakan server default Nginx. Mereka kehilangan banyak fitur dan fleksibilitas yang ditawarkan oleh Nginx dengan cara ini. Itulah mengapa editor kami mengambil kebebasan ini untuk menguraikan praktik terbaik ini di hadapan Anda. Semoga kami dapat memenuhi minat Anda dan membantu Anda mempelajari sesuatu yang baru.


Linux
  1. 30 hal yang tidak Anda ketahui tentang kernel Linux

  2. Apache vs Nginx:Server Web Mana yang Harus Anda Pilih

  3. Cara Menginstal Server Web Nginx di Linux

  1. Instal Nginx di Windows

  2. Nginx Whitelist IP tertentu

  3. Server Ubuntu Yang Perlu Anda Ketahui

  1. Cara Menginstal Server Web Nginx di Ubuntu 18.04

  2. Cara Memperkuat dan Mengamankan Server Web NGINX di Linux

  3. NGINX vs Apache – Memilih Server Web Terbaik di 2022