iptables -A ...
coloca a regra no final de uma cadeia. Assim, o seu nunca corresponde (ou pelo menos sem efeito) porque o segundo ( -s ! $PROXY_SERVER
) já tem esses pacotes / conexões.
Em vez de iptables -A PREROUTING
, você precisa de iptables -I PREROUTING 2
. Ou você cria cadeias para tornar a estrutura mais fácil de entender:
#!/bin/bash
INTERNAL_NETWORK="192.168.1.0/24"
ROUTER_IP="192.168.1.1"
PROXY_SERVER="192.168.1.3"
PROXY_PORT="3128"
if iptables -L prerouting_exceptions -n &>/dev/null; then
iptables -t nat -F prerouting_exceptions
else
iptables -t nat -N prerouting_exceptions
fi
# this prevents the same rule being inserted with each script call
if ! iptables -L FORWARD -n | grep -q proxy; then
iptables -t filter -I FORWARD -s $INTERNAL_NETWORK -d $PROXY_SERVER -i br0 \
-o br0 -p tcp --dport $PROXY_PORT -j ACCEPT -m comment --comment proxy
fi
iptables -t nat -F PREROUTING
iptables -t nat -A PREROUTING -j prerouting_exceptions
iptables -t nat -A PREROUTING -i br0 -s ! $PROXY_SERVER -p tcp \
--dport 80 -j DNAT --to $PROXY_SERVER:$PROXY_PORT
iptables -t nat -A prerouting_exceptions -i br0 -s $INTERNAL_NETWORK \
-d $INTERNAL_NETWORK -p tcp --dport 80 -j ACCEPT
iptables -t nat -A prerouting_exceptions -d caixa.gov.br -j ACCEPT