0
0
Lập trình
Sơn Tùng Lê
Sơn Tùng Lê103931498422911686980

7 Mẹo Bảo Mật Nginx với TLS và Tường Lửa trên Máy Chủ Sản Xuất

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

• 5 phút đọc

Giới thiệu

Khi chạy Nginx trong môi trường sản xuất, bạn đang ở tuyến đầu của lưu lượng web. Một máy chủ cấu hình sai có thể làm lộ dữ liệu nhạy cảm, mời gọi các cuộc tấn công DDoS, hoặc rò rỉ số phiên bản nội bộ. Bài viết này sẽ hướng dẫn các bước cần thiết để tăng cường bảo mật, bao gồm TLS, quy tắc tường lửa và một số điều chỉnh thường bị bỏ qua, giúp bạn bảo vệ stack mà không làm giảm hiệu suất.


1️⃣ Nhận Chứng Chỉ TLS Hợp Lệ

Chứng chỉ tự ký là đủ cho việc thử nghiệm nội bộ, nhưng trình duyệt và các API client mong đợi một chuỗi chứng chỉ đáng tin cậy. Cách dễ nhất để nhận được một chứng chỉ là sử dụng Let’s Encrypt:

Copy
# Cài đặt Certbot (ví dụ cho Debian/Ubuntu)
sudo apt-get update && sudo apt-get install -y certbot python3-certbot-nginx

# Yêu cầu chứng chỉ cho example.com và www.example.com
sudo certbot --nginx -d example.com -d www.example.com

Certbot sẽ tự động chỉnh sửa cấu hình Nginx của bạn, thêm một khối listen 443 ssl;, và thiết lập một cron job để gia hạn tự động. Kiểm tra xem việc gia hạn có hoạt động không với lệnh sudo certbot renew --dry-run.

Thực tiễn tốt nhất:

  • Sử dụng chứng chỉ từ Let’s Encrypt cho môi trường sản xuất.
  • Kiểm tra định kỳ xem chứng chỉ có được gia hạn tự động không.

2️⃣ Tăng Cường Cài Đặt SSL/TLS

Các trình duyệt hiện đại hỗ trợ TLS 1.3, mang lại bảo mật tốt hơn và độ trễ thấp hơn. Vô hiệu hóa các giao thức cũ và các mã hóa yếu trong một đoạn mã ssl.conf:

Copy
# /etc/nginx/snippets/ssl.conf
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers \
  "TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256";

# Kích hoạt HTTP/2 để tăng tốc độ
listen 443 ssl http2;

# HSTS (buộc HTTPS trong một năm)
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;

# OCSP stapling
ssl_stapling on;
ssl_stapling_verify on;

Bao gồm đoạn mã này trong mỗi khối máy chủ: include snippets/ssl.conf;. Nhớ tải lại Nginx sau khi thay đổi: sudo systemctl reload nginx.

Lưu ý quan trọng:

  • Đảm bảo rằng tất cả các máy chủ đều sử dụng cùng một cấu hình SSL.

3️⃣ Ẩn Danh Tính Máy Chủ

Theo mặc định, Nginx tiết lộ phiên bản của nó trong tiêu đề Server, tạo điều kiện cho kẻ tấn công khai thác các lỗ hổng đã biết. Tắt tính năng này và thay thế bằng một giá trị chung:

Copy
# Trong http { }
server_tokens off;
more_clear_headers Server;   # yêu cầu mô-đun ngx_headers_more

Nếu bạn không có ngx_headers_more, bạn có thể đơn giản thiết lập server_tokens off;—hầu hết các scanner sẽ vẫn thấy nginx nhưng không phải phiên bản chính xác.

Những điều cần tránh:

  • Đừng quên kiểm tra xem các scanner có nhận diện được phiên bản hay không.

4️⃣ Triển Khai Quy Tắc Tường Lửa Dựa Trên Máy Chủ

Một tường lửa được cấu hình đúng sẽ chặn tất cả ngoại trừ các cổng mà bạn thực sự cần. Trên Ubuntu/Debian, ufw rất dễ sử dụng:

Copy
sudo ufw default deny incoming
sudo ufw default allow outgoing

# Cho phép HTTP/HTTPS từ mọi nơi
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

# SSH giới hạn đến IP quản trị của bạn (thay thế bằng IP của bạn)
sudo ufw allow from 203.0.113.42 to any port 22 proto tcp

