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).

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

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.


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)

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 :)


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         

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.


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.