Hướng dẫn một số tip bảo mật Nginx server

Hướng dẫn một số tip bảo mật Nginx server

Nginx là một máy chủ web nguồn mở, nhẹ, hiệu suất cao, phát triển nhanh nhất trên toàn thế giới. Nginx chạy trên hệ điều hành Linux, Windows, Mac OS và Solaris. NGINX tiếp tục tăng phổ biến, do đó, ngày càng có nhiều triển khai NGINX cần được bảo mật.

Trong hướng dẫn này, chúng tôi sẽ giải thích một số mẹo và thủ thuật bảo mật máy chủ Nginx phổ biến.

Yêu cầu

  • Một máy chủ chạy Ubuntu 18.04 hoặc Debian 9.
  • Mật khẩu gốc được thiết lập trên máy chủ của bạn.

Cài đặt Nginx

Đầu tiên, bạn sẽ cần cài đặt Nginx vào hệ thống của bạn. Bạn có thể cài đặt nó bằng cách chạy lệnh sau:

apt-get install nginx -y

Khi Nginx đã được cài đặt, bạn có thể kiểm tra trạng thái của Nginx bằng lệnh sau:

systemctl status nginx

Bạn sẽ thấy đầu ra sau:

? 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.

Cập nhật Nginx

Bạn sẽ cần cập nhật máy chủ web Nginx của mình vì có nhiều cải tiến hiệu suất, các tính năng mới và sửa lỗi bảo mật đang được thêm vào. Hầu hết các bản phân phối Linux hiện đại sẽ không đi kèm với phiên bản nginx mới nhất vào danh sách gói mặc định của chúng. Vì vậy, bạn sẽ cần nâng cấp phiên bản nginx mới nhất thông qua trình quản lý gói. Bạn có thể cập nhật máy chủ web Nginx của mình bằng lệnh sau:

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

Ngăn chặn tiết lộ thông tin

Trước tiên, bạn sẽ cần ngăn Nginx tiết lộ thông tin phiên bản của họ.

Theo mặc định, Nginx hiển thị tên và phiên bản của nó trong các tiêu đề HTTP.

Bạn có thể kiểm tra nó bằng lệnh sau:

curl -I http://localhost

Bạn sẽ thấy đầu ra sau:

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

Trong đầu ra trên, bạn sẽ thấy phiên bản Nginx và hệ điều hành.

Bạn có thể ẩn thông tin này bằng cách chỉnh sửa tệp /etc/nginx/nginx.conf:

nano /etc/nginx/nginx.conf

Thêm dòng server_tokens bên trong phần cấu hình http:

