GNU/Linux >> Belajar Linux >  >> Linux

Tips dan Trik untuk Mengamankan Server Web Nginx Anda

Nginx adalah server web open source, ringan, berkinerja tinggi dengan pertumbuhan tercepat di seluruh dunia. Nginx berjalan di sistem operasi Linux, Windows, Mac OS, dan Solaris. NGINX terus meningkat popularitasnya, sehingga semakin banyak penerapan NGINX yang perlu diamankan.

Dalam tutorial ini, kami akan menjelaskan beberapa tip dan trik keamanan server Nginx yang populer.

Persyaratan

  • Server yang menjalankan Ubuntu 18.04 atau Debian 9.
  • Kata sandi root disiapkan di server Anda.

Instal Nginx

Pertama, Anda perlu menginstal Nginx ke sistem Anda. Anda dapat menginstalnya dengan menjalankan perintah berikut:

apt-get install nginx -y

Setelah Nginx terinstal, Anda dapat memeriksa status Nginx dengan perintah berikut:

systemctl status nginx

Anda akan melihat output berikut:

? nginx.service - A high performance web server and a reverse proxy server
   Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
   Active: active (running) since Sun 2019-03-10 02:43:14 UTC; 4min 40s ago
     Docs: man:nginx(8)
  Process: 2271 ExecStop=/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid (code=exited, status=0/SUCCESS)
  Process: 2281 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
  Process: 2274 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
 Main PID: 2285 (nginx)
    Tasks: 2 (limit: 1111)
   CGroup: /system.slice/nginx.service
           ??2285 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
           ??2290 nginx: worker process

Mar 10 02:43:14 ubuntu1804 systemd[1]: Starting A high performance web server and a reverse proxy server...
Mar 10 02:43:14 ubuntu1804 systemd[1]: nginx.service: Failed to parse PID from file /run/nginx.pid: Invalid argument
Mar 10 02:43:14 ubuntu1804 systemd[1]: Started A high performance web server and a reverse proxy server.

Perbarui Nginx

Anda perlu memperbarui server web Nginx Anda karena ada banyak peningkatan kinerja, fitur baru, dan perbaikan keamanan sedang ditambahkan. Sebagian besar distribusi Linux modern tidak akan hadir dengan versi terbaru nginx ke dalam daftar paket default mereka. Jadi, Anda perlu memutakhirkan nginx versi terbaru melalui pengelola paket. Anda dapat memperbarui server web Nginx Anda dengan perintah berikut:

apt-get update -y
apt-get install nginx --reinstall -y

Mencegah Keterbukaan Informasi

Pertama, Anda perlu mencegah Nginx untuk mengungkapkan informasi versi mereka.

Secara default, Nginx menampilkan nama dan versinya di header HTTP.

Anda dapat memeriksanya dengan perintah berikut:

curl -I http://localhost

Anda akan melihat output berikut:

HTTP/1.1 200 OK
Server: nginx/1.14.0 (Ubuntu)
Date: Sat, 09 Mar 2019 15:28:01 GMT
Content-Type: text/html
Content-Length: 10918
Last-Modified: Fri, 01 Feb 2019 16:05:17 GMT
Connection: keep-alive
ETag: "5c546e3d-2aa6"
Accept-Ranges: bytes

Pada output di atas, Anda akan melihat Nginx dan versi sistem operasinya.

Anda dapat menyembunyikan informasi ini dengan mengedit file /etc/nginx/nginx.conf:

nano /etc/nginx/nginx.conf

Tambahkan server_tokens off line di dalam bagian konfigurasi http:

