
Giới thiệu
Bạn có bao giờ tự hỏi làm sao hàng trăm server trong mạng nội bộ lại truy cập Internet qua một IP duy nhất? Hay làm thế nào để chặn truy cập trái phép vào pipeline CI/CD? NAT và firewall là hai công cụ mạnh mẽ để kiểm soát lưu lượng. Trong bài thứ sáu của series, chúng ta sẽ đi sâu vào NAT và PAT, cách firewall bảo vệ mạng, và thực hành cơ bản để áp dụng trong DevOps.
NAT: Kết nối nội bộ với thế giới
NAT Là Gì?
NAT (Network Address Translation) là kỹ thuật ánh xạ địa chỉ IP riêng (private) thành IP công cộng (public) để truy cập Internet.
- Cơ chế: Router thay đổi IP nguồn trong header gói tin trước khi gửi ra ngoài.
- Lợi ích:
- Tiết kiệm IP công cộng.
- Ẩn mạng nội bộ, tăng bảo mật.
Ví dụ: Một server DevOps (192.168.1.10) gửi request qua router (IP công: 203.0.113.1). NAT thay IP nguồn thành 203.0.113.1 để giao tiếp với server bên ngoài.
NAT và PAT: Sự khác biệt
- NAT: Ánh xạ 1:1 (một IP riêng → một IP công).
- PAT (Port Address Translation): Ánh xạ nhiều IP riêng → một IP công, dùng port để phân biệt.
- Ví dụ:
192.168.1.10:12345và192.168.1.11:54321đều thành203.0.113.1với port khác nhau.
- Ví dụ:
Trong DevOps: PAT phổ biến trong VPC hoặc mạng nội bộ, cho phép nhiều container/microservices dùng chung IP công.
Firewall: Lá chắn bảo vệ hệ thống
Firewall Là Gì?
Firewall là thiết bị hoặc phần mềm lọc lưu lượng mạng dựa trên rule (quy tắc).
- Stateful: Theo dõi trạng thái kết nối (ví dụ: chỉ cho phép gói tin thuộc kết nối đã thiết lập).
- Stateless: Kiểm tra từng gói tin độc lập.
Ví dụ: Firewall chặn port 22 (SSH) từ IP ngoài để bảo vệ server CI/CD.
Iptables: Công cụ Firewall Linux
- Cấu trúc: Dùng chain (INPUT, OUTPUT, FORWARD) để định nghĩa rule.
- Ví dụ rule:
- Chặn port 80:
iptables -A INPUT -p tcp --dport 80 -j DROPCopy - Cho phép SSH từ IP cụ thể:
iptables -A INPUT -p tcp --dport 22 -s 203.0.113.10 -j ACCEPTCopy
- Chặn port 80:
Ứng dụng: Trong DevOps, firewall bảo vệ runner, giới hạn truy cập database, hoặc chặn DDoS.
NAT và Firewall trong DevOps: Ứng dụng thực tế
NAT trong Hệ thống phân tán
- VPC: Server trong subnet private (
10.0.0.0/16) dùng NAT gateway để ra Internet. - Debug: Job không pull được image? Kiểm tra NAT có hoạt động không.
Firewall bảo mật Pipeline
- CI/CD: Chỉ cho phép IP của runner truy cập port 443 (HTTPS) trên registry.
- Microservices: Chặn lưu lượng ngoài vào port nội bộ (như 3306 của MySQL).
Ví dụ: Một team DevOps cấu hình NAT sai, khiến server không ra Internet, trong khi firewall chặn nhầm port 8080 làm ứng dụng không chạy.
Cấu Hình NAT và Firewall
Test NAT với Netcat
- Server nội bộ (giả lập NAT):
nc -l 12345 - Client: Gửi qua IP công của router (thực tế cần NAT rule trên router):
echo "Test NAT" | nc <router-public-ip> 12345Cấu Hình Firewall với Iptables
- Chặn port 80:
sudo iptables -A INPUT -p tcp --dport 80 -j DROP - Kiểm tra:
curl localhost:80 # Không phản hồi - Mở lại port 80:
sudo iptables -D INPUT -p tcp --dport 80 -j DROP
Debug tip:
- Xem rule:
sudo iptables -L -n. - NAT không hoạt động? Kiểm tra router hoặc dùng
tcpdumpxem gói tin có qua gateway không.