# Kích hoạt tường lửa
sudo ufw enable

Nếu bạn đang sử dụng nhà cung cấp đám mây, hãy khóa nhóm bảo mật vào cùng một cổng.

Mẹo hiệu suất:

  • Đảm bảo rằng tường lửa không chặn các cổng cần thiết cho ứng dụng của bạn.

5️⃣ Triển Khai Fail2Ban Để Bảo Vệ Chống Tấn Công Brute-Force

Fail2Ban theo dõi các nhật ký của Nginx để phát hiện mẫu 4xx/5xx lặp lại và cấm địa chỉ IP vi phạm qua iptables. Cài đặt và kích hoạt một bộ lọc có sẵn:

Copy
sudo apt-get install -y fail2ban

# Tạo một nhà tù cho các lỗi xác thực HTTP của Nginx
cat <<EOF | sudo tee /etc/fail2ban/jail.d/nginx-http-auth.conf
[nginx-http-auth]
enabled = true
filter = nginx-http-auth
logpath = /var/log/nginx/error.log
maxretry = 5
bantime = 3600
EOF

sudo systemctl restart fail2ban

Bạn có thể thêm các bộ lọc tùy chỉnh cho các nỗ lực vượt qua giới hạn tần suất hoặc các chuỗi yêu cầu không hợp lệ.

Lời khuyên:

  • Theo dõi các nhật ký để đảm bảo không có IP hợp lệ nào bị chặn.

6️⃣ Kích Hoạt Giới Hạn Tần Suất Tại Cấp Máy Chủ

Ngay cả khi đã có một tường lửa, một cú sốc đột ngột có thể làm quá tải các dịch vụ upstream của bạn. Các chỉ thị limit_req_zonelimit_req trong Nginx sẽ hạn chế các client lạm dụng:

Copy
# Định nghĩa một vùng bộ nhớ chia sẻ (10 MB có thể chứa ~160k trạng thái)
limit_req_zone $binary_remote_addr zone=mylimit:10m rate=10r/s;

server {
    listen 443 ssl http2;
    ...
    location /api/ {
        limit_req zone=mylimit burst=20 nodelay;
        proxy_pass http://backend;
    }
}

Điều chỉnh rateburst dựa trên hồ sơ lưu lượng của bạn. Kết hợp với limit_conn nếu bạn cần giới hạn các kết nối đồng thời từ mỗi IP.

Lưu ý:

  • Theo dõi hiệu suất của máy chủ để điều chỉnh các thông số cho phù hợp.

7️⃣ Kiểm Tra, Giám Sát và Cải Tiến

Việc tăng cường bảo mật là một quá trình liên tục. Sử dụng các công cụ sau để xác minh bạn không làm hỏng bất kỳ điều gì:

  • SSL Labs – Thực hiện quét nhanh bên ngoài cho miền của bạn để xác nhận cài đặt giao thức/mã hóa.
  • curl – Kiểm tra tiêu đề cục bộ: curl -I https://example.com nên hiển thị Strict-Transport-Security và không có phiên bản Server.
  • Prometheus + Grafana – Xuất các chỉ số Nginx (stub_status) và theo dõi các đợt tăng đột biến trong tỷ lệ 4xx/5xx.
  • Logwatch – Thiết lập tóm tắt hàng ngày về các từ chối từ tường lửa và các cấm từ Fail2Ban.

Khi bạn phát hiện một false positive (ví dụ, một IP hợp lệ bị chặn), tinh chỉnh maxretry hoặc cho phép địa chỉ đó trong /etc/fail2ban/jail.local.


Kết luận

Bằng cách thực hiện bảy bước này—TLS đáng tin cậy, ẩn dấu vết máy chủ, quy tắc tường lửa chặt chẽ, giảm thiểu tự động các cuộc tấn công brute-force, và giới hạn tần suất thông minh—bạn sẽ giảm đáng kể bề mặt tấn công của bất kỳ dịch vụ nào chạy trên Nginx. Hãy nhớ rằng, bảo mật là một thói quen, không phải là một danh sách kiểm tra một lần. Để tìm hiểu sâu hơn về việc tăng cường Linux và giám sát đám mây, bạn có thể tìm thấy các tài nguyên tại lacidaweb.com hữu ích khi bạn tiếp tục hoàn thiện quy trình sản xuất của mình.

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