Bài 11: Firewall — NT140 Network Security
1. Tổng quan về Firewall
Firewall là gì?
Firewall là một thành phần của hệ thống máy tính hoặc mạng được thiết kế để ngăn chặn lưu lượng truy cập trái phép di chuyển từ mạng này sang mạng khác. Cụ thể hơn:
- Phân tách các thành phần tin cậy (trusted) và không tin cậy (untrusted) trong mạng.
- Phân biệt các mạng con ngay cả bên trong vùng tin cậy.
- Chức năng chính: lọc dữ liệu (filtering), chuyển hướng lưu lượng (redirecting traffic), và bảo vệ chống lại các cuộc tấn công mạng.
Yêu cầu của một Firewall
- Tất cả lưu lượng đi giữa các vùng tin cậy khác nhau phải đi qua firewall — không có đường vòng.
- Chỉ lưu lượng được phép theo chính sách bảo mật mới được thông qua.
- Bản thân firewall phải miễn nhiễm với các cuộc tấn công xâm nhập — đòi hỏi một hệ điều hành được hardened và cấu hình bảo mật nghiêm ngặt.
2. Chính sách Firewall (Firewall Policy)
Firewall kiểm soát truy cập theo ba chiều:
User Control — Kiểm soát dựa trên vai trò của người dùng đang cố truy cập. Áp dụng cho các người dùng bên trong vành đai firewall.
Service Control — Kiểm soát dựa trên loại dịch vụ mà host cung cấp. Áp dụng dựa trên địa chỉ mạng, giao thức kết nối, và số port.
Direction Control — Xác định chiều mà các yêu cầu có thể được khởi tạo và cho phép đi qua firewall:
- Inbound: Lưu lượng từ mạng ngoài vào firewall (ingress).
- Outbound: Lưu lượng từ bên trong ra ngoài (egress).
Các hành động của Firewall
| Hành động | Mô tả |
|---|---|
| Accepted | Cho phép gói tin đi qua vào mạng/host đích |
| Denied | Không cho phép gói tin đi qua, huỷ im lặng |
| Rejected | Tương tự Denied nhưng gửi lại thông báo ICMP cho nguồn biết gói bị từ chối |
3. Các loại Firewall
3.1 Packet Filter Firewall (Stateless Firewall)
Firewall loại này hoạt động bằng cách kiểm tra thông tin trong header của từng gói tin một cách độc lập, không quan tâm đến payload (dữ liệu ứng dụng).
Đặc điểm:
- Không quan tâm gói tin có thuộc về một luồng dữ liệu đang tồn tại hay không.
- Không duy trì trạng thái (state) về các gói tin — đó là lý do còn gọi là Stateless Firewall.
- Quyết định dựa trên từng gói tin riêng lẻ: địa chỉ IP nguồn/đích, port, giao thức.
Ưu điểm: Nhanh, đơn giản, ít tốn tài nguyên.
Nhược điểm: Dễ bị bypass bởi các kỹ thuật giả mạo (spoofing), không thể phân tích ngữ cảnh kết nối.
3.2 Stateful Firewall
Firewall loại này theo dõi trạng thái của từng kết nối theo thời gian.
Đặc điểm:
- Ghi lại các thuộc tính như địa chỉ IP, số port, sequence number — được gọi chung là connection state.
- Duy trì một Connection State Table để hiểu ngữ cảnh của từng gói tin.
- Ví dụ: chỉ cho phép kết nối đến các port đang có kết nối mở hợp lệ.
Lợi ích: Có thể phân biệt gói tin hợp lệ thuộc về kết nối đang chạy với gói tin giả mạo được tạo ra để bypass firewall.
3.3 Application/Proxy Firewall
Firewall loại này phân tích dữ liệu đến tầng ứng dụng (Layer 7).
Cơ chế hoạt động:
- Đóng vai trò là trung gian (intermediary) — giả mạo làm đích đến thực sự.
- Kết nối từ client kết thúc tại proxy; proxy mở một kết nối mới đến đích thực.
- Phân tích toàn bộ nội dung gói tin đến tầng ứng dụng để quyết định cho phép hay từ chối.
4. Xây dựng Firewall với Netfilter
4.1 Cơ chế hoạt động
Để implement packet filter firewall trong Linux kernel, cần hai cơ chế:
Netfilter — Framework cung cấp các hook (điểm móc) tại các vị trí quan trọng trên đường đi của gói tin trong Linux Kernel. Mỗi protocol stack định nghĩa một loạt hook theo đường đi của gói tin.
Loadable Kernel Modules (LKM) — Cho phép người dùng có đặc quyền thêm/gỡ module vào kernel một cách động mà không cần recompile toàn bộ kernel.
4.2 Loadable Kernel Modules
Một kernel module cơ bản có hai điểm vào/ra:
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
static int kmodule_init(void) {
printk(KERN_INFO "Initializing this module\n");
return 0;
}
static void kmodule_exit(void) {
printk(KERN_INFO "Module cleanup\n");
}
module_init(kmodule_init);
module_exit(kmodule_exit);
MODULE_LICENSE("GPL");module_init(): Hàm khởi tạo được gọi khi module được nạp vào kernel (insmod).module_exit(): Hàm dọn dẹp được gọi khi module bị gỡ ra (rmmod).
Compile kernel module:
obj-m += kMod.o
all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
Sử dụng module:
# Nạp module vào kernel
sudo insmod kMod.ko
# Kiểm tra module đang chạy
lsmod | grep kMod
# Gỡ module
sudo rmmod kMod
# Xem log kernel (output của printk)
dmesg4.3 Netfilter Hooks cho IPv4
Netfilter định nghĩa 5 hook trên đường đi của gói tin IPv4:
| Hook | Vị trí | Dùng cho |
|---|---|---|
NF_IP_PRE_ROUTING | Ngay sau khi gói tin đến, trước routing | Lọc tất cả traffic vào, DNAT |
NF_IP_LOCAL_IN | Sau routing, gói tin dành cho local | Lọc traffic đến local process |
NF_IP_FORWARD | Gói tin được chuyển tiếp | Lọc traffic đi qua router |
NF_IP_LOCAL_OUT | Gói tin từ local process ra | Lọc traffic từ local process |
NF_IP_POST_ROUTING | Sau routing, trước khi ra dây | SNAT, lọc outgoing |
4.4 Các verdict (quyết định) của Netfilter
| Verdict | Ý nghĩa |
|---|---|
NF_ACCEPT | Cho gói tin tiếp tục đi qua stack |
NF_DROP | Huỷ gói tin, không thông báo |
NF_QUEUE | Chuyển gói tin lên user space qua nf_queue để xử lý |
NF_STOLEN | Module tự xử lý gói tin, netfilter quên gói đó đi |
NF_REPEAT | Yêu cầu netfilter gọi lại module này một lần nữa |
4.5 Implement Simple Packet Filter Firewall
Bước 1 — Viết callback function:
unsigned int telnetFilter(void *priv, struct sk_buff *skb,
const struct nf_hook_state *state)
{
struct iphdr *iph;
struct tcphdr *tcph;
iph = ip_hdr(skb); // Lấy IP header từ gói tin
tcph = (void *)iph + iph->ihl * 4; // Lấy TCP header
if (iph->protocol == IPPROTO_TCP &&
tcph->dest == htons(23)) { // Port 23 = telnet
printk(KERN_INFO "Dropping telnet packet to %d.%d.%d.%d\n",
((unsigned char *)&iph->daddr)[0],
((unsigned char *)&iph->daddr)[1],
((unsigned char *)&iph->daddr)[2],
((unsigned char *)&iph->daddr)[3]);
return NF_DROP; // Huỷ gói tin
}
return NF_ACCEPT; // Cho qua
}Bước 2 — Đăng ký hook:
int setUpFilter(void) {
printk(KERN_INFO "Registering telnet filter.\n");
telnetFilterHook.hook = telnetFilter; // Callback function
telnetFilterHook.hooknum = NF_INET_POST_ROUTING; // Hook point
telnetFilterHook.pf = PF_INET; // IPv4
telnetFilterHook.priority = NF_IP_PRI_FIRST; // Ưu tiên cao nhất
nf_register_hook(&telnetFilterHook);
return 0;
}
void removeFilter(void) {
printk(KERN_INFO "Telnet filter is being removed.\n");
nf_unregister_hook(&telnetFilterHook);
}
module_init(setUpFilter);
module_exit(removeFilter);Kết quả kiểm thử:
sudo insmod telnetFilter.ko
telnet 10.0.2.5 # → Unable to connect (blocked!)
dmesg
# [1166535.962316] Dropping telnet packet to 10.0.2.5
# [1166536.958065] Dropping telnet packet to 10.0.2.5
sudo rmmod telnetFilter
telnet 10.0.2.5 # → Connected! (module removed)5. iptables — Linux Firewall
5.1 Tổng quan
iptables là firewall tích hợp sẵn trong Linux, xây dựng trên nền tảng Netfilter.
- Kernel part: Xtables (framework xử lý trong kernel)
- User-space program:
iptables(công cụ dòng lệnh để cấu hình)
5.2 Cấu trúc phân cấp: Table → Chain → Rule
| Table | Chain | Chức năng |
|---|---|---|
| filter | INPUT, FORWARD, OUTPUT | Lọc gói tin (mặc định) |
| nat | PREROUTING, INPUT, OUTPUT, POSTROUTING | Sửa đổi địa chỉ IP nguồn/đích |
| mangle | Tất cả | Sửa đổi nội dung gói tin (TTL, TOS, …) |
Mỗi chain tương ứng với một Netfilter hook:
INPUT→NF_IP_LOCAL_INFORWARD→NF_IP_FORWARDOUTPUT→NF_IP_LOCAL_OUTPREROUTING→NF_IP_PRE_ROUTINGPOSTROUTING→NF_IP_POST_ROUTING
5.3 Cú pháp cơ bản
iptables [-t table] -A CHAIN <rule> -j <target>Các tham số:
| Tham số | Ý nghĩa |
|---|---|
-t table | Chỉ định bảng (mặc định: filter) |
-A CHAIN | Append rule vào cuối chain |
-I CHAIN [pos] | Insert rule vào vị trí chỉ định |
-D CHAIN [pos] | Xoá rule |
-P CHAIN target | Đặt default policy cho chain |
-F | Flush (xoá tất cả) rule |
-L | Liệt kê rule |
-j target | Hành động: ACCEPT, DROP, REJECT, LOG, … |
Chỉ định rule (matching):
# Layer 2
-i eth0 # Interface đến (incoming)
-o eth0 # Interface đi (outgoing)
# Layer 3
-s 192.168.1.0/24 # Source IP/subnet
-d 10.0.0.1 # Destination IP
# Layer 4
-p tcp --dport 22 # TCP, destination port 22
-p udp --sport 53 # UDP, source port 53
-p icmp --icmp-type echo-request # ICMP ping5.4 Ví dụ cấu hình iptables
# Chặn IP nguồn cụ thể
sudo iptables -A INPUT -s 192.168.30.6 -d 192.168.1.0/24 -j DROP
# Cho phép TCP vào port 22 (SSH) và 80 (HTTP)
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# Cho phép tất cả outgoing TCP
sudo iptables -A OUTPUT -p tcp -j ACCEPT
# Tăng TTL lên 5 cho tất cả gói tin
sudo iptables -t mangle -A PREROUTING -j TTL --ttl-inc 5Liệt kê và xoá rule:
# Liệt kê với số thứ tự
sudo iptables -L --line-numbers
# Xoá rule số 2 trong chain INPUT
sudo iptables -D INPUT 2
# Liệt kê bảng nat
sudo iptables -t nat -L
# Flush bảng nat
sudo iptables -t nat -F5.5 iptables Extension Modules
iptables có thể được mở rộng bằng các module.
Cho phép xây dựng stateful firewall dựa trên trạng thái kết nối:
# Chỉ cho phép outgoing TCP thuộc kết nối đã established
sudo iptables -A OUTPUT -p tcp -m conntrack \
--ctstate ESTABLISHED,RELATED -j ACCEPTCho phép lọc gói tin theo user/group ID của tiến trình tạo ra nó. Chỉ hoạt động với OUTPUT chain (không thể xác định uid cho gói tin đến).
# Chặn user "seed" gửi telnet
sudo iptables -A OUTPUT -m owner --uid-owner seed -j DROPKết quả: User seed không thể kết nối telnet, nhưng user khác (ví dụ bob) vẫn kết nối được bình thường.
5.6 Xây dựng Simple Firewall hoàn chỉnh với iptables
# Bước 1: Đặt default policy = ACCEPT trước khi thêm rule
sudo iptables -P INPUT ACCEPT
sudo iptables -P OUTPUT ACCEPT
sudo iptables -P FORWARD ACCEPT
# Bước 2: Flush tất cả rule cũ
sudo iptables -F
# Bước 3: Cho phép loopback interface
sudo iptables -I INPUT 1 -i lo -j ACCEPT
# Bước 4: Cho phép DNS
sudo iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
sudo iptables -A INPUT -p udp --sport 53 -j ACCEPT
# Bước 5: Cho phép SSH và HTTP vào
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# Bước 6: Cho phép tất cả outgoing TCP
sudo iptables -A OUTPUT -p tcp -m tcp -j ACCEPT
# Bước 7: Sau khi thêm đủ rule, đổi default policy = DROP
sudo iptables -P INPUT DROP
sudo iptables -P OUTPUT DROP
sudo iptables -P FORWARD DROPKết quả kiểm thử:
# Từ máy khác
telnet 10.0.2.6 # → BLOCKED (port 23 không được phép)
wget 10.0.2.6 # → SUCCESS (port 80 được phép)6. NAT với iptables
6.1 Source NAT (SNAT)
SNAT thay đổi địa chỉ IP nguồn của gói tin — thường dùng để nhiều máy trong mạng nội bộ chia sẻ một IP public.
# SNAT cố định: đổi source IP thành 10.0.2.7
sudo iptables -t nat -A POSTROUTING -o enp0s3 -j SNAT --to-source 10.0.2.7
# Bật IP forwarding
sudo sysctl net.ipv4.ip_forward=1
# MASQUERADE: SNAT động (tự lấy IP của interface, dùng cho IP động)
sudo iptables -t nat -A POSTROUTING -o enp0s3 -j MASQUERADE6.2 Destination NAT (DNAT)
DNAT thay đổi địa chỉ IP đích của gói tin — thường dùng để port forwarding hoặc load balancing.
# Chuyển hướng port 8000 đến 192.168.60.5:23
sudo iptables -t nat -A PREROUTING -p tcp --dport 8000 \
-j DNAT --to-destination 192.168.60.5:236.3 DNAT Load Balancing
Phân phối lưu lượng ngẫu nhiên với xác suất 50/50:
sudo iptables -t nat -A PREROUTING -p tcp --dport 8000 \
-m statistic --mode random --probability .50 \
-j DNAT --to-destination 192.168.60.5:9001
sudo iptables -t nat -A PREROUTING -p tcp --dport 8000 \
-m statistic --mode random --probability .50 \
-j DNAT --to-destination 192.168.60.5:9002Phân phối lưu lượng luân phiên (mỗi gói thứ n):
# Packet 0, 2, 4, ... → server 9001
sudo iptables -t nat -A PREROUTING -p tcp --dport 8000 \
-m statistic --mode nth --every 2 --packet 0 \
-j DNAT --to-destination 192.168.60.5:9001
# Packet 1, 3, 5, ... → server 9002
sudo iptables -t nat -A PREROUTING -p tcp --dport 8000 \
-m statistic --mode nth --every 2 --packet 1 \
-j DNAT --to-destination 192.168.60.5:90027. Stateful Firewall và Connection Tracking
7.1 Stateful Firewall
Stateful firewall theo dõi lưu lượng đến và đi theo thời gian, ghi lại các thuộc tính như:
- Địa chỉ IP nguồn/đích
- Số port nguồn/đích
- Sequence number
Khái niệm connection state (trạng thái kết nối) xác định gói tin có thuộc về một luồng dữ liệu đang tồn tại hay không. Áp dụng được cho cả TCP (connection-oriented) lẫn UDP/ICMP (connectionless).
7.2 Connection Tracking trong Linux
nf_conntrack là framework theo dõi kết nối trong Linux kernel, xây dựng trên Netfilter. Mỗi gói tin được đánh dấu với một trong các trạng thái:
| Trạng thái | Mô tả |
|---|---|
| NEW | Kết nối đang bắt đầu; firewall chỉ thấy traffic một chiều |
| ESTABLISHED | Kết nối đã thiết lập; giao tiếp hai chiều đang diễn ra |
| RELATED | Kết nối liên quan đến kết nối khác (ví dụ: FTP control và FTP data) |
| INVALID | Gói tin không theo hành vi kết nối bình thường |
Xem bảng connection tracking:
sudo conntrack -LOutput ví dụ:
udp 17 22 src=10.0.2.6 dst=10.0.2.7 sport=60360 dport=9090 ...
tcp 429309 ESTABLISHED src=10.0.2.6 dst=10.0.2.7 sport=43164 dport=23 ... [ASSURED]
icmp 26 src=10.0.2.6 dst=10.0.2.7 type=8 code=0 ...7.3 Xây dựng Stateful Firewall Rule
# Không dùng conntrack (stateless) — cho phép TẤT CẢ outgoing TCP
sudo iptables -A OUTPUT -p tcp -j ACCEPT
# Dùng conntrack (stateful) — chỉ cho phép outgoing TCP thuộc kết nối đang thiết lập
sudo iptables -A OUTPUT -p tcp -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT8. Application/Proxy Firewall và Web Proxy
Proxy firewall kiểm tra traffic đến tầng ứng dụng. Để đảm bảo tất cả web traffic đều qua proxy:
- Cấu hình từng host redirect web traffic đến proxy server (qua browser settings hoặc iptables DNAT).
- Đặt proxy trên network bridge nối mạng nội bộ và mạng ngoài.
Proxy cũng có thể dùng để bypass egress filtering:
- Nếu firewall chặn dựa trên địa chỉ đích, ta có thể gửi traffic qua proxy bên ngoài.
- Firewall chỉ thấy địa chỉ proxy, không thấy đích thực sự.
Anonymizing Proxy: Ẩn địa chỉ IP thực của client; server chỉ thấy IP của proxy.
9. Bypass Firewall
9.1 SSH Tunneling (Local Port Forwarding)
Tình huống 1: Telnet từ home vào work qua firewall
Firewall chặn telnet (port 23) từ ngoài vào. Nhưng SSH (port 22) được phép đến máy apollo.
# Trên máy home: tạo SSH tunnel từ home:8000 → work:23 qua apollo
ssh -L 8000:work:23 apollo
# Sau đó telnet đến localhost:8000 (được tunnel forward đến work:23)
telnet localhost 8000Firewall chỉ thấy SSH traffic (mã hoá) giữa home và apollo — không thấy telnet traffic thực sự.
Tình huống 2: Truy cập Facebook bị chặn từ work
# Trên máy work: tạo SSH tunnel đến home, forward traffic đến facebook
ssh -L 8000:www.facebook.com:80 home
# Trên browser: truy cập localhost:80009.2 Dynamic Port Forwarding (SOCKS Proxy)
ssh -D 9000 -C homeLệnh này tạo một SOCKS proxy tại localhost:9000. Khác với local port forwarding, không cần chỉ định đích cụ thể — browser sẽ tự gửi mọi request qua proxy này.
Cấu hình Firefox:
- Network Settings → Manual proxy configuration
- SOCKS Host:
127.0.0.1, Port:9000, SOCKS v5
9.3 VPN
VPN tạo một tunnel mã hoá giữa máy bên trong và bên ngoài mạng. Vì traffic trong tunnel được mã hoá, firewall không thể xem nội dung để thực hiện filtering.
10. Câu hỏi trắc nghiệm
Câu 1. Firewall có chức năng chính nào sau đây?
- A. Tăng tốc độ kết nối mạng
- B. Lọc dữ liệu, chuyển hướng traffic và bảo vệ chống tấn công mạng
- C. Mã hóa toàn bộ dữ liệu truyền qua mạng
- D. Phân bổ địa chỉ IP cho các thiết bị
Câu 2. Yêu cầu nào sau đây KHÔNG phải là yêu cầu bắt buộc của một firewall?
- A. Tất cả traffic giữa các trust zone phải đi qua firewall
- B. Chỉ traffic được ủy quyền mới được phép đi qua
- C. Firewall phải log tất cả traffic
- D. Bản thân firewall phải miễn nhiễm với xâm nhập
Câu 3. Firewall Policy “Direction Control” kiểm soát điều gì?
- A. Loại dịch vụ mà host cung cấp
- B. Quyền truy cập dựa trên vai trò người dùng
- C. Chiều mà các yêu cầu có thể được khởi tạo và đi qua firewall
- D. Giao thức mạng được phép sử dụng
Câu 4. Sự khác biệt giữa hành động “Denied” và “Rejected” của firewall là gì?
- A. Denied nhanh hơn Rejected
- B. Rejected gửi thông báo ICMP về cho nguồn, Denied thì không
- C. Denied dùng cho TCP, Rejected dùng cho UDP
- D. Không có sự khác biệt
Câu 5. Packet Filter Firewall (Stateless Firewall) đưa ra quyết định dựa trên thông tin nào?
- A. Nội dung payload của gói tin
- B. Thông tin trong header của từng gói tin riêng lẻ
- C. Lịch sử kết nối và trạng thái session
- D. Thông tin người dùng ứng dụng
Câu 6. Stateful Firewall khác Packet Filter Firewall ở điểm nào chủ yếu?
- A. Stateful Firewall nhanh hơn
- B. Stateful Firewall duy trì Connection State Table để hiểu ngữ cảnh kết nối
- C. Stateful Firewall phân tích đến tầng ứng dụng
- D. Stateful Firewall chỉ hoạt động với TCP
Câu 7. Application/Proxy Firewall hoạt động theo cơ chế nào?
- A. Chặn tất cả traffic và chỉ cho phép whitelist
- B. Đóng vai trò trung gian — kết nối từ client kết thúc ở proxy, proxy mở kết nối mới đến đích
- C. Phân tích packet header đến tầng transport
- D. Mã hóa tất cả traffic đi qua
Câu 8. Nhược điểm chính của Application/Proxy Firewall là gì?
- A. Không thể lọc traffic
- B. Cần implement proxy mới cho mỗi giao thức mới và chậm hơn loại khác
- C. Không hỗ trợ mã hóa
- D. Chỉ hoạt động với HTTP
Câu 9. Netfilter cung cấp gì cho Linux kernel?
- A. Giao diện đồ họa để cấu hình firewall
- B. Hook tại các điểm quan trọng trên đường đi của gói tin trong kernel
- C. Cơ chế mã hóa gói tin
- D. Giao thức routing động
Câu 10. Loadable Kernel Module (LKM) có ưu điểm gì so với việc sửa trực tiếp kernel?
- A. Chạy nhanh hơn
- B. Cho phép thêm/gỡ chức năng kernel động mà không cần recompile toàn bộ kernel
- C. Được cấp quyền cao hơn
- D. Hỗ trợ nhiều hệ điều hành hơn
Câu 11. Trong kernel module C, hàm nào được gọi khi chạy lệnh insmod?
- A.
module_exit() - B.
cleanup_module() - C. Hàm được chỉ định bởi
module_init() - D.
main()
Câu 12. Lệnh nào dùng để xem log từ printk() trong kernel module?
- A.
syslog - B.
dmesg - C.
journalctl - D.
cat /var/log/kernel
Câu 13. Netfilter hook NF_IP_PRE_ROUTING được kích hoạt ở đâu?
- A. Sau khi routing decision, gói tin đến local process
- B. Ngay sau khi gói tin đến interface, trước routing decision
- C. Sau khi gói tin rời local process
- D. Khi gói tin được chuyển tiếp (forward)
Câu 14. Muốn chặn outgoing telnet từ máy Linux đóng vai trò là router (không phải source), nên dùng Netfilter hook nào?
- A.
NF_IP_LOCAL_IN - B.
NF_IP_LOCAL_OUT - C.
NF_IP_FORWARD - D.
NF_IP_PRE_ROUTING
Câu 15. Netfilter verdict NF_QUEUE có ý nghĩa gì?
- A. Gói tin được chấp nhận
- B. Gói tin bị huỷ
- C. Gói tin được chuyển lên user space để xử lý thêm
- D. Gói tin được lặp lại qua hook
Câu 16. Trong code Netfilter, sk_buff *skb chứa thông tin gì?
- A. Chỉ IP header
- B. Chỉ TCP header
- C. Toàn bộ gói tin (bao gồm tất cả headers và payload)
- D. Thông tin về socket
Câu 17. Trong iptables, table mặc định nếu không chỉ định -t là gì?
- A.
nat - B.
mangle - C.
filter - D.
raw
Câu 18. Chain FORWARD trong iptables tương ứng với Netfilter hook nào?
- A.
NF_IP_LOCAL_IN - B.
NF_IP_PRE_ROUTING - C.
NF_IP_FORWARD - D.
NF_IP_POST_ROUTING
Câu 19. Lệnh iptables nào dùng để chèn rule vào vị trí đầu tiên của chain INPUT?
- A.
iptables -A INPUT -i lo -j ACCEPT - B.
iptables -I INPUT 1 -i lo -j ACCEPT - C.
iptables -D INPUT 1 -i lo -j ACCEPT - D.
iptables -P INPUT -i lo -j ACCEPT
Câu 20. Để xoá rule số 2 trong chain INPUT, dùng lệnh nào?
- A.
iptables -F INPUT 2 - B.
iptables -D INPUT 2 - C.
iptables -R INPUT 2 - D.
iptables -P INPUT 2 DROP
Câu 21. Module owner trong iptables chỉ hoạt động với chain nào?
- A. INPUT
- B. FORWARD
- C. OUTPUT
- D. Tất cả các chain
Câu 22. Khi xây dựng firewall với iptables, tại sao nên đặt default policy = ACCEPT trước rồi mới đổi sang DROP sau khi thêm đủ rule?
- A. Vì ACCEPT nhanh hơn DROP
- B. Để tránh bị lock out khỏi machine trong quá trình cấu hình
- C. Vì iptables yêu cầu như vậy
- D. Để rule có hiệu lực ngay
Câu 23. Lệnh iptables nào dùng để thực hiện Source NAT với IP động (IP của interface thay đổi)?
- A.
iptables -t nat -A POSTROUTING -j SNAT --to-source 1.2.3.4 - B.
iptables -t nat -A POSTROUTING -j DNAT --to-destination 1.2.3.4 - C.
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE - D.
iptables -t nat -A PREROUTING -j MASQUERADE
Câu 24. DNAT thường được thực hiện ở chain nào?
- A.
OUTPUT - B.
POSTROUTING - C.
PREROUTING - D.
FORWARD
Câu 25. nf_conntrack là gì?
- A. Công cụ dòng lệnh để xem kết nối mạng
- B. Framework theo dõi kết nối trong Linux kernel, xây dựng trên Netfilter
- C. Plugin cho Wireshark
- D. Giao thức mạng mới
Câu 26. Trạng thái ESTABLISHED trong connection tracking có nghĩa là gì?
- A. Kết nối đang bắt đầu, chỉ có traffic một chiều
- B. Kết nối đã được thiết lập, giao tiếp hai chiều đang diễn ra
- C. Gói tin không theo hành vi kết nối bình thường
- D. Kết nối liên quan đến một kết nối khác
Câu 27. Trạng thái RELATED trong conntrack thường gặp trong giao thức nào?
- A. HTTP
- B. DNS
- C. FTP (giữa control connection và data connection)
- D. SSH
Câu 28. Lệnh nào dùng để xem bảng connection tracking hiện tại?
- A.
iptables -L - B.
netstat -an - C.
sudo conntrack -L - D.
cat /proc/net/nf_conntrack
Câu 29. Rule iptables nào an toàn hơn để cho phép outgoing traffic?
- A.
iptables -A OUTPUT -p tcp -j ACCEPT - B.
iptables -A OUTPUT -p tcp -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT - C.
iptables -P OUTPUT ACCEPT - D.
iptables -A OUTPUT -j ACCEPT
Câu 30. Tại sao egress filtering được dùng trong trường học/công ty?
- A. Tăng tốc độ mạng
- B. Ngăn người dùng nội bộ truy cập một số tài nguyên bên ngoài như mạng xã hội, game
- C. Bảo vệ server nội bộ khỏi tấn công
- D. Mã hóa dữ liệu truyền ra
Câu 31. Để enable IP forwarding trên Linux (cho phép máy hoạt động như router), dùng lệnh nào?
- A.
sudo iptables -P FORWARD ACCEPT - B.
sudo sysctl net.ipv4.ip_forward=1 - C.
sudo modprobe ip_forward - D.
sudo ifconfig eth0 forward
Câu 32. DNAT load balancing với --mode random --probability .50 hoạt động như thế nào?
- A. Phân chia traffic theo round-robin (luân phiên đều đặn)
- B. Mỗi gói tin có 50% xác suất được route đến server được chỉ định
- C. Chỉ 50% tổng traffic được xử lý, phần còn lại bị drop
- D. Server đầu tiên xử lý 50 gói, server thứ hai xử lý 50 gói
Câu 33. Trong ví dụ load balancing với --mode nth --every 2 --packet 0, gói tin nào sẽ được route đến server đầu tiên?
- A. Gói thứ 1, 3, 5, … (lẻ)
- B. Gói thứ 0, 2, 4, … (chẵn)
- C. Ngẫu nhiên
- D. Tất cả gói tin
Câu 34. SSH Tunneling bypass firewall dựa vào nguyên lý nào?
- A. Khai thác lỗ hổng trong giao thức TCP
- B. Mã hóa và bọc traffic thực (như telnet) bên trong SSH connection được phép
- C. Giả mạo địa chỉ IP nguồn
- D. Tăng TTL để tránh bị chặn
Câu 35. Lệnh ssh -L 8000:work:23 apollo tạo ra điều gì?
- A. SSH connection từ apollo đến work:23
- B. Tunnel chuyển tiếp TCP đến port 8000 trên local machine → work:23 qua apollo
- C. SOCKS proxy tại port 8000
- D. Port 8000 trên apollo → port 23 trên work
Câu 36. Dynamic Port Forwarding (ssh -D 9000 home) tạo ra loại proxy nào?
- A. HTTP proxy
- B. HTTPS proxy
- C. SOCKS proxy
- D. Transparent proxy
Câu 37. Sự khác biệt giữa Local Port Forwarding (-L) và Dynamic Port Forwarding (-D) trong SSH là gì?
- A.
-Lbảo mật hơn-D - B.
-Lchuyển tiếp đến một đích cố định;-Dtạo SOCKS proxy linh hoạt (đích do client quyết định) - C.
-Dnhanh hơn-L - D.
-Ldùng cho TCP,-Ddùng cho UDP
Câu 38. Tại sao VPN có thể bypass firewall hiệu quả?
- A. VPN thay đổi địa chỉ MAC
- B. VPN tạo tunnel mã hóa, firewall không thể xem nội dung để thực hiện filtering
- C. VPN dùng port 443 luôn được phép
- D. VPN khai thác lỗ hổng firewall
Câu 39. Proxy server có thể được dùng để bypass egress filtering như thế nào?
- A. Proxy thay đổi địa chỉ nguồn của gói tin
- B. Proxy đổi địa chỉ đích thành địa chỉ proxy, qua mặt rule chặn dựa trên destination IP
- C. Proxy nén dữ liệu để tránh detection
- D. Proxy dùng giao thức khác với HTTP
Câu 40. Anonymizing Proxy giúp ẩn thông tin gì của client?
- A. Địa chỉ MAC
- B. Địa chỉ IP thực của client (server chỉ thấy IP của proxy)
- C. Nội dung request
- D. Thời gian kết nối
Câu 41. Trong iptables, tham số -p icmp --icmp-type echo-request lọc loại ICMP nào?
- A. ICMP ping reply
- B. ICMP ping request (loại được gửi đi khi ping)
- C. ICMP destination unreachable
- D. ICMP time exceeded
Câu 42. Lệnh sudo iptables -t mangle -A PREROUTING -j TTL --ttl-inc 5 làm gì?
- A. Giảm TTL của tất cả gói tin đi 5
- B. Đặt TTL = 5 cho tất cả gói tin
- C. Tăng TTL của tất cả gói tin đi 5, áp dụng trước routing decision
- D. Chặn tất cả gói tin có TTL = 5
Câu 43. Lệnh sudo iptables -L --line-numbers dùng để làm gì?
- A. Liệt kê các chain của tất cả table
- B. Liệt kê các rule trong tất cả chain của table filter, kèm số thứ tự
- C. Liệt kê các kernel module đang chạy
- D. Liệt kê các kết nối đang active
Câu 44. Khi sử dụng iptables để chặn user seed dùng telnet nhưng cho phép user bob, phương pháp nào phù hợp nhất?
- A.
iptables -A INPUT -s seed -j DROP - B.
iptables -A OUTPUT -m owner --uid-owner seed -j DROP - C.
iptables -A OUTPUT -p tcp --dport 23 -j DROP - D.
iptables -A FORWARD -m owner --uid-owner seed -j DROP
Câu 45. Tại sao cần chạy sudo sysctl net.ipv4.ip_forward=1 khi cấu hình SNAT/NAT?
- A. Để enable iptables
- B. Để kernel Linux chuyển tiếp (forward) gói tin giữa các network interface
- C. Để tăng tốc độ NAT
- D. Để enable IPv6
Câu 46. Để chặn tất cả traffic ngoại trừ những gì được phép rõ ràng (deny-all, allow-by-exception), cần làm gì trong iptables?
- A. Không thêm rule nào
- B. Đặt default policy là DROP cho các chain, sau đó thêm rule ACCEPT cho traffic được phép
- C. Đặt default policy là ACCEPT và thêm rule DROP
- D. Dùng
-j REJECTcho tất cả rule
Câu 47. Ưu điểm của Application Proxy Firewall so với Packet Filter trong việc chống IP Spoofing là gì?
- A. Proxy lọc dựa trên địa chỉ IP nên không bị spoofing
- B. Proxy xác thực người dùng ở tầng ứng dụng thay vì dựa vào địa chỉ IP, không bị ảnh hưởng bởi IP Spoofing
- C. Proxy không sử dụng địa chỉ IP
- D. Proxy mã hóa tất cả traffic
Câu 48. Trong ví dụ SSH tunnel, firewall có thể thấy loại traffic nào?
- A. Telnet traffic giữa home và work
- B. HTTP traffic giữa work và Facebook
- C. SSH traffic (mã hóa) giữa home và apollo
- D. Tất cả traffic đều hiển thị rõ
Câu 49. Module conntrack trong iptables với --ctstate NEW cho phép điều gì?
- A. Chỉ cho phép gói tin thuộc kết nối đã established
- B. Cho phép gói tin khởi tạo kết nối mới (chỉ có traffic một chiều)
- C. Chặn tất cả kết nối mới
- D. Cho phép gói tin không thuộc kết nối nào
Câu 50. Lệnh sudo iptables -t nat -F làm gì?
- A. Xoá chain FORWARD trong table nat
- B. Xoá tất cả rule trong table nat
- C. Flush toàn bộ iptables
- D. Liệt kê rule của table nat
Câu 51. Khi xây dựng firewall, tại sao phải thêm rule cho phép loopback interface (-i lo -j ACCEPT)?
- A. Vì loopback interface không an toàn
- B. Vì nhiều dịch vụ nội bộ giao tiếp qua loopback (127.0.0.1), block loopback sẽ làm hỏng hệ thống
- C. Vì loopback cần được encrypt
- D. Vì default policy không áp dụng cho loopback
Câu 52. Ingress filtering và Egress filtering khác nhau ở điểm nào?
- A. Ingress lọc UDP, Egress lọc TCP
- B. Ingress kiểm tra traffic đến (inbound) bảo vệ mạng nội bộ; Egress kiểm tra traffic ra (outbound) kiểm soát những gì người dùng nội bộ có thể truy cập
- C. Ingress nhanh hơn Egress
- D. Ingress dùng cho IPv4, Egress dùng cho IPv6
Câu 53. Trong iptables, lệnh nào đặt default policy DROP cho chain INPUT?
- A.
iptables -A INPUT -j DROP - B.
iptables -D INPUT -j DROP - C.
iptables -P INPUT DROP - D.
iptables -I INPUT 1 -j DROP
Câu 54. Khi client dùng SOCKS proxy, yêu cầu kỹ thuật nào bắt buộc?
- A. Phần mềm client phải chạy trên Linux
- B. Phần mềm client phải có hỗ trợ SOCKS native
- C. SOCKS proxy phải chạy trên port 1080
- D. Phải dùng Firefox
Câu 55. Trong Netfilter, NF_IP_PRI_FIRST trong đăng ký hook có ý nghĩa gì?
- A. Hook này xử lý trước tất cả hook khác cùng điểm
- B. Hook này chỉ xử lý gói tin đầu tiên
- C. Hook này có độ ưu tiên thấp nhất
- D. Hook này được gọi cuối cùng