Tenho a seguinte regra do iptables que encaminha todo o tráfego de entrada para um ip na rede local10.8.0.2
sudo iptables -t nat -A PREROUTING -d 172.31.44.186 -j DNAT --to-destination 10.8.0.2
existe uma maneira de excluir o 27
encaminhamento da porta? (ou forçá-lo a ser "encaminhado" para 127.0.0.1
)
Não, a menos que você "divida" a regra em duas ou mais regras. Em outras palavras, você precisará adicionar regras para os protocolos onde a porta precisa ser excluída. Supondo que você queira excluir a porta TCP e UDP:
Observe que existem tráfegos que não são TCP nem UDP, portanto a regra "original" é mantida como "substituta". Também a ordem das regras é importante. Se a regra original for anexada (
-A
) primeiro (ou inserida, ou seja,-I
, por último), então as regras específicas do protocolo não serão correspondidas porque a regra original "capturaria" todos os tipos de-d 172.31.44.186
tráfego.FWIW, provavelmente a maneira mais adequada é ter uma cadeia definida pelo usuário:
Nada seria feito para tráfegos que visam a porta TCP ou UDP 27 quando eles atravessam a cadeia (
NAME_YOU_LIKE
) por causa de-j RETURN
, o que os impediria de atravessar a cadeia ainda mais e "levá-los de volta" para onde eles saltaram (ou seja,-j
) de (e continuar travessia lá, a menos que fosse um "goto", ou seja-g
, que os levasse a esta cadeia), enquanto os tráfegos de outra forma seriam DNAT para10.8.0.2
.(NOTA: se os tráfegos não corresponderem a nenhuma regra de terminação na cadeia definida pelo usuário, eles também voltarão para o ponto de onde saltaram. Em outras palavras, você pode ver isso, pois há incondicional
-j RETURN
no final que está implícito. Mas isso é "irrelevante" no exemplo, porque a-j DNAT
regra no final é uma regra de terminação incondicional.)Como a cadeia definida pelo usuário não tem nenhum efeito, a menos que os tráfegos sejam feitos para atravessá-la (ou seja, pular ou ir para) com uma regra em uma cadeia base, com (only)
-d 172.31.44.186 -j NAME_YOU_LIKE
, apenas os tráfegos que foram (originalmente) destinados a172.31.44.186
atravessariam a cadeia cadeia definida pelo usuário. (Para afirmar o óbvio, você NÃO precisa "verificar" os tráfegos com-d 172.31.44.186
"novamente" na cadeia definida pelo usuário para a qual eles saltaram.)Se a "exclusão" não for uma exceção, caso em que os tráfegos devem ir para o destino original, mas você realmente deseja que os tráfegos sejam eliminados, não será necessário fazer nenhuma alteração no
nat/PREROUTING
. Em vez disso, você pode/deve adicionar regras DROP (ou regras REJECT; em algumas opiniões/casos que podem ser uma escolha "melhor") emfilter/FORWARD
(oufilter/INPUT
, se o novo destino for este próprio host):(Abordagem de cadeia semelhante definida pelo usuário pode ser adotada, se desejado.)
PS O
multiport
módulo oferece--dports
a correspondência de vários números/intervalos de porta em uma única regra, que pode ser usada para evitar múltiplas--dport
regras. (No entanto, cada regra ainda pode ser usada para apenas um protocolo.) Consulteiptables-extensions(8)
para obter detalhes.