iptables 的规则集在 Ubuntu 12.04 上存储在哪里?

iptables 的规则集在 Ubuntu 12.04 上存储在哪里?

Ubuntu 12.04 LTS-iptables v1.4.12

总结:

调用时 iptables 的规则集保存在哪里iptables-save <ruleset-name>

解释

根据这个答案保存 iptables 规则的基本方法是调用

iptables-save > /etc/iptables/rules.v4
ip6tables-save > /etc/iptables/rules.v6

然后以/etc/network/interfaces如下方式加载/恢复这些规则:

iface eth0 inet static
        ....
        pre-up iptables-restore < /etc/iptables/rules.v4
        pre-up ip6tables-restore < /etc/iptables/rules.v6

...或者将这些放入 shell 脚本中/etc/network/if-pre-up.d


这可以通过安装iptables-persistent包来简化。

sudo apt-get install iptables-persistent
inovoke-rc.d iptables-persistent save
update-rc.d iptables-persistent defaults

按照一些教程,我尝试调用(对于12.04 预装的版本/包的service iptables status不存在/未知的命令)并发现了这个有趣的输出:iptables

Aborting iptables initd: unknown command(s): "status".                                                               
  ...                                                                                  
  save <ruleset>                                                                                                    
     save the current ruleset                                                                                       
  load <ruleset>                                                                                                    
     load a ruleset                                                                                                 
   ...                                                                                                   
Saved rulesets:                                                                                                     
  active, inactive                                                                                 
...     

似乎有两套规则我可以​​加载(activeinactive)...

.. 但这些存储在哪里

我找不到他们的位置,因为活跃/不活跃是相当糟糕的搜索条件,而且dpkg-query -L iptables也没有任何帮助。

当我用puppet/配置我的服务器时chef,如果能知道是否有地方可以放置我的规则集并添加一个简单的 shell 脚本来/etc/networking/if-pre-up加载这些规则集就好了。

然后我可以省略iptables-persistent不太灵活的包,因为它不允许加载不同的规则集。

感谢您的帮助。

答案1

iptables 将规则存储在内存中,但规则集iptables-save ruleset-name可以在文件中找到创建者

/var/lib/iptables/规则集名称

可以通过调用 来恢复这些iptables-restore <ruleset-name>

我只能针对 Ubuntu 12.04.03 LTS 确认这一点 - 也许这个位置在 iptables-package 的后续版本中已经发生了变化。

我认为类似的东西/etc/iptables/rulesets.d会是存储这些东西更合理的地方。

保存路径配置在/etc/init.d/iptables二十七然后使用initd_save()它来调用initd_counters()

libdir=/var/lib/iptables   

# ...

initd_counters () {                                                                                         
 if test "${enable_save_counters:-false}" = true; then                                                     
    echo -n " with counters"                                                                                
    $iptables_save -c > "$ruleset"                                                                          
  else                                                                                                      
    $iptables_save | sed '/^:/s@\[[0-9]\{1,\}:[0-9]\{1,\}\]@[0:0]@g' > "$ruleset"                           
  fi                                                                                                        
}        

initd_save () {                                                                                             
  rm -f $autosave                                                                                           
  ruleset="${libdir}/$@"                                                                                    
  echo -n "Saving iptables ruleset: save \"$@\""                                                            
  initd_counters                                                                                           
  echo "."                                                                                                  
}          

相关内容