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
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
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
# 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
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
[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
# 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
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
# 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.