You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

49 lines
1.2 KiB
Bash

#!/bin/bash
set -e
BACKUP_FILE="/root/iptables-backup-$(date +%F-%H%M%S).rules"
echo "[*] Backing up current iptables rules to $BACKUP_FILE"
iptables-save > "$BACKUP_FILE"
TEMP_DIR=$(mktemp -d)
declare -A TABLE_RULES
echo "[*] Extracting rules by table..."
current_table=""
while IFS= read -r rule; do
if [[ -n "$rule" && "$rule" == -A* ]]; then
echo "$rule"
if ! eval "iptables -t $table $rule"; then
echo "[!] Failed to apply: $rule"
fi
fi
done <<< "$DEDUPED"
for table in "${!TABLE_RULES[@]}"; do
echo "[*] Processing table: $table"
RULE_FILE="${TABLE_RULES[$table]}"
DEDUPED=$(sort "$RULE_FILE" | uniq)
DUPS=$(sort "$RULE_FILE" | uniq -d)
if [[ -n "$DUPS" ]]; then
echo "[!] Duplicate rules in $table:"
echo "$DUPS"
fi
echo "[*] Flushing $table rules..."
iptables -t "$table" -F
iptables -t "$table" -X
echo "[*] Rebuilding $table rules..."
while IFS= read -r rule; do
echo "$rule"
if ! eval "iptables -t $table $rule"; then
echo "[!] Failed to apply: $rule"
fi
done <<< "$DEDUPED"
done
rm -rf "$TEMP_DIR"
echo "[+] iptables cleanup complete. Backup saved at: $BACKUP_FILE"