有一批服务器需要做 iptables 持久化,开机自动加载。
在 Ubuntu 12.04 时代, 可以把加载脚本写到 /etc/rc.local
开机自动加载,Ubuntu 20.04 要启用 rc.local 太麻烦,用 netfilter-persistent
来实现自动加载。
netfilter-persistent
加载 ipset-persistent
和 iptables-persistent
保存的规则。
TLDR
1
2
3
4
5
6
7
8
9
10
11
12
| # noninteractive install
sudo debconf-set-selections <<EOF
iptables-persistent iptables-persistent/autosave_v4 boolean true
iptables-persistent iptables-persistent/autosave_v6 boolean true
ipset-persistent ipset-persistent/autosave boolean true
EOF
sudo apt update && sudo apt install netfilter-persistent ipset-persistent iptables-persistent -y
sudo netfilter-persistent save
sudo systemctl enable netfilter-persistent
sudo systemctl start netfilter-persistent
|
静默安装
ipset-persistent 和 iptables-persistent 安装过程中会弹出交互窗,选择是否自动保存规则。
交互会打断服务器上脚本安装,需要无交互静默安装。
Ubuntu 上软件包安装配置项归 debconf
管理,在一台机器上交互安装完成后,用 debconf-show
查看软件包的配置项。
1
2
3
4
5
6
| sudo debconf-show ipset-persistent
* ipset-persistent/autosave: true
sudo debconf-show iptables-persistent
* iptables-persistent/autosave_v4: true
* iptables-persistent/autosave_v6: true
|
在安装前,用 debconf-set-selections
在 debconf 数据库中插入对应的内容,即可实现无交互静默安装。
debconf-set-selections 配置语法
1
| {包名} {配置项key} {配置项类型} {配置项value}
|
生成的配置如下
1
2
3
4
5
| sudo debconf-set-selections <<EOF
ipset-persistent ipset-persistent/autosave boolean true
iptables-persistent iptables-persistent/autosave_v4 boolean true
iptables-persistent iptables-persistent/autosave_v6 boolean true
EOF
|
执行 sudo apt install netfilter-persistent ipset-persistent iptables-persistent -y
即可静默安装。
持久化
保存规则
sudo netfilter-persistent save
自动加载
1
2
| sudo systemctl enable netfilter-persistent
sudo systemctl start netfilter-persistent
|
参考链接