Cẩm nang Bảo mật Server Linux và Docker: Thực chiến từ A đến Z
Cẩm nang Bảo mật Server Linux và Docker: Thực chiến từ A đến Z
Bảo mật máy chủ là lớp phòng thủ cốt lõi của bất kỳ hệ thống web nào. Tuy nhiên, nhiều nhà phát triển chỉ tập trung vào bảo mật mã nguồn mà bỏ quên cấu hình hệ điều hành và container. Bài viết này hướng dẫn chi tiết các bước thiết lập tường lửa UFW, vá lỗ rò rỉ cổng trong Docker Compose, cấu hình HTTP Security Headers trên Nginx và ngăn chặn tấn công dò mật khẩu bằng Fail2ban.
1. Khóa cổng microservices trong Docker (Vá lỗ rò rỉ bảo mật nghiêm trọng)
Một trong những lỗi cấu hình phổ biến và nguy hiểm nhất khi sử dụng Docker Compose là expose cổng dạng "8000:8000".
Mặc định, Docker sử dụng iptables để tự động chuyển tiếp cổng. Khi cấu hình như trên, Docker sẽ map cổng 8000 của container trực tiếp lên cổng 8000 trên tất cả các card mạng (0.0.0.0) của host. Hậu quả là kẻ tấn công có thể truy cập trực tiếp vào microservice nội bộ từ bên ngoài, bypass hoàn toàn proxy hoặc xác thực SSL của Nginx!
Giải pháp: Chỉ nghe trên local interface (127.0.0.1)
Hãy cập nhật file docker-compose.yml để ràng buộc cổng chỉ lắng nghe trên localhost:
services:
auth_service:
image: auth-service:latest
ports:
- "127.0.0.1:8000:8000" # Chỉ cho phép truy cập từ localhost (Nginx proxy)
blog_service:
image: blog-service:latest
ports:
- "127.0.0.1:8001:8001" # Chặn đứng hoàn toàn truy cập trực tiếp từ bên ngoài
2. Thiết lập Tường lửa UFW (Uncomplicated Firewall) an toàn
Tường lửa giúp lọc lưu lượng truy cập mạng ở mức hệ điều hành. Trước khi kích hoạt UFW trên một server điều khiển từ xa, bạn bắt buộc phải cho phép cổng SSH, nếu không bạn sẽ bị khóa tài khoản vĩnh viễn khỏi server.
# 1. Cho phép SSH (Mặc định cổng 22)
sudo ufw allow 22/tcp
# 2. Cho phép HTTP và HTTPS phục vụ web
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
# 3. Chặn tất cả lưu lượng truy cập khác (Thiết lập mặc định)
sudo ufw default deny incoming
sudo ufw default allow outgoing
# 4. Bật tường lửa
sudo ufw enable
# 5. Kiểm tra trạng thái
sudo ufw status verbose
3. Cấu hình HTTP Security Headers trên Nginx
Bổ sung các header bảo mật giúp trình duyệt của người dùng tự vệ trước các cuộc tấn công clickjacking, XSS và MIME sniffing. Chèn các cấu hình sau vào block server trong file cấu hình Nginx của bạn:
server {
listen 443 ssl;
server_name whoimai.dev;
# 1. Chống nhúng trang vào iframe (Clickjacking protection)
add_header X-Frame-Options "DENY" always;
# 2. Ngăn trình duyệt đoán định dạng nội dung khác Content-Type khai báo
add_header X-Content-Type-Options "nosniff" always;
# 3. Kích hoạt chế độ lọc XSS trên các trình duyệt cũ
add_header X-XSS-Protection "1; mode=block" always;
# 4. Bảo vệ thông tin Referrer khi chuyển hướng
add_header Referrer-Policy "no-referrer-when-downgrade" always;
# 5. Thiết lập Content Security Policy (CSP) nghiêm ngặt
add_header Content-Security-Policy "default-src 'self' https: data: 'unsafe-inline' 'unsafe-eval'; img-src 'self' https: data: blob:;" always;
}
4. Cài đặt Fail2ban ngăn chặn Bruteforce SSH
Fail2ban tự động theo dõi file log hệ thống (như /var/log/auth.log) để phát hiện các IP liên tục đăng nhập sai và thêm các IP này vào danh sách chặn tạm thời của tường lửa iptables.
# Cài đặt fail2ban trên Ubuntu/Debian
sudo apt-get update
sudo apt-get install -y fail2ban
# Bật và khởi chạy dịch vụ
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
# Kiểm tra trạng thái hoạt động
sudo fail2ban-client status sshd
Với cấu hình mặc định, nếu một địa chỉ IP đăng nhập thất bại quá 5 lần trong vòng 10 phút, Fail2ban sẽ chặn địa chỉ IP đó trong vòng 10 phút tiếp theo. Bạn có thể thay đổi các tham số này trong file cấu hình /etc/fail2ban/jail.local.
Bình luận (0)
Đang tải bình luận...