0
0
Lập trình
TT

Danh Sách Kiểm Tra Bảo Mật Nginx với TLS và Tường Lửa

Đăng vào 4 tháng trước

• 4 phút đọc

Giới thiệu

Trong vai trò là một quản lý DevOps, bạn biết rằng một máy chủ web được cấu hình sai là một cơ hội vàng cho các kẻ tấn công. Nginx là một máy chủ web nhanh chóng và linh hoạt, nhưng khi được cài đặt mặc định, nó thiếu những cấu hình bảo mật cần thiết cho môi trường sản xuất. Danh sách kiểm tra này sẽ hướng dẫn bạn từng bước cần thiết để bảo vệ Nginx trên Ubuntu, bao gồm thiết lập TLS, quy tắc tường lửa, sử dụng fail2ban và các biện pháp bảo mật hệ điều hành cơ bản. Thực hiện từng mục và bạn sẽ giảm thiểu đáng kể bề mặt tấn công của máy chủ.


1. Cập nhật Hệ Điều Hành và Cài Đặt Các Gói Cần Thiết

bash Copy
sudo apt update && sudo apt upgrade -y
sudo apt install nginx ufw fail2ban -y
  • Đảm bảo cập nhật kernel và các gói phần mềm thường xuyên - thiết lập tự động cập nhật nếu bạn chưa làm.
  • Cài đặt certbot để tự động hóa việc cấp chứng chỉ Let's Encrypt:
bash Copy
sudo apt install certbot python3-certbot-nginx -y

2. Củng Cố Hệ Thống Linux Cơ Bản

2.1 Vô Hiệu Hóa Các Dịch Vụ Không Sử Dụng

bash Copy
sudo systemctl list-unit-files --type=service | grep enabled
# Ví dụ: vô hiệu hóa telnet, ftp, v.v.
sudo systemctl disable telnet.service

2.2 Thực Thi Chính Sách Mật Khẩu Mạnh

Chỉnh sửa tệp /etc/pam.d/common-password và thiết lập:

bash Copy
password    requisite     pam_pwquality.so retry=3 minlen=12 difok=4

2.3 Kích Hoạt Cập Nhật Bảo Mật Tự Động

bash Copy
sudo apt install unattended-upgrades -y
sudo dpkg-reconfigure unattended-upgrades

3. Cấu Hình Tường Lửa (UFW)

Chỉ cho phép các cổng bạn cần. Đối với một trang web chỉ sử dụng HTTPS:

bash Copy
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow ssh   # 22 (hoặc cổng SSH tùy chỉnh)
sudo ufw allow http  # 80 (tùy chọn, cho chuyển hướng HTTP→HTTPS)
sudo ufw allow https # 443
sudo ufw enable

Xác minh:

bash Copy
sudo ufw status verbose

4. Nhận và Củng Cố Chứng Chỉ TLS

4.1 Nhận Chứng Chỉ Miễn Phí với Certbot

bash Copy
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 để sử dụng các chứng chỉ mới và thiết lập thời gian gia hạn.

4.2 Thực Thi Các Bộ Mã Mạnh

Chỉnh sửa khối máy chủ (hoặc tạo tệp /etc/nginx/snippets/ssl-params.conf):

bash Copy
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers "ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305";
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:10m;
ssl_stapling on;
ssl_stapling_verify on;
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
add_header X-Content-Type-Options nosniff;
add_header X-Frame-Options DENY;
add_header X-XSS-Protection "1; mode=block";

Bao gồm đoạn mã này trong mỗi khối máy chủ:

bash Copy
server {
    listen 443 ssl http2;
    server_name example.com www.example.com;
    include snippets/ssl-params.conf;
    # ... các chỉ thị khác ...
}

4.3 Kiểm Tra Cấu Hình TLS của Bạn

Chạy sslscan hoặc sử dụng bài kiểm tra Qualys SSL Labs. Nhắm đến xếp hạng A+.


