Yêu cầu phần cứng và phiên bản hệ điều hành
Để đảm bảo hiệu suất và khả năng mở rộng cho Database, bạn cần chuẩn bị phần cứng tối thiểu với 4 nhân CPU, 8GB RAM và 50GB ổ cứng SSD. Hệ điều hành được hỗ trợ chính thức là Ubuntu 22.04 LTS hoặc Debian 12 Bookworm.
Việc chọn bản LTS (Long Term Support) là bắt buộc để đảm bảo nhận được các bản vá bảo mật kernel trong thời gian dài, tránh các lỗ hổng zero-day trên các bản phát hành không ổn định.
Kiểm tra phiên bản kernel hiện tại bằng lệnh sau để xác nhận môi trường đáp ứng yêu cầu:
uname -r
Kết quả mong đợi: Phiên bản kernel từ 5.15 trở lên đối với Ubuntu 22.04 hoặc 6.1 trở lên đối với Debian 12.
Cài đặt hệ điều hành và cập nhật kho gói
Bước đầu tiên là đảm bảo hệ điều hành đã được cài đặt sạch sẽ và cập nhật toàn bộ các gói phần mềm lên phiên bản mới nhất để vá các lỗi bảo mật đã biết.
Chạy lệnh cập nhật danh sách gói và nâng cấp toàn bộ hệ thống. Quá trình này có thể mất vài phút tùy thuộc vào tốc độ mạng.
sudo apt update && sudo apt upgrade -y
Kết quả mong đợi: Không có lỗi (error) và thông báo "X packages can be upgraded" hoặc "0 upgraded" nếu hệ thống đã mới nhất.
Đảm bảo cài đặt các công cụ hệ thống cơ bản cần thiết cho việc quản lý và debug sau này như curl, vim, và net-tools.
sudo apt install -y curl vim net-tools htop procps
Kết quả mong đợi: Các gói được cài đặt thành công và sẵn sàng sử dụng ngay lập tức.
Tạo người dùng hệ thống riêng biệt cho Database
Tuyệt đối không chạy Database dưới quyền root. Bạn cần tạo một người dùng hệ thống mới (system user) không có shell login và không thuộc nhóm sudo để giảm thiểu rủi ro khi bị xâm nhập.
Sử dụng lệnh adduser với các cờ --system, --no-create-home, --shell để tạo người dùng chỉ dành cho dịch vụ chạy nền.
sudo adduser --system --no-create-home --shell /bin/false dbsecure
Kết quả mong đợi: Người dùng "dbsecure" được tạo ra, không có home directory và không thể login qua SSH.
Đảm bảo người dùng mới này không nằm trong bất kỳ nhóm đặc quyền nào như sudo hay wheel. Kiểm tra bằng lệnh id.
id dbsecure
Kết quả mong đợi: Output hiển thị UID và GID của dbsecure, và phần "groups" chỉ hiển thị "dbsecure", không có sudo hay wheel.
Cấu hình Firewall cơ bản (UFW)
Trước khi triển khai các lớp bảo mật nâng cao như Seccomp, bạn phải khóa chặt truy cập mạng chỉ để lại các cổng thực sự cần thiết. Sử dụng UFW (Uncomplicated Firewall) trên Ubuntu hoặc iptables trên Debian.
Đầu tiên, thiết lập chính sách mặc định là từ chối tất cả các kết nối đến (deny incoming) và cho phép tất cả các kết nối đi ra (allow outgoing).
sudo ufw default deny incoming && sudo ufw default allow outgoing
Kết quả mong đợi: UFW báo "Default deny policy changed" và "Default allow policy changed".
Cho phép truy cập SSH (port 22) trước khi kích hoạt firewall để tránh bị khóa mình ra ngoài server.
sudo ufw allow 22/tcp
Kết quả mong đợi: Thông báo "Rules updated" và "Rules updated (v6)".
Cho phép truy cập cổng Database (ví dụ: 5432 cho PostgreSQL, 3306 cho MySQL) chỉ từ địa chỉ IP quản trị cụ thể (ví dụ: 192.168.1.100) thay vì mở toàn bộ mạng.
sudo ufw allow from 192.168.1.100 to any port 5432 proto tcp
Kết quả mong đợi: Thông báo "Rules updated" xác nhận quy tắc đã được thêm vào.
Kích hoạt firewall để áp dụng tất cả các quy tắc đã cấu hình. Hệ thống sẽ hỏi xác nhận, hãy gõ "y".
echo "y" | sudo ufw enable
Kết quả mong đợi: Thông báo "Firewall is active and enabled on system startup".
Verify cấu hình firewall bằng cách liệt kê tất cả các quy tắc hiện hành.
sudo ufw status verbose
Kết quả mong đợi: Output hiển thị "Status: active", "Default: deny (incoming), allow (outgoing)" và danh sách các port/IP đã được phép.
Điều hướng series:
Mục lục: Series: Xây dựng Database an toàn với Linux Seccomp và Systemd Service Hardening
Phần 2: Cài đặt và cấu hình Database trong môi trường Docker »