ポート443でTCP接続を受け入れ、接続がOpenVPNクライアントかHTTPSクライアントであることを確認し、それを自分のWebサーバーまたはOpenVPNサーバーに転送する必要があるサーバーがあります。
SSLHはこの目的のために特別に設計されており、非常にうまく機能しているようです。唯一の問題は、不透明モードに設定しても問題はありませんが、透明モードを使用すると問題が発生することです。
透過モードがどのように機能するかについての理論を説明できる人はいますか?
これSSLHガイドでは、SSLHを透過的に使用するために、以下を行う必要があります。
- sslh.cfgを次のように設定します。
transparent: true;
- 私はすでにこれをしました
- SSLHには拡張権限(CAP_NET_ADMIN)が必要です。
- systemd用sslh.serviceに付属のCentOS 7リポジトリにsslhをインストールしました。サービスファイルには行が含まれている
CapabilityBoundingSet=... CAP_NET_ADMIN ...
ため、SystemDですでに実行されているとします。
- systemd用sslh.serviceに付属のCentOS 7リポジトリにsslhをインストールしました。サービスファイルには行が含まれている
- パケットと一種のローカルルーティングを表示するためのiptablesルールを設定します。
- これはよくわかりません。 SSLHサーバーに設定されていますか?それともOpenVPNとHTTPSサーバーに設定しますか?
例では、iptablesはソースポートが22または4443のすべてのパケットを0x1タグとしてマークし、0x1タグを持つすべてのパケットがルートテーブル100を使用するようにルールを作成し、ルートテーブル100を作成して一部を設定するように指示します受け取ったことを理解しています。ある種の特定のタスクを実行するローカルパスです。
これらのiptablesルールとルーティングが必要なのはなぜですか?実際、パスは何をしていますか?私はルーティングがWebサーバーとOpenVPNサーバーになければならず、SSLH IPを指すべきだと思いましたが、それも私にとってはうまくいかないようです。
===
更新:例では、サーバーはすべて同じシステム上にあり、実際のサーバーからの応答パケットが離れる前にSSLHシステムを通過したいので、これがlocalhostへのパスである可能性があると思いました。そうだと思いますか?それでは、サーバーが別のコンピューターにある場合はどうすればよいですか?このシステムからSSLHサーバーへのトラフィックの表示とルーティングをリセットしますか?
アップデート2:SSLHと同じマシンにHTTPSサーバーをすばやく設定しましたが、透過モードはSSLHドキュメントの例のように動作するようです。別のサーバーにいるときに機能するにはこれが必要です。
ベストアンサー1
不透明モードでは、クライアントはポートのプロキシclient_ip:client_port
に接続します。その後、プロキシはそのポートから内部サーバーへの接続を開きます。内部Webサーバーがから応答します。最後に、プロキシは応答パケットのソースを書き換えてクライアントに送信します。sslh
443
sslh
sslh_ip:sslh_port
4443
web_ip:4443
proxy_ip:proxy_port
sslh
sshl_ip:443
透過モードでは、sslh
プロキシと内部サーバー間の接続のためのパケットソースがネイティブパケットに設定されますclient_ip:client_port
。したがって、内部Webサーバーはソースclient_ip:client_port
として直接応答します。web_ip:4443
ただし、クライアントはパケットが形成されるのを待ちますproxy_ip:443
。
内部サーバーの応答パケットの書き換えを管理するには、これらのパケットをデーモンを介してルーティングする必要がsslh
あります。デーモンがループバックインターフェイスでクライアントの応答パケットを探しているようです。このマニュアルには、sslh
プロキシとWeb内部サーバーが同じコンピュータにあることだけが記載されています。
試行錯誤で次の解決策を見つけました。 (sslh
プロキシから)
ip route add local default dev lo table 100
ip rule add fwmark 0x1 lookup 100
iptables -t mangle -N SSLH
iptables -t mangle -A SSLH -j MARK --set-mark 0x1
iptables -t mangle -A SSLH -j ACCEPT
(内部サーバからの応答パケットの取得)
iptables -t mangle -A PREROUTING -p tcp -s **web_ip** --sport 4443 -j SSLH
...(ssh、openvpnなどの他のサービスに対する同様の規則)...
sshl
この機能は、内部Webサーバーのデフォルトパスがプロキシサーバーを介してインターネットに接続されている場合にのみ機能します。