#!/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 "=========================================================="