Security

Cấu hình iptables cơ bản cho VPS Ubuntu 24.04

Vì sao cần cấu hình iptables cho VPS Ubuntu?

Khi nhận một VPS giá rẻ Ubuntu mới tinh từ nhà cung cấp, việc đầu tiên sau khi SSH vào là thiết lập tường lửa. Iptables là công cụ tường lửa tích hợp sẵn trong kernel Linux, không cần cài thêm gì. Nó cho phép bạn kiểm soát toàn bộ luồng traffic vào ra VPS: chặn IP lạ quét SSH, chỉ mở port 80/443 cho web, hoặc khóa hoàn toàn các cổng không dùng đến. Nếu bạn đã quen với cấu hình ufw firewall cơ bản trên Ubuntu VPS, iptables là tầng sâu hơn, cho bạn toàn quyền kiểm soát từng gói tin.

Yêu cầu trước khi bắt đầu

  • Một VPS chạy Ubuntu 24.04 LTS (các bước này cũng chạy trên Debian 12, AlmaLinux 9). Bạn có thể thuê VPS Linux tại các nhà cung cấp uy tín ở Việt Nam.
  • User có quyền sudo hoặc truy cập root trực tiếp.
  • Kết nối SSH đang hoạt động (có session dự phòng nếu bạn ở xa, tránh lock mất tay).

Bước 1 - Kiểm tra trạng thái iptables hiện tại

Trước khi thêm rules, hãy xem VPS đang có gì. Lệnh sau liệt kê tất cả rules trong bảng filter (mặc định):

sudo iptables -L -n -v

Kết quả sẽ hiện các chain INPUT, FORWARD, OUTPUT. Nếu bạn thấy Chain INPUT (policy ACCEPT) và không có rules nào, tức là VPS đang mở cửa toàn bộ, rất nguy hiểm.

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Verify: Nếu policy là ACCEPT với 0 rules, bạn cần hành động ngay.

Bước 2 - Thiết lập policy mặc định (DROP)

Chính sách an toàn nhất: chặn mọi kết nối đến, chỉ mở những port bạn cần. Chạy lần lượt:

sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT

Giải thích: -P (policy) đặt mặc định cho chain. DROP với INPUT/FORWARD có nghĩa mọi gói tin đến không khớp rule nào sẽ bị hủy. OUTPUT để ACCEPT vì bạn muốn VPS tự do gửi gói tin ra ngoài (vd cập nhật apt).

Cảnh báo: Sau khi chạy lệnh này, SSH hiện tại vẫn giữ kết nối. Nhưng nếu bạn disconnect và chưa có rule cho phép SSH, bạn sẽ mất quyền truy cập. Hãy chạy luôn bước 3 ngay sau đó.

Bước 3 - Mở port SSH (22) và Loopback

Đây là step cứu mạng. Bạn cần cho phép SSH trước khi disconnect:

sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT

Giải thích:
- Dòng 1: cho phép traffic từ loopback (127.0.0.1), cực kỳ quan trọng cho các service nội bộ.
- Dòng 2: cho phép gói tin thuộc các kết nối đã được thiết lập (bạn đang SSH đó).
- Dòng 3: mở cổng TCP 22 cho SSH. Bạn có thể thay đổi port nếu dùng port khác.

Verify ngay: Mở một terminal mới, thử SSH vào VPS. Nếu vào được, bạn đã an toàn.

Bước 4 - Mở port cho web, DNS, monitoring

Nếu VPS chạy web server hoặc các dịch vụ khác, hãy mở thêm từng port. Bảng dưới đây liệt kê các port phổ biến:

Dịch vụPortGiao thứcLệnh mở
HTTP80TCPiptables -A INPUT -p tcp --dport 80 -j ACCEPT
HTTPS443TCPiptables -A INPUT -p tcp --dport 443 -j ACCEPT
DNS53UDPiptables -A INPUT -p udp --dport 53 -j ACCEPT
Ping (ICMP)N/AICMPiptables -A INPUT -p icmp -j ACCEPT
MySQL (nội bộ)3306TCPiptables -A INPUT -s 10.0.0.0/8 -p tcp --dport 3306 -j ACCEPT

Ví dụ mở HTTP và HTTPS cho web server:

sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT

