0
0
Lập trình
Admin Team
Admin Teamtechmely

7 Mẹo Bảo Mật Nginx Với TLS và Quy Tắc Tường Lửa

Đăng vào 2 tuần trước

• 4 phút đọc

Giới thiệu

Là một lãnh đạo DevOps, bạn biết rằng máy chủ web là tuyến đầu của mọi dịch vụ hướng ra Internet. Nginx nổi tiếng với tốc độ nhanh, tính linh hoạt và được sử dụng rộng rãi, nhưng cài đặt mặc định của nó để lại nhiều điểm yếu về bảo mật và hiệu suất. Hướng dẫn này sẽ chỉ cho bạn bảy bước thực tiễn để bảo vệ TLS, thắt chặt quy tắc tường lửa và tối ưu hóa hiệu suất mà không làm gián đoạn quy trình làm việc hiện tại của bạn.


1. Thực thi Cài đặt TLS Mạnh Mẽ

Tại sao điều này quan trọng

Việc chấm dứt TLS là hàng rào đầu tiên chống lại việc nghe lén và tấn công trung gian. Các mã hóa yếu hoặc phiên bản giao thức lỗi thời có thể làm lộ dữ liệu nhạy cảm.

Các bước hành động

  • Cài đặt chứng chỉ uy tín (Let’s Encrypt là miễn phí và tự động).
  • Sử dụng ssl_prefer_server_ciphers on; để buộc máy chủ chọn mã hóa.
  • Vô hiệu hóa SSLv3, TLSv1 và TLSv1.1.
  • Chỉ cho phép các bộ mã hóa hiện đại.

Mẫu mã Nginx

nginx Copy
server {
    listen 443 ssl http2;
    server_name example.com;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH";
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 1h;
}

2. Kích hoạt HTTP/2 và OCSP Stapling

Cả hai tính năng này đều giảm độ trễ và cải thiện hiệu suất cảm nhận được.

  • Thêm listen 443 ssl http2; (đã có trong đoạn mã trên).
  • Cấu hình OCSP stapling để tránh các lượt đi lại không cần thiết:
nginx Copy
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;

3. Củng cố Tường Lửa Linux (UFW)

Kiểm tra nhanh

Chạy sudo ufw status verbose để xem các quy tắc hiện tại. Theo mặc định, Ubuntu có chính sách khá rộng rãi.

Bộ quy tắc đã củng cố

bash Copy
# Từ chối mọi thứ theo mặc định
sudo ufw default deny incoming
sudo ufw default allow outgoing

# Cho phép SSH (giới hạn để ngăn chặn tấn công brute force)
sudo ufw limit ssh

# Cho phép HTTP/HTTPS
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

# Bật tường lửa
sudo ufw enable

Xác minh

sudo ufw status numbered nên chỉ liệt kê ba cổng được cho phép.

4. Triển khai Fail2Ban để Bảo Vệ Chống Tấn Công Brute-Force

Fail2Ban theo dõi các tệp log và cấm các địa chỉ IP có dấu hiệu tấn công.

bash Copy
sudo apt-get install fail2ban

Tạo tệp /etc/fail2ban/jail.local với một khối Nginx tối thiểu:

ini Copy
[nginx-http-auth]
enabled = true
port    = http,https
filter  = nginx-http-auth
logpath = /var/log/nginx/error.log
maxretry = 3
bantime = 3600

Khởi động lại dịch vụ: sudo systemctl restart fail2ban.

5. Tối ưu Hóa Nén: Gzip + Brotli

Nén giảm kích thước tải, cải thiện TTFB và tốc độ tổng thể.

nginx Copy
# Gzip – hoạt động cho tất cả các trình duyệt hiện đại
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml+rss;
gzip_min_length 1024;

# Brotli – tỷ lệ nén tốt hơn (cần mô-đun ngx_brotli)
brotli on;
brotli_comp_level 6;
brotli_types text/plain text/css application/json application/javascript text/xml application/xml+rss;

Nếu bạn không có mô-đun Brotli, hãy cài đặt nó qua trình quản lý gói hoặc biên dịch Nginx với --add-module=....

6. Tinh chỉnh Cài đặt Kết Nối

Điều chỉnh số lượng tiến trình worker và cài đặt keepalive để phù hợp với phần cứng của bạn.

nginx Copy
worker_processes auto;
worker_connections 1024;
keepalive_timeout 65;
keepalive_requests 100;

Các cài đặt mặc định này hoạt động tốt cho một VPS 4 lõi, nhưng bạn nên điều chỉnh worker_processes theo số lõi CPU để đạt hiệu suất tốt nhất.

7. Tự Động Hóa Việc Gia Hạn Chứng Chỉ và Tải Lại

Chứng chỉ của Let’s Encrypt hết hạn sau mỗi 90 ngày. Tự động gia hạn bằng cách sử dụng hệ thống định thời systemd hoặc cron job.

bash Copy
# Kiểm tra gia hạn trước
sudo certbot renew --dry-run

# Thêm một bộ định thời systemd (certbot tự động tạo một cái khi cài đặt)
# Đảm bảo Nginx tải lại sau khi gia hạn
sudo systemctl reload nginx

Bạn cũng có thể gắn vào --deploy-hook của Certbot để tự động tải lại Nginx.


Kết Hợp Tất Cả Lại

Sau khi thực hiện bảy bước, hãy chạy một kiểm tra nhanh:

  • openssl s_client -connect example.com:443 -servername example.com – xác minh bộ mã hóa và phiên bản giao thức.
  • curl -I https://example.com – xác nhận các tiêu đề HTTP/2 và nén.
  • sudo fail2ban-client status nginx-http-auth – đảm bảo jail đang hoạt động.

Các công cụ giám sát như Prometheus + Grafana có thể trực quan hóa độ trễ bắt tay TLS, tỷ lệ yêu cầu và số lượng IP bị chặn, cung cấp cho bạn cảnh báo sớm về các bất thường.

Kết luận

Bảo mật Nginx không phải là một nhiệm vụ một lần; đó là một quá trình liên tục để thắt chặt TLS, giảm thiểu bề mặt tấn công và tối ưu hóa hiệu suất cho mỗi yêu cầu. Bằng cách thực hiện bảy mẹo thực tiễn này, bạn sẽ bảo vệ người dùng, cải thiện thời gian tải và giữ cho cơ sở hạ tầng của bạn phù hợp với các tiêu chuẩn bảo mật hiện đại. Để tìm hiểu sâu hơn về việc củng cố máy chủ và các tùy chọn lưu trữ được quản lý, bạn có thể tham khảo các nguồn tài liệu tại lacidaweb.com.

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào