Estou hospedando serviços HTTP e HTTPS especiais nas portas 8006 e 8007, respectivamente. Eu uso o iptables para "ativar" o servidor; ou seja, para rotear as portas HTTP e HTTPS de entrada:
iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 8006 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 8007 -j ACCEPT
iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8006
iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 443 -j REDIRECT --to-port 8007
iptables -A OUTPUT -t nat -d 127.0.0.1 -p tcp --dport 80 -j REDIRECT --to-ports 8006
iptables -A OUTPUT -t nat -d 127.0.0.1 -p tcp --dport 443 -j REDIRECT --to-ports 8007
Isso funciona como um encanto. No entanto, gostaria de criar outro script que desabilite meu servidor novamente; ou seja, restaure o iptables para o estado em que estava antes de executar as linhas acima. No entanto, estou tendo dificuldade em descobrir a sintaxe para remover essas regras. A única coisa que parece funcionar é uma descarga completa:
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
Mas isso também excluirá outras regras do iptables que são indesejadas.
-I
vez de-A
paraACCEPT
linhas. Isso ocorre porque, tipicamente, a última linha (porINPUT
cadeia, por exemplo) é umDROP
ouREJECT
e você deseja que sua regra venha antes disso.-A
coloca a nova regra após a última, enquanto-I
coloca no início.Respostas:
Execute os mesmos comandos, mas substitua o "-A" por "-D". Por exemplo:
torna-se
fonte
-I
ou-R
, ainda pode excluí-la com-D
.Você também pode usar o número da regra ( --line-numbers ):
Exemplo de saída:
Portanto, se você deseja excluir a segunda regra:
Atualizar
Se você usar (d) uma tabela específica (por exemplo, nat), precisará adicioná-la ao comando delete (thx para @ThorSummoner para o comentário)
fonte
iptables -L INPUT --line-numbers | grep -oP "([0-9]{1,3}).*tcp.*domain" | cut -d" " -f1
-t nat
, por exemplo:sudo iptables -t nat --line-numbers -L
, e excluí-los com-t nat
muito, por exemplo:sudo iptables -t nat -D PREROUTING 1
(Pode valer a pena acrescentar à resposta?)A melhor solução que funciona para mim sem problemas é a seguinte:
1. Adicione uma regra temporária com algum comentário:
2. Quando a regra foi adicionada e você deseja removê-la (ou tudo com este comentário), faça:
Portanto, você excluirá 100% de todas as regras que correspondem ao comentário $ e deixará outras linhas intocadas. Esta solução funciona nos últimos 2 meses com cerca de 100 alterações de regras por dia - sem problemas.
fonte
iptables -S | grep "${comment}" | sed 's/^-A //' | while read rule; do iptables -D $rule; done
spamhaus
iptables proibições, 2) grab spamhaus.org/drop , 3) grep para CIDR IP do eiptables -A INPUT -s $ip_cidr -j -m comment --comment "spamhaus"
iptables -S | sed "/$comment/s/-A/iptables -D/e"
;) como estePrimeiro, liste todas as regras do iptables com este comando:
lista como:
Em seguida, copie a linha desejada e substitua
-A
por-D
para excluir:fonte
iptables: Bad rule (does a matching rule exist in that chain?).
que agora?nat
comsudo iptables -S -t nat
e que pretende eliminar uma das regras devolvidos, a cópia não é suficiente. Você precisa adicionar-t nat
, por exemplosudo iptables -D ... -t nat
.Use o
-D
comando, é assim que aman
página explica:Realize esse comando, como todos os outros comandos (
-A
,-I
) funcionam em determinada tabela. Se você não estiver trabalhando na tabela padrão (filter
tabela), use-t TABLENAME
para especificar essa tabela de destino.Excluir uma regra para corresponder
Nota: Isso exclui apenas a primeira regra correspondente. Se você tiver muitas regras correspondentes (isso pode acontecer no iptables), execute isso várias vezes.
Excluir uma regra especificada como um número
Além de contar o número, você pode listar o número da linha com o
--line-number
parâmetro, por exemplo:fonte
iptables -F
Suponha que, se você deseja remover as regras NAT,
Liste as tabelas IP anexadas usando o comando abaixo,
Se você deseja remover a regra nat das tabelas IP, basta executar o comando
Então, você pode verificar se,
fonte