melhor maneira de limpar todas as regras do iptables

83

Atualmente, tenho este snippet:

# flush all chains
iptables -F
iptables -t nat -F
iptables -t mangle -F
# delete all chains
iptables -X

Existe a possibilidade de que alguma regra impermeável permaneça viva depois de executar isso?

A idéia é ter uma configuração de iptables completamente limpa, que possa ser facilmente substituída por um novo conjunto de regras (nevermind routes / ifconfig's parameters).

kagali-san
fonte

Respostas:

107

Para responder sua pergunta de forma sucinta, não: não haveria regras "remanescentes" após lavar todas as tabelas. No interesse de ser completo, no entanto, convém definir a política para as cadeias internas INPUTe também:FORWARDACCEPT

iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -t nat -F
iptables -t mangle -F
iptables -F
iptables -X

Regras claras de ip6tables:

ip6tables -P INPUT ACCEPT
ip6tables -P FORWARD ACCEPT
ip6tables -P OUTPUT ACCEPT
ip6tables -t nat -F
ip6tables -t mangle -F
ip6tables -F
ip6tables -X

...e isso deveria bastar. iptables -nvLdeve produzir esta saída (ou muito semelhante):

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
Sam Halicke
fonte
9
você esqueceu 'raw': iptables -t iptables -F matérias -t -X cru
KK-Tempestade
there would not be any "leftover" rules after flushing every tableO OP não libera todas as tabelas. Nem você. Aqui está o que parece se você quiser ser completo . E você pode querer adicionar iptables -t "$table" -Z. Observe que dessa maneira você está codificando a lista das tabelas e suas cadeias. Então, eu consideraria seriamente a solução de salvar e restaurar . Ou você pode simplesmente descarregar o iptables .
x-yuri
23

Isso redefinirá totalmente totalmente o seu sistema iptables para um estado muito básico:

iptables-save | awk '/^[*]/ { print $1 } 
                     /^:[A-Z]+ [^-]/ { print $1 " ACCEPT" ; }
                     /COMMIT/ { print $0; }' | iptables-restore

Todas as políticas serão redefinidas para ACEITAR, além de liberar todas as tabelas em uso atual. Todas as cadeias que não sejam as cadeias embutidas não existirão mais.

Jerub
fonte
1
Hack puro! Eu não dependeria disso, pois é sempre possível que mudanças sutis no formato de salvar / restaurar possam quebrá-lo. Provavelmente é melhor seguir a API que a iptablesferramenta fornece explicitamente, IMO.
Steven Monday
3
Mudei de idéia: é improvável que o formato dos dados mude mais, pois é amplamente usado. +1.
Steven Monday
2
1, hack interessante
Sam Halicke 11/11/2010
Isso conseguiu se livrar das sobras de cadeias UFW, algo que a resposta aceita não conseguiu.
l0b0 20/06
Esse é um detalhe menor, mas convém substituir o primeiro print $1por print $0ser consistente :)
x-yuri
2

Sempre que eu preciso do firewall desativado é algo como isto:

  • iptables-save > iptables.bak
  • service iptables stop (estou no fedora)
Realn0whereman
fonte
1

Você pode simplesmente descarregar iptables'módulos do kernel:

modprobe -r iptable_raw iptable_mangle iptable_security iptable_nat iptable_filter

UPD Infelizmente, bom demais para ser verdade. Enquanto houver uma regra ou uma cadeia definida pelo usuário em uma tabela, a contagem de referência do módulo correspondente será 1 e modprobe -rfalhará. Você pode excluir regras e cadeias definidas pelo usuário da seguinte forma:

echo $'*raw\nCOMMIT\n*mangle\nCOMMIT\n*security\nCOMMIT\n*nat\nCOMMIT\n*filter\nCOMMIT' | iptables-restore

ou:

iptables-save | awk '/^[*]/ { print $1 "\nCOMMIT" }' | iptables-restore

Além disso, você pode querer descarregar os módulos desta maneira (sem nomes de módulos codificados):

lsmod | egrep ^iptable_ | awk '{print $1}' | xargs -rd\\n modprobe -r

Pelo lado positivo, depois disso iptables-saveproduz uma boa saída vazia :)

x-yuri
fonte
Esse poderia ser o martelo aqui. Valeu.
Konrad Gajewski
0

Pode-se fazer isso em 1 ou 2 comandos:

 $ sudo iptables-save > iptables.bak
 $ sudo iptables -F

Resultado:

$ sudo iptables -nvL
Chain INPUT (policy ACCEPT 3138 packets, 5567K bytes)
pkts bytes target     prot opt in     out     source               destination         

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 3602 packets, 6547K bytes)
pkts bytes target     prot opt in     out     source               destination         
Mugoma J. Okomba
fonte
5
Se as políticas padrão atualmente estiverem definidas como DROP, esta é uma maneira rápida de ficar bloqueada no servidor. Portanto, não, não é um processo de comando 1 ou 2. Você precisa primeiro definir como ACEITAR se não estiver no momento.
21718 RyanH
0

Eu tive que bloquear todas as conexões recentemente, o que acabei fazendo foi

iptables-policy INPUT DROP
iptables-policy OUTPUT DROP
iptables-policy FORWARD DROP

quanto à economia, recomendo o seguinte

Ubuntu:

/etc/init.d/iptables save
/sbin/service iptables save

RedHat / CentOS:

/etc/init.d/iptables save
/sbin/iptables-save

Além de fazer backup de todas as regras ufw atuais que eu usei isso no passado

cp /lib/ufw/{user.rules,user6.rules} /<BACKUP LOCATION> 
cp /lib/ufw/{user.rules,user6.rules} ./

Eu acho que isso pode ser útil para referência futura. Pensei em compartilhar.

Boschko
fonte
0

Faça backup da configuração para iptables_backup.conf e limpe todas as regras.

iptables-save | tee iptables_backup.conf | grep -v '\-A' | iptables-restore

Para restaurar a configuração anterior:

iptables-restore < iptables_backup.conf
Zibri
fonte