Использование iptables-save и iptables-restore для запроса и регенерации правил - наиболее эффективный способ сделать это. Когда-то они были сценариями оболочки, но теперь это программы на C, которые работают очень эффективно.
Однако я должен отметить, что есть инструмент, который вы можете использовать, который значительно упростит поддержку iptables. Большинство динамических наборов правил действительно повторяются много раз, например:
iptables -A INPUT -s 1.1.1.1 -p tcp -m --dport 22 -j ACCEPT
iptables -A INPUT -s 2.2.2.0/24 -p tcp -m --dport 22 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 22 -j REJECT
Вместо того, чтобы заменять эти правила каждый раз, когда вы хотите изменить какие порты могут обращаться к порту 22 (полезно, например, стук портов), вы можете использовать ipsets. Viz:
ipset -N ssh_allowed nethash
iptables -A ssh_allowed -m set --set ssh_allowed src -p tcp -m --dport 22 -j ACCEPT
ipset -A ssh_allowed 1.1.1.1
ipset -A ssh_allowed 2.2.2.0/24
Наборы могут содержать IP-адреса, сети, порты, MAC-адреса и иметь таймауты в своих записях. (Вы когда-нибудь хотели добавить что-то всего за час?).
Существует даже атомарный способ замены одного набора на другой, поэтому обновление означает создание нового временного набора, а затем его замену в качестве имени существующего набора.