CentOS7で/etc/init.d/iptables saveする


TL;DR

※ firewalldとは共存できないらしいので注意

$ sudo yum install iptables-services
$ sudo /usr/libexec/iptables/iptables.init save

経緯

Amazon Linux 2を使うとiptablesは入っているけど/etc/init.d/iptablesがなくて/etc/init.d/iptables saveができなかった。というか/etc/init.d以下にほとんどスクリプトがない。
で、/etc/init.d/READMEってファイルがあったので見てみたらsystemctl使え(意訳)って書いてある。systemctlでiptablesを使うにはiptables-servicesをインストールする必要があるっぽい。インストールする。

$ sudo yum install iptables-services

しかしsystemctlにはsaveなんてコマンドはない。
systemdのサービス化したとはいえ、どうせ/etc/init.d/iptablesのスクリプトをそっちに移動しただけだろうと推測しその起動スクリプトを探してみる。systemctlの設定ファイルには起動コマンドが書いてあるはずなので、そこから探す。systemctl enable iptablesしたら設定ファイルが/usr/lib/systemd/system/iptables.serviceにあることが分かった。

$ cat /usr/lib/systemd/system/iptables.service
[Unit]
Description=IPv4 firewall with iptables
Before=ip6tables.service
After=syslog.target
AssertPathExists=/etc/sysconfig/iptables

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/libexec/iptables/iptables.init start
ExecReload=/usr/libexec/iptables/iptables.init reload
ExecStop=/usr/libexec/iptables/iptables.init stop
Environment=BOOTUP=serial
Environment=CONSOLETYPE=serial
StandardOutput=syslog
StandardError=syslog

[Install]
WantedBy=basic.target

起動スクリプト本体は/usr/libexec/iptables/iptables.initらしい。これの中身を見てみるとやっぱりsaveコマンドある。というわけで

$ sudo /usr/libexec/iptables/iptables.init save

で、/etc/init.d/iptables save相当のことができた。