web-dev-qa-db-ja.com

IPTablesで透過的なSquidをバイパスする

以前にも同様の質問がありましたが、受け取った回答は満足のいくものではなかったか、私の状況には当てはまりませんでした。

ネットワークのすべてのhttpおよび一部のマシンのみのhttpsトラフィックをフィルタリングする透過的なsquidプロキシがあります。これは、次のiptablesルールで実現しました。

  iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128
    iptables -t nat -A PREROUTING -i eth0 -p tcp -s 192.168.1.100 -m tcp --dport 443 -j REDIRECT --to-ports 3127
    iptables -t nat -A PREROUTING -i eth0 -p tcp -s 192.168.1.101 -m tcp --dport 443 -j REDIRECT --to-ports 3127
    iptables -t nat -A PREROUTING -i eth0 -p tcp -s 192.168.1.102 -m tcp --dport 443 -j REDIRECT --to-ports 3127

ただし、特定のドメインではsquidをバイパスしたいと思います。クライアントがmydomain.comにリクエストを送信すると、ネットワークのゲートウェイに直接アクセスする必要があります。

上記のルールを他のルールの前に挿入してみました。

iptables -t nat -A PREROUTING -i eth0 -d $IP_OF_MYDOMAIN.COM -j DNAT --to-destination $IP_OF_ROUTER
iptables -t nat -A PREROUTING -i eth0 -s $IP_OF_ROUTER -j RETURN

ただし、この設定は機能していません。何が足りないのですか?これを行うためのより良い方法はありますか?

編集

ルールの順序は次のとおりです。

        iptables -t nat -A PREROUTING -i eth0 -d $IP_OF_MYDOMAIN.COM -j DNAT --to-destination $IP_OF_ROUTER
        iptables -t nat -A PREROUTING -i eth0 -s $IP_OF_ROUTER -j RETURN
        iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128
        iptables -t nat -A PREROUTING -i eth0 -p tcp -s 192.168.1.100 -m tcp --dport 443 -j REDIRECT --to-ports 3127
        iptables -t nat -A PREROUTING -i eth0 -p tcp -s 192.168.1.101 -m tcp --dport 443 -j REDIRECT --to-ports 3127
        iptables -t nat -A PREROUTING -i eth0 -p tcp -s 192.168.1.102 -m tcp --dport 443 -j REDIRECT --to-ports 3127
1
Aaron Ullal

私が正しく理解していれば、特定のIPアドレスへのトラフィックを強制的なリダイレクトから除外したいと考えています。そうです、あなたはそれについて間違った方法で進んでいます。

上記のiptables構成の最初の2行を次のように置き換えます

iptables -t nat -A PREROUTING -d a.b.c.d -j ACCEPT

どこ a.b.c.dは、強制リダイレクトから免除されるIPアドレスです。現在のルールのペアと同様に、このルールはbefore強制リダイレクトコードである必要があることに注意してください。

2
MadHatter