Onde estão os conjuntos de regras do iptables armazenados no Ubuntu 12.04?

8

Ubuntu 12.04 LTS - iptables v1.4.12

TLDR:

Onde os conjuntos de regras do iptables são salvos ao invocar iptables-save <ruleset-name> ?

Explicação :

De acordo com esta resposta , a maneira básica de salvar as regras do iptables é invocar

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

e depois carregando / restaurando essas regras em /etc/network/interfaces como:

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

... ou colocando-os em um script de shell em /etc/network/if-pre-up.d .

Isso pode ser simplificado instalando o pacote iptables-persistent .

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

Após alguns tutoriais, tentei invocar service iptables status (um comando inexistente / desconhecido para o pacote iptables version / que vem pré-instalado com 12.04) e encontrei esta saída interessante:

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

Parece haver dois conjuntos de regras que eu posso carregar ( active e inactive ) ...

.. mas onde estão estes armazenados ?

Não consigo encontrar a localização deles como ativa / inativa, são termos de pesquisa muito ruins e dpkg-query -L iptables também não ajuda.

Como estou provisionando meus servidores com puppet / chef , seria bom saber se há algum lugar onde posso colocar meus conjuntos de regras e adicionar um script de shell simples a /etc/networking/if-pre-up para carregá-los.

Então eu posso omitir o pacote iptables-persistent , que não é tão flexível, pois não permite o carregamento de diferentes conjuntos de regras.

Obrigado pela sua ajuda.

    
por nifr 18.11.2013 / 15:18

1 resposta

4

O iptables armazena as regras na memória, mas o conjunto de regras criado por iptables-save ruleset-name pode ser encontrado no arquivo

/ var / lib / iptables / nome do conjunto de regras

Estes podem ser restaurados chamando iptables-restore <ruleset-name> .

Eu só posso confirmar isso para o Ubuntu 12.04.03 LTS - talvez este local tenha mudado em versões posteriores do pacote iptables.

Acho que algo como /etc/iptables/rulesets.d teria sido um lugar mais lógico para armazená-los.

O caminho de salvaguarda está configurado em /etc/init.d/iptables na linha 27 e depois usado por initd_save() que invoca 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 "."                                                                                                  
}          
    
por nifr 18.11.2013 / 16:40