在 Linode VPS(或其他基於 Xen/KVM 的虛擬化環境)上,執行 service iptables start 時常報錯,原因是預設 /etc/init.d/iptables 腳本的 case 判斷邏輯未涵蓋 security 表,導致核心模組載入失敗。本文提供直接修改啟動腳本的修復方案。

# service iptables start
iptables: Applying firewall rules:
iptables-restore v1.4.21: iptables-restore: unable to initialize table 'security'
Error occurred at line: 2
Try `iptables-restore -h' or `iptables-restore --help' for more information.
[FAILED]
/etc/init.d/iptables 腳本中 for i in $tables; do ... case "$i" in 區塊,僅處理 raw、filter、nat、mangle 四張表,缺少 security 表(CentOS 7 / RHEL 7 引入,用於 SELinux 標記)。核心嘗試載入 iptable_security 模組失敗,導致整個服務啟動中止。
cp /etc/init.d/iptables /etc/init.d/iptables.oldbakvi /etc/init.d/iptablescase "$i" in 區塊,在 raw) 之前插入 security) 分支:security)
$IPTABLES -t filter -P INPUT $policy \
&& $IPTABLES -t filter -P OUTPUT $policy \
&& $IPTABLES -t filter -P FORWARD $policy \
|| let ret+=1
;;
(注:security 表無獨立鏈,預設策略沿用 filter 表即可)service iptables restartfor i in $tables; do
echo -n "$i "
case "$i" in
security)
$IPTABLES -t filter -P INPUT $policy \
&& $IPTABLES -t filter -P OUTPUT $policy \
&& $IPTABLES -t filter -P FORWARD $policy \
|| let ret+=1
;;
raw)
$IPTABLES -t raw -P PREROUTING $policy \
&& $IPTABLES -t raw -P OUTPUT $policy \
|| let ret+=1
;;
filter)
$IPTABLES -t filter -P INPUT $policy \
&& $IPTABLES -t filter -P OUTPUT $policy \
&& $IPTABLES -t filter -P FORWARD $policy \
|| let ret+=1
;;
nat)
...
;;
esac
done
iptables-services 套件至新版(通常已修復此腳本)。firewalld 或 nftables 管理防火牆(現代發行版推薦)。修復後,Linode VPS 的 iptables 服務即可正常啟動,防火牆規則生效。