Nguyên tắc duy nhất cần nhớ: chặn hết, rồi chỉ mở đúng cổng cần thiết. Mọi cổng đang mở mà bạn không biết dùng để làm gì đều là một cánh cửa bỏ ngỏ.
Trước tiên: xem đang mở những gì
sudo ss -tulpn
Cột Local Address cho biết dịch vụ lắng nghe ở đâu. 127.0.0.1:3306 là chỉ nghe nội bộ (an toàn), còn 0.0.0.0:3306 là mở ra toàn Internet.
ufw — Ubuntu, Debian
sudo apt install ufw
sudo ufw default deny incoming # chặn mọi kết nối vào
sudo ufw default allow outgoing # cho phép đi ra
sudo ufw allow 22/tcp # SSH — LÀM TRƯỚC TIÊN
sudo ufw allow 80,443/tcp # web
sudo ufw enable
sudo ufw status verbose
Mở cổng SSH trước khi bật tường lửa. Quên bước này là mất luôn quyền truy cập máy chủ từ xa.
Giới hạn theo nguồn
# Chỉ cho phép SSH từ dải mạng văn phòng
sudo ufw allow from 203.0.113.0/24 to any port 22 proto tcp
# Chỉ cho phép một IP truy cập MySQL
sudo ufw allow from 10.0.0.5 to any port 3306 proto tcp
# Chống dò mật khẩu SSH ở mức tường lửa
sudo ufw limit 22/tcp
Xóa quy tắc
sudo ufw status numbered
sudo ufw delete 3
firewalld — RHEL, Rocky, AlmaLinux
sudo systemctl enable --now firewalld
sudo firewall-cmd --state
sudo firewall-cmd --list-all
# Mở dịch vụ (nhớ --permanent để giữ sau reboot)
sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --permanent --add-port=8080/tcp
sudo firewall-cmd --reload
Thiếu --permanent thì quy tắc biến mất sau khi khởi động lại; thiếu --reload thì quy tắc vừa thêm chưa có hiệu lực. Cần cả hai.
Giới hạn theo IP với rich rule
sudo firewall-cmd --permanent --add-rich-rule=\
'rule family="ipv4" source address="10.0.0.5" port port="3306" protocol="tcp" accept'
sudo firewall-cmd --reload
Đừng quên tầng phía trên
Tường lửa của nhà cung cấp đám mây (Security Group của AWS, firewall của DigitalOcean) chạy trước khi gói tin tới máy chủ. Nếu mở cổng ở ufw mà vẫn không truy cập được, hãy kiểm tra tầng đó.
Kiểm chứng từ bên ngoài
nmap -Pn may-chu-cua-ban # chạy từ MỘT MÁY KHÁC
Chỉ quét máy chủ của chính bạn. Kết quả lý tưởng cho một web server: đúng ba cổng 22, 80, 443 — không hơn.
