Я бы не удалял ничего, а вставлял правило, возвращающее немедленно из цепочки назначения упавшего канала.
Нет новых соединений, маркированных упавшим каналом - нет проблем.
Вот этот блок:
-A balancing -m statistic --mode random --probability 0.14300000016 -j add_set_isp1
-A balancing -m statistic --mode random --probability 0.16699999990 -j add_set_isp2
-A balancing -m statistic --mode random --probability 0.20000000019 -j add_set_isp3
-A balancing -m statistic --mode random --probability 0.25000000000 -j add_set_isp4
-A balancing -m statistic --mode random --probability 0.33300000010 -j add_set_isp5
-A balancing -m statistic --mode random --probability 0.50000000000 -j add_set_isp6
запихать по отдельным таблицам и делать
iptables -t mangle -I <chain> -j RETURN
при падении и при восстановлении
iptables -t mangle -D <chain> -j RETURN
Ну или ещё проще, если коэффициенты сохранены и грузятся из конфига,
iptables -t mangle -F <chain>
iptables -t mangle -A <chain> <rule>
В этом случае и править коэффициенты при перебалансировке каналов проще, опять же - тупо -F <chain>/-A <chain> <rule>.
Да, и вот это
-A add_set_isp7 -m set --match-set isp1 src -j RETURN
-A add_set_isp7 -m set --match-set isp2 src -j RETURN
-A add_set_isp7 -m set --match-set isp3 src -j RETURN
-A add_set_isp7 -m set --match-set isp4 src -j RETURN
-A add_set_isp7 -m set --match-set isp5 src -j RETURN
-A add_set_isp7 -m set --match-set isp6 src -j RETURN
заменяется одним правилом - просто добавляй адрес не только в один конкретный сет, но и в аггрегированный сет для всех вообще, и проверяй, если оно там есть, -j RETURN.