Imagine que eu tenha 3 regras no iptables:
- Verifique se o IP está na lista de permissões no ipset e aceite-o.
- Verifique se o usuário tenta se conectar à porta 22 e, em seguida, solte-a.
- Verifique se o usuário tenta se conectar à porta 80 e aceite-a.
Este é um exemplo (não real) de regras:
iptables -A INPUT -m set --match-set whitelist src -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j DROP
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
Mas eu gostaria de fazer isso se o usuário estiver na lista de permissões (1ª regra), então não o aceite, mas pule/redirecione para a 3ª regra (pule a 2ª regra), como nesta imagem ( eu sei que se o pacote for ACEITO, então está feito, isso é apenas um exemplo, não sei como fazer esse salto ):
Então eu gostaria de perguntar a você, como posso definir esse "pular" em cadeia.
Subquestão: Se for possível, também é possível redirecioná-lo para outra cadeia para uma regra específica?
Atualização: cenário real
iptables -A INPUT -m set --match-set whitelist src -j ACCEPT
iptables -A INPUT -m geoip --src-cc DE -j DROP
... other rules ...
Como você pode ver, eu coloquei na lista de permissões apenas a Alemanha, se o IP do alemão passar pela segunda regra, então vou verificar se há outras regras, mas também uso IPs na lista de permissões.
Portanto, se algum IP estiver na lista de permissões (principalmente não alemão), não quero verificar se é IP alemão (porque falharia), em vez disso, esse IP deve pular para outras regras (3ª linha) e pular a verificação do país.
Que tal ir para a função?
Uma cadeia personalizada pode ser usada para organizar as coisas com mais facilidade. Há um outro destino "terminal" mais útil uma vez em uma cadeia personalizada:
RETURN
para voltar imediatamente e executar a regra após a regra de chamada.RETURN
na cadeia base apenas aplica a política padrão, por isso não é muito usado.O exemplo solicitado torna-se:
Às vezes, inverter a lógica e o agrupamento também pode funcionar. Para este caso simples, um método equivalente teria sido simplesmente:
Para o cenário atualizado : solte tudo o que não está na lista de permissões nem do DE (nem ...). Para exceções adicionais, basta adicionar mais regras terminando com
-j RETURN
antes do-j DROP
Atualização 2 : alterou a lógica
DE
desde que o OP também a alterou ... se, de acordo com a alteração do OP, o tráfego for interrompido para a Alemanha, aqui, o tráfego continua para fora da Alemanha.Até onde eu sei, você não pode pular regras dentro de uma cadeia. Você absolutamente pode "saltar" para outra cadeia se uma regra for correspondida. Por exemplo,
iptables -A INPUT -p tcp -j tcp_packet_chain
corresponderá a todos os pacotes TCP e os levará para o "tcp_packet_chain". É importante notar que se o pacote não for ACCEPTed ou DENYed na cadeia, você retornará à próxima regra na cadeia original.