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 .