5. Củng Cố Nginx

  • Vô Hiệu Hóa Các Module Không Sử Dụng – biên dịch Nginx chỉ với các module cần thiết nếu bạn kiểm soát việc xây dựng.
  • Hạn Chế Kích Thước Yêu Cầu – ngăn chặn các cuộc tấn công tràn bộ đệm:
bash Copy
client_max_body_size 2M;
  • Giới Hạn Kết Nối – giảm thiểu các nỗ lực tấn công brute-force:
bash Copy
limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;
limit_req zone=one burst=20 nodelay;
  • Ẩn Phiên Bản Nginx:
bash Copy
server_tokens off;

6. Triển Khai Fail2Ban cho Nhật Ký Nginx

Tạo tệp /etc/fail2ban/filter.d/nginx-http-auth.conf (nếu sử dụng xác thực HTTP) hoặc tái sử dụng bộ lọc nginx-http-auth hiện có.

Sau đó thêm một jail trong /etc/fail2ban/jail.local:

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

Khởi động lại Fail2Ban:

bash Copy
sudo systemctl restart fail2ban
sudo fail2ban-client status nginx-http-auth

7. Kích Hoạt HTTP Strict Transport Security (HSTS) Preload

Dòng add_header Strict-Transport-Security từ đoạn mã TLS đã bao gồm preload. Gửi miền của bạn đến danh sách preload HSTS để các trình duyệt thực thi HTTPS ngay cả khi lần liên hệ đầu tiên.


8. Thiết Lập Giám Sát Tự Động Gia Hạn Chứng Chỉ

Certbot tạo một bộ hẹn giờ systemd, nhưng bạn cần xác minh rằng nó hoạt động:

bash Copy
sudo systemctl list-timers | grep certbot
sudo certbot renew --dry-run

Cân nhắc thêm một kịch bản kiểm tra sức khỏe đơn giản để cảnh báo bạn nếu việc gia hạn thất bại.


9. Xác Minh Toàn Bộ Hệ Thống

  1. Quét Cổngnmap -sS -p 80,443 <địa-chỉ-ip-của-bạn> nên chỉ hiển thị cổng 443 mở (nếu bạn đã vô hiệu hóa HTTP).
  2. Kiểm Tra Tiêu Đềcurl -I https://example.com và xác nhận các tiêu đề bảo mật.
  3. Xem Nhật Kýsudo tail -f /var/log/nginx/access.log trong khi bạn duyệt để bắt bất kỳ bất thường 4xx/5xx nào.

10. Danh Sách Kiểm Tra Bảo Trì Liên Tục

  • [ ] Áp dụng các bản vá bảo mật hệ điều hành hàng tuần.
  • [ ] Xem xét các quy tắc UFW sau mỗi lần triển khai dịch vụ mới.
  • [ ] Thay đổi khóa TLS mỗi 12-18 tháng.
  • [ ] Kiểm tra các lệnh cấm của Fail2Ban hàng tháng để điều chỉnh ngưỡng.
  • [ ] Chạy bài kiểm tra SSL Labs sau mỗi thay đổi cấu hình Nginx.

Kết Luận

Bảo mật Nginx là một nỗ lực nhiều lớp: giữ cho hệ điều hành được cập nhật, khóa mạng với tường lửa, áp đặt TLS mạnh mẽ và thêm các biện pháp bảo vệ thời gian chạy như Fail2Ban. Bằng cách hoàn thành từng mục trong danh sách kiểm tra này, bạn sẽ chuyển từ một cài đặt mặc định thành một máy chủ web đã được củng cố, sẵn sàng cho sản xuất.

Nếu bạn cần một môi trường lưu trữ nhanh chóng và đáng tin cậy mà đã tuân theo nhiều thực tiễn tốt nhất này, hãy xem xét https://lacidaweb.com để tìm các giải pháp quản lý phù hợp cho các nhà phát triển.

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