Por que o serviço persistente Iptables não está salvando minhas alterações?

18

Eu segui este tutorial para configurar regras de IP no ubuntu 12.04. Tudo funcionou bem na instalação - mas agora eu fiz alterações no firewall que não persistem após a reinicialização. Eu não entendo por que isso é. Aqui está uma demonstração de como estou usando o iptables-persistent. O que estou fazendo de errado?

$ sudo service iptables-persistent start
 * Loading iptables rules...                                                                                             *  IPv4...                                                                                                              *  IPv6...   

$ sudo iptables -L   //shows a certain rule
$ iptables -D INPUT ... //command successfully drops the rule
$ sudo iptables -L   //shows rule has been deleted

 $ sudo service iptables-persistent restart
 * Loading iptables rules...                                                                                             *  IPv4...                                                                                                              *  IPv6...                                                                                                      [ OK ] 
 $ sudo iptables -L  //rule is back
bernie2436
fonte
Percebo que a iptables -D INPUTregra não está dentro. sudoTem certeza de que está realmente relatando um sucesso? O comportamento muda se você o executar dentro dele sudo?
Bratchley

Respostas:

41

iptables-persistentnão funciona dessa maneira. Reiniciar o iptables-persistent"serviço" não captura o estado atual das tabelas de ip e o salva; tudo o que faz é restabelecer as regras do iptables que foram salvas quando o pacote foi configurado pela última vez.

Para configurar iptables-persistent, você precisa informar sobre o seu conjunto de regras atual do iptables.

Uma maneira de conseguir isso é a seguinte:

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

Ou, equivalente, o iptables-persistentpacote também fornece o seguinte:

dpkg-reconfigure iptables-persistent

(Você precisará responder sim às perguntas sobre salvar ou não as regras.)

Depois disso, na próxima vez que iptables-persistentfor iniciado / reiniciado, os conjuntos de regras do iptables que você espera serão carregados.

Steven segunda-feira
fonte
9

Uma maneira muito simples de salvar as regras atuais do iptables é usar o comando:

sudo service netfilter-persistent save

Usando o descrito acima, que funciona pelo menos no Ubuntu após a instalação do pacote netfilter-persistent(e iptables-persistent), não há necessidade de executar manualmente os comandos iptables ou de reconfigurar o pacote (como sugerido pela resposta aceita acima).

OpenITeX
fonte
É sudo service netfilter-persistent saveou sudo service netfilter-persistent save .? (Ponto no final.)
Tomasz
Obrigado por observar isso, o comando correto é sem o ponto no final da linha. Corrigida a resposta de acordo.
OpenITeX
3
$ iptables ... DROP //command successfully drops the rule
$ sudo iptables -L   //shows rule has been deleted

Não é isso que DROPsignifica ou faz. De man iptables:

... os valores especiais ACCEPT, DROP, QUEUE ou RETURN. ACEITAR significa deixar o pacote passar. DROP significa deixar cair o pacote no chão. QUEUE significa ...

Então, o que você fez é adicionar uma nova regra. Ele pode efetivamente substituir qualquer número de outras regras, mas essas regras ainda existem.

Ao verificar coisas como essa (sua iptables -Lsaída), eu as alimentaria, em grep "string unique to this rule"vez de usar seus olhos. É mais fácil e rápido de fazer e menos propenso a erros.

iptables -L | grep "some unique string"

Se você deseja excluir uma regra, use a -Dopção; a página do manual descreve duas formas disso:

-D, - excluir especificação de regra de cadeia

-D, --eliminar ruleno da cadeia

Exclua uma ou mais regras da cadeia selecionada. Existem duas versões deste comando: a regra pode ser especificada como um número na cadeia (iniciando em 1 para a primeira regra) ou como uma regra correspondente.

Cachinhos Dourados
fonte
desculpe, isso não estava claro. Estou usando a opção -D para soltar uma regra. Veja a alteração acima
bernie2436
3
-Dsignifica "excluir" e não "DROP" Usar o termo "DROP" para significar algo diferente de um alvo em salto ao falar sobre iptablesé confuso como o inferno.
Bratchley
1

Conforme explicado por @ steven-segunda-feira , você pode salvar suas regras definidas no diretório apropriado (a saber:) /etc/iptables/rules.v{4,6}.

No entanto, o @OpenITeX está certo: chamar a saveação de service netfilter-persistenté melhor.

A partir de hoje (em 18.10), o iptables-save está embutido, mas nãoiptables-persistent está instalado. Portanto, o diretório do plug-in chamado por está vazio e o serviço imprime que o conjunto de regras foi salvo, enquanto não foi.service netfilter-persistent

TLDR: instale iptables-persistente verifique se o diretório do plug-in /usr/share/netfilter-persistent/plugins.dcontém plug-ins.


Aqui está como eu descobri isso:

$ cat /etc/init.d/netfilter-persistent 
...
case "$1" in
...
save)
    log_action_begin_msg "Saving netfilter rules"
    /usr/sbin/netfilter-persistent save
    log_action_end_msg $?
    ;;

Em seguida, verifique o /usr/sbin/netfilter-persistentscript, observe que ele chama scripts externos:

$ cat /usr/sbin/netfilter-persistent
...
PLUGINS=/usr/share/netfilter-persistent/plugins.d
...
run_plugins () {
    if [ -d ${PLUGINS} ]; then
        run-parts -v -a ${1} ${PLUGINS}
    fi
}

case $1 in
start|save|flush)
    run_plugins ${1}
    ;;

Então eu notei que /usr/share/netfilter-persistent/plugins.destava vazio.

Aif
fonte
1

Instale o iptables-persistent:

sudo apt install iptables-persistent

salve as regras depois de fazer as alterações desejadas:

sudo netfilter-persistent save
Zack A
fonte