1. Xác định yêu cầu phần cứng tối thiểu
Để đảm bảo hiệu năng cho các tính năng bảo mật như TDE (mã hóa) và Audit (kiểm toán) trong các phần sau, server cần cấu hình vượt mức tối thiểu của database thuần túy. TDE tiêu tốn CPU để mã hóa/giải mã, Audit tiêu tốn I/O để ghi log.
CPU: Tối thiểu 4 nhân vật lý (Physical Cores). TDE hoạt động song song, cần nhiều nhân để không gây nghẽn cổ chai.
RAM: Tối thiểu 16GB. Cần bộ đệm lớn cho OS, Database, và key cache của TDE.
Storage: SSD NVMe là bắt buộc. Disk I/O là nút thắt chính của Audit log và Write-heavy operations. Tối thiểu 100GB dung lượng.
Verify kết quả: Chạy lệnh kiểm tra tài nguyên thực tế.
lscpu | grep "Model name" && free -h && lsblk
Kết quả mong đợi: Xem thông tin CPU, tổng RAM available và danh sách disk NVMe.
2. Lựa chọn hệ điều hành và phiên bản Database
2.1. Lựa chọn Linux Distribution
Chọn Ubuntu Server 22.04 LTS (Jammy Jellyfish). Phiên bản này có kernel mới (5.15+) hỗ trợ tốt các tính năng hardening, lifecycle dài 10 năm, và cộng đồng hỗ trợ bảo mật lớn.
Tránh các bản distro rolling-release (Arch, Fedora) cho môi trường Production database để đảm bảo sự ổn định của các package kernel.
2.2. Lựa chọn Database Engine
Chọn PostgreSQL 16. PostgreSQL có module TDE tích hợp tốt hơn (thông qua pgTDE hoặc native encryption trong phiên bản mới), cơ chế Audit (pgAudit) mạnh mẽ và open-source hoàn toàn.
MySQL 8.0 cũng là lựa chọn tốt, nhưng trong series này chúng ta tập trung vào PostgreSQL để tận dụng các tính năng advanced security của PostgreSQL.
2.3. Verify kết quả lựa chọn
Đảm bảo bạn đã tải đúng ISO và có file PostgreSQL version 16.
ls -lh /var/www/downloads/ubuntu-22.04-live-server-amd64.iso && dpkg -l | grep postgresql
Kết quả mong đợi: Thấy file ISO Ubuntu 22.04 và package PostgreSQL 16 đã sẵn sàng (nếu đã cài đặt thử) hoặc file source.
3. Tải tài nguyên và công cụ quản lý
Bước này chuẩn bị môi trường build và các công cụ cần thiết để triển khai server. Chúng ta sẽ setup repository, tải source code và các công cụ mạng.
3.1. Setup Environment Variables
Thiết lập biến môi trường để định nghĩa đường dẫn cài đặt và phiên bản, giúp script tự động hóa sau này dễ quản lý.
export DB_VERSION="16.1"
export INSTALL_DIR="/opt/postgresql"
export BACKUP_DIR="/var/backups/db"
echo "$DB_VERSION $INSTALL_DIR $BACKUP_DIR" > /tmp/env_config.txt
Kết quả mong đợi: File /tmp/env_config.txt được tạo với nội dung cấu hình.
3.2. Cài đặt công cụ quản lý cơ bản
Cài đặt các công cụ bắt buộc: git (để pull source), wget/curl (tải file), htop (giám sát), và openssl (xử lý chứng chỉ cho TDE).
apt update && apt install -y git wget curl htop openssl build-essential
Kết quả mong đợi: Tất cả package được cài đặt thành công, không có lỗi dependency.
3.3. Tạo thư mục và tải source PostgreSQL
Tạo thư mục làm việc và tải source code từ trang chủ để đảm bảo phiên bản chính chủ (không qua repo 3rd party chưa kiểm định).
mkdir -p $INSTALL_DIR && cd $INSTALL_DIR
wget https://ftp.postgresql.org/pub/source/v$DB_VERSION/postgresql-$DB_VERSION.tar.gz
tar -xzf postgresql-$DB_VERSION.tar.gz
Kết quả mong đợi: Thư mục postgresql-$DB_VERSION xuất hiện trong /opt/postgresql.
3.4. Verify kết quả tải tài nguyên
Chạy lệnh kiểm tra tính toàn vẹn của file tải về.
cd $INSTALL_DIR && sha256sum postgresql-$DB_VERSION.tar.gz
Kết quả mong đợi: Hash code khớp với giá trị công bố trên trang postgresql.org (kiểm tra thủ công).
4. Cấu hình mạng ban đầu và Firewall
Trước khi cài đặt DB, cần cô lập server khỏi mạng công cộng, chỉ mở cổng quản trị và cổng DB cho trust network. Sử dụng UFW (Uncomplicated Firewall) trên Ubuntu.
4.1. Cấu hình IP tĩnh
Cấu hình IP tĩnh để đảm bảo các rule firewall và connection string ổn định. Giả sử IP mạng là 192.168.1.0/24.
cat > /etc/netplan/01-netcfg.yaml
Kết quả mong đợi: Server có IP 192.168.1.100 và có thể ping được gateway.
4.2. Kích hoạt và cấu hình UFW
Thiết lập policy mặc định là deny incoming (chặn tất cả kết nối từ ngoài vào) và allow outgoing (cho phép server ra ngoài). Đây là nguyên tắc Zero Trust ban đầu.
ufw default deny incoming
ufw default allow outgoing
ufw allow 22/tcp # SSH cho admin
ufw allow from 192.168.1.0/24 to any port 5432 proto tcp # DB port cho nội bộ
ufw --force enable
Kết quả mong đợi: UFW bật, rule 22 và 5432 (chỉ từ mạng nội bộ) được thêm vào.
4.3. Verify kết quả Firewall
Kiểm tra trạng thái firewall và các rule đã áp dụng.
ufw status verbose
Kết quả mong đợi: Status là active, Policy: Incoming (deny), Outgoing (allow), và thấy rõ các rule allow cho port 22 và 5432.
Điều hướng series:
Mục lục: Series: Triển khai Database An toàn với TDE, Audit và Linux Kernel Hardening
Phần 2: Hardening Linux Kernel: Bảo vệ nền tảng hệ điều hành »