Linux iptables rejeitado - Como habilitá-lo de volta?

8

então, estou tendo um cliente na minha rede conectado ao roteador através do meu computador com arpspoof. Quando eu sei que deseja parar o encaminhamento de pacotes, eu executo:

iptables -A FORWARD -j REJECT

está funcionando como eu esperava. Mas quando tento fazer algo como:

iptables -A FORWARD -j ACCEPT

Não consigo fazer os pacotes passarem como no começo.

Estou fazendo algo errado ou existem outros argumentos que devo usar diferentes de "ACEITAR"?

Snipy
fonte
4
Pela maneira que você está usando -A, talvez você queira usar -Ppara definir o P olítica (ação padrão quando nenhuma outra regra na cadeia aplicável). Por exemplo, iptables -P FORWARD DROP(não pode ser REJECT).
JOL
O que significa "a pergunta deve demonstrar habilidades razoáveis ​​de gerenciamento do sistema"? :)
Marco

Respostas:

35

O IPtables possui uma lista de regras e, para cada pacote, verifica a lista de regras em ordem. Depois que uma regra é encontrada que corresponde ao pacote e especifica uma política (ACEITAR, REJEITAR, QUEDA), o destino do pacote correspondente é determinado; não são examinadas mais regras.

Isso significa que a ordem na qual você executa os comandos é importante. Ao usar iptables -A, você adiciona uma regra ao final da lista de regras e termina com uma lista de regras parecida com esta:

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited
ACCEPT     all  --  anywhere             anywhere

Como a REJECTregra vem antes da ACCEPTregra, ela é acionada primeiro e, portanto, o encaminhamento não acontece.

Portanto, você precisará excluir a REJECTregra em vez de adicionar uma ACCEPTregra. Para excluir a regra REJECT, execute

iptables -D FORWARD -j REJECT 

Para mais informações, leia a página de manual do iptables.

Jenny D
fonte
18

A -Aflag diz ao iptables para anexar a regra à cadeia, o que significa que ela acaba sob sua REJECTregra e, como a primeira regra corresponde, ela nunca é usada.

Você lista suas regras iptables -L FORWARDe verá isso você mesmo. Para se livrar da regra que você adicionou, execute

iptables -D FORWARD -j REJECT 

Até que não haja mais tais regras na cadeia.

Petter H
fonte
1

Que tal colocar no final da FORWARDregra um salto para uma nova cadeia na qual haverá apenas uma regra. Pode ser ACCEPTou REJECT. Dizer...

iptables -N accept-chain
iptables -A accept-chain -j ACCEPT
iptables -A FORWARD -j accept-chain

Depois disso, você pode alterar essa regra em accept-chainalgo como

iptables -R accept-chain 1 -j REJECT

para desativar o tráfego ou -j ACCEPTativar.

Também o que é possível ativar e desativar o roteamento

echo "0" > /proc/sys/net/ipv4/ip_forward

para desativar o encaminhamento de pacotes e "1"- para ativar.

gooamoko
fonte
0

Ordem importa. Isso inserirá sua regra na parte superior, em vez de anexar.

iptables -I FORWARD 1 -j ACCEPT

-I é inserir e # 1 é a posição

chandru-ops
fonte