web-dev-qa-db-ja.com

iptablesを使用して着信httpsをローカルIPにリダイレクトします

1つのネットワークインターフェイス(eth0、パブリックIP)とeth0:0のエイリアス、ローカルIP192.168.1.1を備えたルーターがあります。

すべての着信https(443)トラフィックを別のサーバーにリダイレクトしたいと思います。でやってみました

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 443 -m conntrack --ctstate NEW -j DNAT --to-destination 192.168.1.2:443そしてそれは動作します。私のパブリックIPのSSLポートに来るすべてのトラフィックは192.168.1.2にリダイレクトされます。

しかし、主な問題はこれです。これで、ローカルLANからインターネットへのすべてのhttpsトラフィックも、そのローカルIPにリダイレクトされます。 https://facebook.com および192.168.1.2の回答。構成を機能させるには、どのように修正すればよいですか?

3
AnttiQ

宛先アドレスに基づいてフィルタリングするだけです。

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 443 -d $PUBLIC_IP -m conntrack --ctstate NEW -j DNAT --to-destination 192.168.1.2:443

パブリックIPが動的である場合、IPアドレスが変更されたときにこのルールを更新するには、DHCPクライアントスクリプトにフックを追加する必要があります。また、IPセットを使用して、ルールを変更せずにチェックするIPアドレスを変更することもできます。

もう1つの不完全な解決策は、addrtypeモジュールを使用することです。このモジュールは、ルーティングテーブルをチェックして、アドレスに含まれるルーティングエントリのタイプを判別します。 LOCALタイプを使用して、このIPがホストのものであるかどうかを確認できます。

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 443 -m addrtype --dst-type LOCAL  -m conntrack --ctstate NEW -j DNAT --to-destination 192.168.1.2:443

このソリューションは、接続を192.168.1.1127.0.0.1、またはホストが持っている任意のIPアドレスにもリダイレクトすることに注意してください。ルールに単純な! -d 192.168.1.1一致を追加することにより、宛先アドレスを除外できます。

1
BatchyX