web-dev-qa-db-ja.com

Ubuntu 12.04のiptablesのルールセットはどこに保存されますか?

Ubuntu 12.04 LTS-iptables v1.4.12

TLDR:

iptables-save <ruleset-name>を呼び出すときにiptablesのルールセットはどこに保存されますか?

説明

この答え によると、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

...または/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

いくつかのチュートリアルに従って、service iptables status(12.04がプリインストールされているiptablesバージョン/パッケージの存在しない/不明なコマンド)を呼び出そうとしましたが、この興味深い出力が見つかりました。

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

ロードできるルールセットは2つあるようです(activeおよびinactive)...

.. butこれらはどこに保存されていますか

アクティブ/非アクティブはかなり悪い検索用語であり、dpkg-query -L iptablesも役に立たないため、場所を見つけることができません。

サーバーをpuppet/chefでプロビジョニングしているので、ルールセットを配置し、これらをロードするための簡単なシェルスクリプトを/etc/networking/if-pre-upに追加できる場所があるかどうかを知るのは良いことです。

それから、iptables-persistentパッケージを省略できますが、これは異なるルールセットのロードを許可しないため、それほど柔軟ではありません。

ご協力いただきありがとうございます。

8

iptablesはルールをメモリに保存しますが、iptables-save ruleset-nameによって作成されたrulesetはファイル内にあります

/ var/lib/iptables/ruleset-name

これらは、iptables-restore <ruleset-name>を呼び出すことで復元できます。

これはUbuntu 12.04.03 LTSでのみ確認できます-この場所は、iptables-packageの以降のバージョンで変更された可能性があります。

/etc/iptables/rulesets.dのようなものは、これらを保存するためのより論理的な場所だったと思います。

Save-pathは/etc/init.d/iptablesの行27で構成され、後で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 "."                                                                                                  
}          
4