80 lines
2.9 KiB
Bash
80 lines
2.9 KiB
Bash
#!/bin/bash
|
|
|
|
echo "=========================================================="
|
|
echo " TEST SCRIPT: KIỂM TRA LỖI FIREWALL DEFAULT DENY "
|
|
echo "=========================================================="
|
|
|
|
echo "[1] Trạng thái của firewalld theo systemctl:"
|
|
raw_status=$(systemctl is-active firewalld 2>&1)
|
|
echo " -> Output trả về: [$raw_status]"
|
|
|
|
FIREWALLD_ACTIVE=0
|
|
if echo "$raw_status" | grep -q "^active"; then
|
|
FIREWALLD_ACTIVE=1
|
|
echo " -> Đánh giá: FIREWALLD_ACTIVE = 1 (Đã nhận diện đang chạy)"
|
|
else
|
|
echo " -> Đánh giá: FIREWALLD_ACTIVE = 0 (Không nhận diện được firewalld qua systemctl)"
|
|
fi
|
|
echo "----------------------------------------------------------"
|
|
|
|
echo "[2] Đọc các active zone từ firewall-cmd:"
|
|
active_zones=$(firewall-cmd --list-all-zones 2>/dev/null | grep "active")
|
|
if [ -z "$active_zones" ]; then
|
|
echo " -> KHÔNG TÌM THẤY BẤT KỲ ACTIVE ZONE NÀO! (Hoặc firewall-cmd bị lỗi)"
|
|
else
|
|
echo " -> Các zone đang active tìm thấy:"
|
|
echo "$active_zones" | while read -r line; do
|
|
echo " - $line"
|
|
done
|
|
fi
|
|
echo "----------------------------------------------------------"
|
|
|
|
echo "[3] Phân tích chi tiết qua awk (chế độ DEBUG):"
|
|
fw_default_deny=$(firewall-cmd --list-all-zones 2>/dev/null | awk '
|
|
BEGIN {
|
|
print " [AWK] Bắt đầu đọc output từ firewall-cmd..." > "/dev/stderr"
|
|
bad=0
|
|
}
|
|
/\(active\)/ {
|
|
in_active=1;
|
|
print " [AWK] >> Vào active zone: " $0 > "/dev/stderr"
|
|
next
|
|
}
|
|
/^[^ \t\r\n]/ && !/\(active\)/ {
|
|
if (in_active == 1) {
|
|
print " [AWK] << Thoát active zone vì gặp dòng: " $0 > "/dev/stderr"
|
|
}
|
|
in_active=0
|
|
}
|
|
in_active && /target:/ {
|
|
t = $2
|
|
gsub(/%%/, "", t)
|
|
print " [AWK] -- Bắt được target: [" t "]" > "/dev/stderr"
|
|
if (t != "DROP" && t != "REJECT") {
|
|
print " [AWK] -- [!] PHÁT HIỆN VI PHẠM: [" t "] không phải là DROP hay REJECT" > "/dev/stderr"
|
|
bad=1
|
|
} else {
|
|
print " [AWK] -- [v] ĐẠT: [" t "] hợp lệ" > "/dev/stderr"
|
|
}
|
|
}
|
|
END {
|
|
print " [AWK] Kết thúc phân tích. Giá trị biến bad = " bad > "/dev/stderr"
|
|
print (bad ? "0" : "1")
|
|
}
|
|
')
|
|
|
|
echo "----------------------------------------------------------"
|
|
echo "[4] TỔNG HỢP KẾT QUẢ:"
|
|
echo " -> Giá trị biến fw_default_deny: [$fw_default_deny]"
|
|
|
|
if [ "$FIREWALLD_ACTIVE" -eq 1 ]; then
|
|
if [ "$fw_default_deny" = "1" ]; then
|
|
echo " -> KẾT QUẢ CUỐI CÙNG: PASSED (Đạt chuẩn)"
|
|
else
|
|
echo " -> KẾT QUẢ CUỐI CÙNG: FAILED (Vi phạm)"
|
|
fi
|
|
else
|
|
echo " -> KẾT QUẢ CUỐI CÙNG: FAILED (Bị fail ngay từ bước check firewalld active)"
|
|
fi
|
|
echo "=========================================================="
|