Skip to content

Instantly share code, notes, and snippets.

@yunginnanet
Forked from wallneradam/ipt-dedup.sh
Last active February 24, 2022 07:32
Show Gist options
  • Save yunginnanet/82e7adb87e26e7570cfcf9f67004eeab to your computer and use it in GitHub Desktop.
Save yunginnanet/82e7adb87e26e7570cfcf9f67004eeab to your computer and use it in GitHub Desktop.
Iptables rules deduplication script (with ipv6 support) **v6 only lightly tested**
#!/bin/sh
ipt="iptables -w"
ip6t="ip6tables -w"
dedup() {
iptables-save | sed -n "/$1/,/COMMIT/p" | grep "^-" | sort | uniq -dc | while read l
do
c=$(echo "$l" | sed "s|^[ ]*\([0-9]*\).*$|\1|")
rule=$(echo "$l" | sed "s|^[ ]*[0-9]* -A\(.*\)$|-t $1 -D\1|")
while [ ${c} -gt 1 ]; do
echo "iptables $rule"
eval "${ipt} ${rule}"
c=$((c-1))
done
done
}
dedup6() {
ip6tables-save | sed -n "/$1/,/COMMIT/p" | grep "^-" | sort | uniq -dc | while read l
do
c=$(echo "$l" | sed "s|^[ ]*\([0-9]*\).*$|\1|")
rule=$(echo "$l" | sed "s|^[ ]*[0-9]* -A\(.*\)$|-t $1 -D\1|")
while [ ${c} -gt 1 ]; do
echo "ip6tables $rule"
eval "${ip6t} ${rule}"
c=$((c-1))
done
done
}
dedup "filter"
dedup "nat"
dedup "mangle"
dedup6 "filter"
dedup6 "nat"
dedup6 "mangle"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment