Skip to main content

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.