April 19, 2015, 5:24 p.m.
Posted by soar

ipset-persistent — sysv init скрипт для ipset

Я пользуюсь Debian-like системами уже более 10 лет и на протяжении всего этого времени передо мной стоял вопрос, как же правильно сохранять правила iptables во время перезагрузки. Если в Centos уже давно прямо из коробки есть обвязка для работы с набором правил, то в Debian долгое время всё ограничивалось лишь статьей на их Wiki. И, хотя мои ортодоксальные коллеги всё еще пишут iptables-restore < /etc/iptables в /etc/rc.local, относительно недавно эта статья всё-таки обновилась и в ней появилось упоминание о пакете iptables-persistent, который включает в себя init-скрипт, который как раз и занимается тем, что сохраняет и восстанавливает наборы правил.

Однако у этого скрипта есть одна серьезная проблема: он не работает, если в правилах iptables используются наборы ipset — ведь эти наборы должны быть загружены раньше, чем правила. И тут три пути. Или возвращаться к варианту:

ipset restore < /etc/ipset
iptables-restore < /etc/iptables

..., или исправлять непосредственно /etc/init.d/iptables-persistent и готовиться к тому, что он будет ломаться при каждом обновлении, или написать дополнительный скрипт. Предлагаю третий вариант.

В ближайших планах собрать deb-пакет, однако пока устанавливается вручную:

# Clone repository to some directory:
git clone https://github.com/soar/ipset-persistent.git

# Copy files to system: 
sudo cp --parent etc/ipset/README /
sudo cp --parent etc/default/ipset-persistent /
sudo cp --parent etc/init.d/ipset-persistent /

# Add to autostart: 
sudo update-rc.d ipset-persistent defaults

Comments