Nếu VPS là VPS WordPress hoặc VPS n8n, bạn cũng cần mở thêm port cho các ứng dụng đó (vd port 5678 cho n8n).

Bước 5 - Chặn SSH bruteforce bằng rate limiting

Một rule quan trọng thiết yếu: giới hạn số kết nối SSH từ một IP trong khoảng thời gian ngắn. Điều này ngăn chặn brute force hiệu quả:

sudo iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -m recent --set --name SSH
sudo iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -m recent --update --seconds 60 --hitcount 4 --rttl --name SSH -j DROP

Giải thích: Rule này sử dụng module recent để theo dõi địa chỉ IP. Nếu có hơn 4 kết nối SSH mới trong 60 giây từ cùng một IP, IP đó sẽ bị DROP trong 60 giây tiếp theo. Cờ --rttl giúp chống spoofing IP.

Bước 6 - Lưu rules lâu dài

Iptables rules mất đi sau reboot nếu bạn không lưu. Dùng gói iptables-persistent để lưu tự động:

sudo apt update
sudo apt install iptables-persistent -y

Trong quá trình cài đặt, bạn sẽ được hỏi có lưu rules hiện tại không, chọn Yes. Sau này khi thay đổi rules, chạy lại để lưu:

sudo netfilter-persistent save

Verify: Reboot VPS và chạy sudo iptables -L -n để kiểm tra rules vẫn còn.

Xử lý lỗi thường gặp

Lỗi 1: Bị lock khỏi VPS sau khi đặt policy DROP

Nguyên nhân: Chưa thêm rule accept SSH trước khi set policy. Giải pháp: Sử dụng IPMI/KVM của nhà cung cấp hoặc yêu cầu support reboot vào rescue mode, sau đó mount ổ cứng và sửa file /etc/iptables/rules.v4. Chèn dòng -A INPUT -p tcp --dport 22 -j ACCEPT ở đầu file.

Lỗi 2: Web server không truy cập được từ ngoài

Kiểm tra: Chạy sudo iptables -L -n xem có rule ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 không. Nếu không có, thêm lại rule. Kiểm tra thêm service web đã chạy chưa: systemctl status nginx.

Lỗi 3: Ping ra ngoài được nhưng không vào được

Nguyên nhân: Chưa có rule ICMP cho INPUT. Thêm rule: sudo iptables -A INPUT -p icmp -j ACCEPT. Nếu muốn giới hạn, chỉ cho phép ICMP echo-request: sudo iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT.

Câu hỏi thường gặp

Iptables và ufw khác nhau thế nào?

Ufw là front-end cho iptables, giúp viết rules dễ hơn. Iptables là công cụ gốc, mạnh hơn và linh hoạt hơn. Nếu bạn mới bắt đầu, ufw là lựa chọn tốt. Nếu cần kiểm soát chi tiết từng gói tin, iptables là lựa chọn đúng.

Có thể dùng iptables để chặn DDoS không?

Có, iptables có thể chặn một số dạng DDoS cơ bản như SYN flood, ICMP flood bằng các module limitrecent. Tuy nhiên, với DDoS lớn bạn cần giải pháp chuyên dụng như Cloudflare hoặc thiết bị hardware firewall.

Sao lưu iptables rules như thế nào?

Dùng lệnh sudo iptables-save > /root/iptables-backup-$(date +%Y%m%d).txt để xuất rules ra file text. Để khôi phục: sudo iptables-restore < /root/iptables-backup-20250301.txt.

Có nên dùng iptables trên VPS Windows không?

Không, iptables là Linux kernel module. Trên Windows Server, bạn dùng Windows Firewall với Advanced Security (WF.msc).

Iptables có ảnh hưởng hiệu năng không?

Với vài chục rules, ảnh hưởng không đáng kể. Với hàng nghìn rules, CPU sẽ phải xử lý nhiều hơn. Nếu VPS có cấu hình thấp (1 vCPU, 1GB RAM), hãy tối ưu rules, đặt các rule thường dùng lên đầu.

Bài viết liên quan

Lưu ý: Bài viết mang tính tham khảo, tổng hợp kiến thức chung. Mỗi hệ thống, hạ tầng và nhu cầu có đặc thù riêng, nên kiểm thử trong môi trường an toàn và tham vấn kỹ sư trước khi triển khai thực tế.