Observo que o IP de destino do exemplo que você fornece não é, na verdade, um endereço IP (que é o que o iptables
oferece), mas um nome de domínio totalmente qualificado. No entanto, suponhamos que você tenha realmente citado um endereço IP e suponhamos que ele seja 198.51.100.1
(de acordo com nossas conselhos sobre exemplos de endereços IP ).
Com apenas um endereço para isenção, você pode adicioná-lo à regra como uma isenção explícita:
iptables -t nat -A PREROUTING -p tcp --dport 80 \! -d 198.51.100.1 -j REDIRECT --to-port 1000
Observe o uso da barra invertida para proteger a negação ( !
) do shell. Se você tivesse mais endereços para isentar, seria mais simples escrever regras explícitas que correspondam a esses endereços e concluir o processamento com um destino de dispositivo inofensivo. Em seguida, deixe uma regra pega-tudo no final para lidar com todo o resto:
iptables -t nat -A PREROUTING -p tcp --dport 80 -d 192.0.2.0/24 -j ACCEPT
iptables -t nat -A PREROUTING -p tcp --dport 80 -d 198.51.100.0/24 -j ACCEPT
iptables -t nat -A PREROUTING -p tcp --dport 80 -d 203.0.113.0/24 -j ACCEPT
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 1000
Note que, como sempre, a ordem é importante nas regras do iptables. Onde estes vêm em sua cadeia é importante, e você precisa ter um cuidado para acertar.
Editar : você pergunta o que acontecerá com os pacotes que correspondem às regras com ACCEPT
destinos, ou seja, os pacotes isentos. Quando eles corresponderem a ACCEPT
, eles ficarão fora da cadeia PREROUTING
nat, e nenhum processamento adicional acontecerá a eles nessa cadeia . Seu destino final será determinado por regras e políticas nas outras cadeias pelas quais eles passarão.