Secure Ubuntu server cho website WordPress: Nginx, PHP-FPM, SSL, quyền file
Một site WordPress nhanh chưa đủ. Site phải khó bị chiếm quyền, dễ khôi phục, ít lộ thông tin, đúng quyền file, có SSL chuẩn, Nginx/PHP-FPM tách bạch. Phần lớn sự cố WordPress không đến từ “hacker quá giỏi”, mà từ cấu hình ẩu: SSH mở rộng, user dùng chung, file 777, PHP execute trong uploads, SSL yếu, plugin lỗi thời, backup không test.
Bài này tập trung vào hardening Ubuntu server chạy WordPress với stack: Ubuntu + Nginx + PHP-FPM + MariaDB/MySQL + SSL.
Đổi lại: update phải qua SSH/WP-CLI/deploy pipeline.
8. Bảo vệ database
Tạo DB/user riêng, không dùng root DB cho WordPress.
CREATE DATABASE wordpress CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'wpuser'@'localhost' IDENTIFIED BY 'strong_password_here';
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, ALTER, INDEX, DROP ON wordpress.* TO 'wpuser'@'localhost';
FLUSH PRIVILEGES;
Không cấp GRANT ALL nếu không cần. Không mở MySQL ra Internet. Kiểm tra bind:
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
Nên có:
bind-address = 127.0.0.1
9. WordPress hardening bên trong
Salt keys
Tạo salt mới:
https://api.wordpress.org/secret-key/1.1/salt/
Dán vào wp-config.php.
Prefix table
Không dùng wp_ nếu cài mới. Ví dụ:
$table_prefix = 'x7p_';
Không phải lớp bảo vệ mạnh, nhưng giảm bot scan cơ bản.
Giới hạn login
Dùng plugin uy tín: Wordfence, Solid Security, Limit Login Attempts Reloaded. Nhưng đừng cài quá nhiều plugin bảo mật chồng chéo → lỗi, chậm, false positive.
Update đều
Core, plugin, theme lỗi thời → nguyên nhân phổ biến nhất.
sudo fail2ban-client status
sudo fail2ban-client status sshd
Có thể thêm jail cho Nginx login flood, nhưng cần regex đúng. Sai regex → chặn nhầm user thật. Với WordPress, plugin login limit thường dễ triển khai hơn.
12. Checklist nhanh sau triển khai
– SSH root login: off.
– Password SSH: off, dùng key.
– UFW: chỉ mở 22/80/443.
– Nginx: chặn PHP trong uploads.
– SSL: Let’s Encrypt auto-renew OK.
– PHP: expose_php=Off, display_errors=Off.
– File perms: dir 755, file 644, wp-config.php640/600.
– DB user: riêng, quyền tối thiểu.
– WordPress: update, salt mới, không edit file từ admin.
– Backup: offsite, test restore.
– Logs: theo dõi định kỳ.
Kết luận thực tế
Secure WordPress trên Ubuntu không phải một lệnh cài plugin. Nó là chuỗi lớp bảo vệ: OS an toàn → SSH khóa chặt → firewall tối giản → Nginx chặn đường nguy hiểm → PHP-FPM tách quyền → SSL chuẩn → file permission đúng → DB least privilege → backup phục hồi được.
Nếu chỉ làm 5 việc quan trọng nhất: tắt SSH password/root, bật UFW, chặn PHP trong uploads, sửa quyền file, backup offsite. Làm thêm SSL header, PHP-FPM pool riêng, DB quyền tối thiểu → site WordPress vững hơn rõ rệt, ít phụ thuộc may mắn, dễ vận hành lâu dài.