http {

        ##
        # Basic Settings
        ##
        server_tokens off;

Simpan dan tutup file, ketika Anda selesai. Kemudian, restart server web Nginx untuk menerapkan perubahan:

systemctl restart nginx

Sekarang, jalankan kembali perintah curl:

curl -I http://localhost

Anda akan melihat output berikut:

HTTP/1.1 200 OK
Server: nginx
Date: Sat, 09 Mar 2019 15:33:31 GMT
Content-Type: text/html
Content-Length: 10918
Last-Modified: Fri, 01 Feb 2019 16:05:17 GMT
Connection: keep-alive
ETag: "5c546e3d-2aa6"
Accept-Ranges: bytes

Batasi IP dari Akses

Nginx hadir dengan modul sederhana yang disebut ngx_http_access_module untuk mengizinkan atau menolak alamat IP tertentu.

Jika Anda ingin mengizinkan formulir Nginx 172.16.0.0/16 dan menolak dari subnet lain. Kemudian, buka file /etc/nginx/sites-enabled/default:

nano /etc/nginx/sites-enabled/default

Buat perubahan berikut di dalam blok server:

server {
        listen 80 default_server;
        listen [::]:80 default_server;

	allow 172.16.0.0/16;
    	deny  all;

Simpan dan tutup file, ketika Anda selesai. Kemudian, mulai ulang Nginx untuk menerapkan perubahan ini:

systemctl restart nginx

Sekarang, coba akses server Nginx Anda dari rentang alamat IP lain seperti 192.168.0.102.

Selanjutnya, periksa log Nginx dengan perintah berikut:

tail -f /var/log/nginx/error.log

Anda harus mendapatkan akses terlarang di output berikut:

2019/03/09 16:13:01 [error] 11589#11589: *1 access forbidden by rule, client: 192.168.0.102, server: _, request: "GET /test/ HTTP/1.1", host: "172.16.0.122"

Amankan Nginx dengan TLS

TLS (Transport Layer Security) adalah penerus SSL (Secure Socket Layer). Ini memberikan HTTPS yang lebih kuat dan lebih efisien dan berisi lebih banyak perangkat tambahan seperti Forward Secrecy, kompatibilitas dengan suite cipher OpenSSL modern, dan HSTS. Tutorial ini menunjukkan cara mengaktifkan Sertifikat SSL yang ditandatangani sendiri di Nginx. Jika Anda ingin menggunakan sertifikat Let's Encrypt, lihat di sini: https://www.howtoforge.com/tutorial/nginx-with-letsencrypt-ciphersuite/

Pertama, buat direktori untuk SSL dengan perintah berikut:

mkdir /etc/nginx/ssl/

Selanjutnya, buat kunci dan sertifikat dengan perintah berikut:

cd /etc/nginx/ssl/

Pertama, buat kunci dengan perintah berikut:

openssl genrsa -aes256 -out nginx.key 1024

Anda akan melihat output berikut:

Generating RSA private key, 1024 bit long modulus
...++++++
.............................++++++
e is 65537 (0x010001)
Enter pass phrase for nginx.key:
Verifying - Enter pass phrase for nginx.key:

Selanjutnya, generate csr dengan perintah berikut:

openssl req -new -key nginx.key -out nginx.csr

Berikan semua informasi seperti yang ditunjukkan di bawah ini:

Generating RSA private key, 1024 bit long modulus
...++++++
.............................++++++
e is 65537 (0x010001)
Enter pass phrase for nginx.key:
Verifying - Enter pass phrase for nginx.key:
[email protected]:~# openssl req -new -key nginx.key -out nginx.csr
Enter pass phrase for nginx.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:IN
State or Province Name (full name) [Some-State]:Gujarat
Locality Name (eg, city) []:Junagadh
Organization Name (eg, company) [Internet Widgits Pty Ltd]:IT
Organizational Unit Name (eg, section) []:IT
Common Name (e.g. server FQDN or YOUR name) []:HITESH
Email Address []:[email protected]

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:admin
An optional company name []:IT

Selanjutnya, tanda tangani sertifikat dengan perintah berikut:

openssl x509 -req -days 365 -in nginx.csr -signkey nginx.key -out nginx.crt

Anda akan melihat output berikut:

Signature ok
subject=C = IN, ST = Gujarat, L = Junagadh, O = IT, OU = IT, CN = HITESH, emailAddress = [email protected]
Getting Private key
Enter pass phrase for nginx.key:

Selanjutnya, buka file virtual host default Nginx dan tentukan sertifikatnya:

nano /etc/nginx/sites-enabled/default

Lakukan perubahan berikut:

server {
        listen 192.168.0.100:443 ssl;
        root /var/www/html;
        index index.html index.htm index.nginx-debian.html;
        server_name _;
        ssl_certificate /etc/nginx/ssl/nginx.crt;
        ssl_certificate_key /etc/nginx/ssl/nginx.key;
        ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;

Simpan dan tutup file, ketika Anda selesai. Kemudian, restart server Nginx untuk menerapkan perubahan ini:

systemctl restart nginx

Lindungi Direktori dengan Sandi

Saat menyiapkan server web Nginx, Anda juga dapat melindungi direktori tertentu dengan kata sandi. Anda dapat melakukannya menggunakan file .htpasswd.

Untuk melakukannya, buat file passwd dan tambahkan pengguna ke dalamnya dengan perintah berikut:

mkdir /etc/nginx/.htpasswd
htpasswd -c /etc/nginx/.htpasswd/passwd admin

Anda akan melihat output berikut:

New password: 
Re-type new password: 
Adding password for user admin

Selanjutnya, buat direktori pengujian di dalam root web Nginx dengan perintah berikut:

mkdir /var/www/html/test

Selanjutnya, berikan kepemilikan kepada pengguna www-data dengan perintah berikut:

chown -R www-data:www-data /var/www/html/test

Selanjutnya, buka file virtual host default Nginx dengan perintah berikut:

nano /etc/nginx/sites-enabled/default

Selanjutnya, lindungi direktori pengujian seperti yang ditunjukkan di bawah ini:

        location /test {

	auth_basic  "Restricted";
	auth_basic_user_file   /etc/nginx/.htpasswd/passwd;

Simpan dan tutup file, ketika Anda selesai. Kemudian, mulai ulang layanan Nginx untuk menerapkan perubahan ini:

systemctl restart nginx

Selanjutnya, buka browser web Anda dan ketik URL http://your-server-ip/test. Anda akan diminta untuk memasukkan nama pengguna dan kata sandi untuk mengakses direktori pengujian seperti yang ditunjukkan pada halaman berikut:

Selamat! Anda telah berhasil mengamankan server Nginx Anda di server Ubuntu 18.04. Saya harap ini akan membantu Anda untuk melindungi aplikasi Anda yang dihosting di server web Nginx. Jangan ragu untuk bertanya kepada saya jika Anda memiliki pertanyaan. Untuk informasi lebih lanjut, Anda dapat merujuk ke dokumen keamanan Nginx.


Linux
  1. Apa itu Server Web, dan Bagaimana Cara Kerja Server Web?

  2. Cara Menginstal Server Web Nginx di Linux

  3. 8 Tip dan Trik Baris Perintah MySQL Teratas

  1. LAMP vs. LEMP – tips memilih Apache atau nginx untuk server web Anda

  2. Tip dan trik .htaccess Linux

  3. Tip dan trik rsync favorit

  1. Menginstal Nginx di Ubuntu 14.04 dan 16.04

  2. Cara Memperkuat dan Mengamankan Server Web NGINX di Linux

  3. 10 Tips untuk Mengamankan Server Web Apache Anda di UNIX / Linux