メインコンテンツまでスキップ

Firewall — Bảo vệ mạng

Firewall là thiết bị hoặc phần mềm kiểm soát traffic mạng dựa trên tập rules — cho phép hoặc từ chối packet dựa trên các tiêu chí như IP, port, protocol, và trạng thái kết nối.


Phân loại Firewall​


Stateless vs Stateful​

Stateless (Packet Filter)​

Mỗi packet được đánh giá độc lập — không biết packet này thuộc connection nào.

Rule: ALLOW TCP src any dst 192.168.1.10:80
→ Cho phép packet đến port 80
→ KHÔNG tự động cho phép response về (cần thêm rule OUTBOUND)

Vấn đề: Phải tạo rule cho cả hai chiều mỗi connection:

ALLOW inbound TCP dst :80         # request vào
ALLOW outbound TCP src :80 # response ra
→ Kẻ tấn công có thể dùng port 80 để send data ra ngoài!

Stateful (Connection Tracking)​

Firewall theo dõi state table — bảng các kết nối đang active:

State Table:
src: 192.168.1.10:45000 → dst: 203.0.113.5:80 | State: ESTABLISHED | Protocol: TCP

Ưu điểm: Tự động cho phép response về — chỉ cần rule một chiều:

ALLOW outbound TCP src any dst any:80    # cho phép request ra
# Response tự động được allow vì đã có trong state table

iptables — Linux Firewall​

iptables là công cụ quản lý firewall trên Linux, hoạt động ở kernel level (Netfilter).

iptables Tables và Chains​

TableChainsDùng cho
filterINPUT, OUTPUT, FORWARDLọc packet (firewall chính)
natPREROUTING, POSTROUTING, OUTPUTNAT, port forwarding
mangleTất cảModify packet headers (QoS)
rawPREROUTING, OUTPUTConnection tracking exceptions
# === Xem rules ===
sudo iptables -L # filter table
sudo iptables -L -n -v # verbose + numeric
sudo iptables -L -n -v --line-numbers # kèm số dòng
sudo iptables -t nat -L -n -v # NAT table

# === Cấu hình cơ bản cho server ===
# Mặc định chặn tất cả, chỉ mở cổng cần thiết
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT

# Cho phép established connections (stateful)
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

# Loopback
sudo iptables -A INPUT -i lo -j ACCEPT

# SSH (giới hạn IP nếu có thể)
sudo iptables -A INPUT -p tcp --dport 22 -s 192.168.1.0/24 -j ACCEPT

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

# ICMP (ping)
sudo iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT

# Rate limit SSH (chống brute force)
sudo iptables -A INPUT -p tcp --dport 22 -m state --state NEW \
-m recent --set --name SSH
sudo iptables -A INPUT -p tcp --dport 22 -m state --state NEW \
-m recent --update --seconds 60 --hitcount 4 --name SSH -j DROP

# === Xoá rule ===
sudo iptables -D INPUT -p tcp --dport 80 -j ACCEPT # xoá theo spec
sudo iptables -D INPUT 3 # xoá rule số 3

# === Lưu persistent (Ubuntu) ===
sudo apt install iptables-persistent
sudo netfilter-persistent save
# hoặc
sudo iptables-save > /etc/iptables/rules.v4

nftables — Thế hệ mới của iptables​

nftables thay thế iptables trong các distro mới (RHEL 8+, Debian 10+, Ubuntu 20.04+).

# Xem config
sudo nft list ruleset

# Ví dụ config nftables
sudo nft -f /etc/nftables.conf
# /etc/nftables.conf
table inet filter {
chain input {
type filter hook input priority 0; policy drop;

iif lo accept
ct state established,related accept
tcp dport 22 accept
tcp dport { 80, 443 } accept
icmp type echo-request accept
}

chain forward {
type filter hook forward priority 0; policy drop;
}

chain output {
type filter hook output priority 0; policy accept;
}
}

ufw — Ubuntu Firewall (Simplified)​

ufw là frontend đơn giản cho iptables/nftables:

# Trạng thái
sudo ufw status
sudo ufw status verbose
sudo ufw status numbered # kèm số dòng

# Bật/tắt
sudo ufw enable
sudo ufw disable
sudo ufw reset # xoá tất cả rules

# Allow / Deny
sudo ufw allow 22 # SSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 'Nginx Full' # profile (cài cùng nginx)
sudo ufw deny 23/tcp # chặn telnet

# Giới hạn theo IP
sudo ufw allow from 192.168.1.0/24
sudo ufw allow from 10.0.0.5 to any port 5432 # chỉ IP này vào postgres

# Rate limit (chống brute force)
sudo ufw limit ssh # limit SSH connections

# Xoá rule
sudo ufw delete allow 80/tcp
sudo ufw delete 3 # xoá rule số 3

# Logging
sudo ufw logging on
sudo ufw logging medium # low, medium, high, full

WAF — Web Application Firewall​

WAF hoạt động ở Layer 7, hiểu HTTP và bảo vệ ứng dụng web khỏi các tấn công như:

# ModSecurity với nginx
# /etc/nginx/modsecurity.conf
SecRuleEngine On
SecRequestBodyAccess On
SecResponseBodyAccess On

# OWASP Core Rule Set
Include /etc/nginx/owasp-crs/crs-setup.conf
Include /etc/nginx/owasp-crs/rules/*.conf

Cloud WAF​

ProviderServiceTính năng
CloudflareCloudflare WAFDDoS, bot, OWASP rules, managed rules
AWSAWS WAF + ShieldTích hợp ALB/CloudFront, rate limiting
AzureAzure WAFTích hợp Application Gateway
GCPCloud ArmorDDoS, geo-restriction, custom rules

Security Groups — Cloud Firewall​

Cloud provider cung cấp Security Groups — virtual stateful firewall cho cloud resources:

# AWS CLI — tạo và quản lý Security Group
aws ec2 create-security-group --group-name "web-sg" --description "Web servers" --vpc-id vpc-xxx

aws ec2 authorize-security-group-ingress \
--group-id sg-xxx \
--protocol tcp \
--port 443 \
--cidr 0.0.0.0/0

# Chỉ cho phép từ Security Group khác (không phải IP)
aws ec2 authorize-security-group-ingress \
--group-id sg-app \
--protocol tcp \
--port 8080 \
--source-group sg-alb

Defense in Depth — Phòng thủ theo chiều sâu​

Nguyên tắc: Không có tầng bảo vệ nào là tuyệt đối. Nhiều lớp bảo vệ → kẻ tấn công phải vượt qua nhiều rào cản.