http {

##
 # Basic Settings
 ##
 server_tokens off;

Lưu và đóng tệp, khi bạn hoàn thành. Sau đó, khởi động lại máy chủ web Nginx để áp dụng các thay đổi:

systemctl restart nginx

Bây giờ, chạy lại lệnh curl:

curl -I http://localhost

Bạn sẽ thấy đầu ra sau:

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

Hạn chế IP khỏi quyền truy cập

Nginx đi kèm với một mô-đun đơn giản gọi là ngx_http_access_module để cho phép hoặc từ chối một địa chỉ IP cụ thể.

Nếu bạn muốn cho phép Nginx mẫu 172.16.0.0/16 và từ chối từ các mạng con khác. Sau đó, tệp mở / etc / nginx / sites-enable / default:

nano /etc/nginx/sites-enabled/default

Thực hiện các thay đổi sau trong khối máy chủ:

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

allow 172.16.0.0/16;
 deny all;

Lưu và đóng tệp, khi bạn hoàn thành. Sau đó, khởi động lại Nginx để áp dụng các thay đổi sau:

systemctl restart nginx

Bây giờ, hãy thử truy cập máy chủ Nginx của bạn từ dải địa chỉ IP khác như 192.168.0.102.

Tiếp theo, kiểm tra nhật ký Nginx bằng lệnh sau:

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

Bạn sẽ bị cấm truy cập trong đầu ra sau:

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"

Nginx an toàn với TLS

TLS (Transport Layer Security) là sự kế thừa cho SSL (Lớp cổng bảo mật). Nó cung cấp sức mạnh cho giao thức HTTPS hữu ích hơn và hiệu quả hơn và chứa nhiều cải tiến hơn như Chuyển tiếp bí mật, khả năng tương thích với các bộ mật mã OpenSSL hiện đại và HSTS. Hướng dẫn này cho thấy cách bật Chứng chỉ SSL tự ký trong Nginx. Thay vào đó, nếu bạn muốn sử dụng chứng chỉ Encrypt, hãy xem tại đây:  https://www.howtoforge.com/tutorial/nginx-with-letsencrypt-ciphersuite/

Đầu tiên, tạo một thư mục cho SSL bằng lệnh sau:

mkdir /etc/nginx/ssl/

Tiếp theo, tạo khóa và chứng chỉ bằng lệnh sau:

cd /etc/nginx/ssl/

Đầu tiên, tạo khóa bằng lệnh sau:

openssl genrsa -aes256 -out nginx.key 1024

Bạn sẽ thấy đầu ra sau:

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:

Tiếp theo, tạo csr bằng lệnh sau:

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

Cung cấp tất cả các thông tin như hình dưới đây:

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:
root@ubuntu1804:~# 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 []:admin@example.com

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

Tiếp theo, ký chứng chỉ bằng lệnh sau:

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

Bạn sẽ thấy đầu ra sau:

Signature ok
subject=C = IN, ST = Gujarat, L = Junagadh, O = IT, OU = IT, CN = HITESH, emailAddress = admin@example.com
Getting Private key
Enter pass phrase for nginx.key:

Tiếp theo, mở tệp máy chủ ảo mặc định Nginx và xác định chứng chỉ:

nano /etc/nginx/sites-enabled/default

Thực hiện các thay đổi sau:

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;

Lưu và đóng tệp, khi bạn hoàn thành. Sau đó, khởi động lại máy chủ Nginx để áp dụng các thay đổi sau:

systemctl restart nginx

Mật khẩu bảo vệ thư mục

Khi thiết lập máy chủ web Nginx, bạn cũng có thể bảo vệ một thư mục cụ thể bằng mật khẩu. Bạn có thể làm điều này bằng cách sử dụng tệp .htpasswd.

Để làm như vậy, tạo tệp passwd và thêm người dùng vào nó bằng lệnh sau:

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

Bạn sẽ thấy đầu ra sau:

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

Tiếp theo, tạo một thư mục thử nghiệm bên trong web gốc Nginx bằng lệnh sau:

mkdir /var/www/html/test

Tiếp theo, trao quyền sở hữu cho người dùng dữ liệu www bằng lệnh sau:

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

Tiếp theo, mở tệp máy chủ ảo mặc định Nginx bằng lệnh sau:

nano /etc/nginx/sites-enabled/default

Tiếp theo, bảo vệ thư mục kiểm tra như dưới đây:

location /test {

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

Lưu và đóng tệp, khi bạn hoàn thành. Sau đó, khởi động lại dịch vụ Nginx để áp dụng các thay đổi này:

systemctl restart nginx

Tiếp theo, mở trình duyệt web của bạn và nhập URL http: // your-server-ip / test. Bạn sẽ được nhắc nhập tên người dùng và mật khẩu để truy cập vào thư mục kiểm tra như trong trang sau:

Xin chúc mừng! bạn đã bảo mật thành công máy chủ Nginx của mình trên máy chủ Ubuntu 18.04. Tôi hy vọng điều này sẽ giúp bạn bảo vệ ứng dụng của bạn được lưu trữ trên máy chủ web Nginx. Hãy hỏi tôi nếu bạn có bất kỳ câu hỏi. Để biết thêm thông tin, bạn có thể tham khảo  tài liệu bảo mật Nginx .

Author Image
Hoàng Tùng

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *