VPN olmadan TÜM web trafiğini TLS üzerinden yönlendirin


10

Varsayımlar:

Sunucu:

  • Genel İnternet üzerinden yönlendirilebilen ve statik IPv4 adresli bir Debian Squeeze sunucum var.
  • Sunucudaki yazılımı değiştirmek için sınırsız erişimim var.
  • Sunucu rasgele bağlantı noktalarında dinleme yapabilir, güvenlik duvarı kurallarını yeniden yapılandırabilir, temel olarak sunucunun ne yapabileceği konusunda herhangi bir kısıtlama yoktur.

Müşteri:

  • Firefox, Java programları, .NET programları ve yerel sistemimde yönetici erişimi gerektirmeyen bazı çalıştırılabilir dosyaları çalıştırabilirim (yönetici hakları olmayan kilitli bir Windows masaüstünde).
  • Eklentileri Firefox'a yükleyebilirim.
  • Loopback ( localhost) arabirimindeki herhangi bir bağlantı noktasını dinleyebilirim . Yani, yukarıda belirtilen programlar olabilir yerel bir bağlantı noktasına bağlamak ve bir proxy üzerinden gitmeden, keyfi ağ I / O gerçekleştirin.
  • Tüm halka açık İnternet erişimi, birçok siteyi engelleyen ve dikkatli bir şekilde dikkatli bir inceleme yapan kısıtlayıcı bir HTTP proxy'si aracılığıyla yönlendirilir. 80 numaralı bağlantı noktasında yalnızca HTTP'ye izin verir (TLS / SSL yok). 443 numaralı bağlantı noktasında, CONNECTSSL / TLS'yi alan adı / IP adresi tarafından engellenmeyen uzaktaki ana bilgisayarlara dayanarak sağlar .
  • Kısıtlayıcı HTTP vekil vermez proxy üzerinden izin verilen TLS bağlantılarının derin paket inceleme gerçekleştirmek ve bunu vermez bu bağlantılarda Orta saldırılarda Man gerçekleştirin.
  • Erişimim yukarıda belirtilen sunucu, bir değil vekil tarafından engellendi.

Hedef:

Ben rota istiyorum tüm SSL / TLS üzerinde, yukarıdaki sunucu üzerinden, Firefox yaydığı HTTP ve HTTPS istekleri.

"Hedef" ile ilgili diğer notlar:

  • Uç nokta sitesi (örneğin, http://superuser.com) sunucuma SSL / TLS kullanmasa bile, istemcimden sunucuma SSL / TLS kullanmak ve sunucumun şifrelenmiş olsun veya olmasın HTTP isteğini gerçekleştirmesini istiyorum. - İstediğim yere.
  • Ben umurumda değil benim sunucu "açık" SSL trafiğine bakıyor eğer. Başka bir deyişle, eğer uzak sunucuya örn https://google.com. Diğer bir deyişle, ben güveniyorum gizli verilerimi tutmak için sunucu.
  • Yönetici hakları gerektirmeyen ve 32 bit Windows 7 işletim sistemlerinde çalışabilen herhangi bir yazılım veya Firefox eklentisi yüklemeye razıyım.
  • Açık kaynak yazılımı tescilli yerine tercih edilir ve ücretsiz olarak lisans ücreti gerektiren bir yazılıma tercih edilir.
  • Mevcut yazılım, yeni yazılımı kodlamak yerine tercih edilir, ancak tek yol buysa kod yazmaya hazırım.

Gevşek bir şekilde tarif edilen ve "açıklayan" bir çözüm "arıyorum:

  • İstemcide hangi yazılım gerekir? Bildiğiniz belirli bir yazılım paketi varsa, adlandırın; Aksi takdirde, istemci yazılımının ne yapması gerektiğini açıklayın .
  • Sunucuda hangi yazılım gerekir? Bildiğiniz belirli bir yazılım paketi varsa, adlandırın; Aksi takdirde, sunucu yazılımının ne yapması gerektiğini açıklayın .
  • Yukarıdaki belirli yazılım paketlerini adlandırdıysanız, hedefime ulaşmak için hangi yapılandırma parametrelerinin gerekli olduğunu açıklayın.
  • Bazı nedenlerden dolayı bunun mümkün olmadığını düşünüyorsanız , nedenini açıklayın .

Çalıştıramadığım İşler

  • Sunucuma yüklerken squid, sunucuma kendi standart bir HTTP proxy'si kurmaya çalıştım. Bu işe yaramadı, çünkü Firefox'ta web sitelerini normal HTTP üzerinden talep ettiğimde, Firefox da sunucuma normal HTTP üzerinden erişmeye çalışıyor! Bu kabul edilemez, çünkü yerel ağımdaki proxy elbette müşterim ve sunucu arasındaki normal HTTP trafiğini gözlemleyebilir ve / veya engelleyebilir.
  • VPN'ler çalışmıyor , 443 numaralı bağlantı noktasını dinleyen TLS üzerinden OpenVPN bile yok, çünkü yerel bilgisayarda tunkatman 3 yönlendirme gerçekleştirebilen bir ağ bağdaştırıcısı yükleme iznim yok, ayrıca herhangi bir katman 2 yönlendirme de yapamıyorum (örneğin tap). Kısacası: OpenVPN'i kurmak için yönetici haklarına ihtiyacım vardı ve geçici olarak bu yönetici haklarına sahip olsam bile, şirket kurulursa çok memnun olmazdı. Bir Java veya .NET programı, özellikle Program Ekle / Kaldır'a yüklenmediğinde ve OpenVPN'in yaptığı gibi bir çekirdek sürücü bileşeni bulunmadığında çok daha az fark edilir.

Çorapları dener misin? Sunucunuzdaki 443 numaralı bağlantı noktasında tanımlayabilirsiniz.
Ashian

Bu makalede açıklanan çözümü kullanabilir misiniz: Zavallı adamın HTTP VPN'i ? HTTPTunnel bağlantısının yanlış olduğunu unutmayın.
harrymc

1
delegate.org yardımcı olabilir.
Arjan

@Ashian Hayır, SOCKS, TLS'ye sığmadıkça çalışmaz. SOCKS HTTP tabanlı bir protokol değildir, bu yüzden iç proxy'ye ulaştığında engellenir. Ben eğer idi TLS aracılığıyla çalıştırmak mümkün, muhtemelen farklı bir protokol kullanmak. İlk sorunum, Firefox'un kullanabileceği şekilde TLS tünelinin kurulması. Hala bunun nasıl yapılacağına dair bir açıklama görmedim.
allquixotic 12:14

@harrymc: Soru başlığı TLS üzerinden yazıyor . HTTP Tünel üzerinde yollar IP paketlerini HTTP olduğunu şifrelenmemiş ve yok değil TLS kullanın. Makalenin kendisi, bağlantının şifreli olmadığını söylüyor. Vekilimin buna izin vermesine imkân yok. Ayrıca, socatWindows istemci kutusunda yönetici ayrıcalıklarına sahip değilim veya yok .
allquixotic

Yanıtlar:


5

Bunu anladım. : D Bu çözüm tüm gereksinimlerimi karşılamakta ve hedeflerimin tümünü mükemmel şekilde karşılamaktadır. Performans, bunu başarmak için gerekli olan dolaylılık düzeyi göz önüne alındığında da fena değil.

Genel yaklaşım şöyledir:

  1. Yerel bir Sertifika Yetkilisi (CA) kurun ve bir RSA "sunucu anahtarı" ve "istemci anahtarı" oluşturun (256 bit şifreleme kullandım). Bunun için Easy-RSA 3.0.0-rc2 versiyonunu kullandım.

  2. Herhangi bir bataklık standart HTTP proxy'sini "Debian Box" (genel İnternet'teki sunucu) üzerinde çalıştırarak yalnızca yerel ana bilgisayarda dinlediğinden emin olun (genel İnternet'e maruz bırakılmamalıdır). Amaçlarım için kullandım Privoxy, ama Squidaynı şekilde çalışırdım. Yalnızca localhost'ta dinlendiğinden, kimlik doğrulama gerekli değildir (kutunuzda çalışan güvenmediğiniz işlemler olmadıkça; bu durumda, yikes ...)

  3. Stunnel'i indirin ve hem istemciye hem de sunucuya yükleyin. Bunu yapmak için işlem işletim sistemine özgü olacak; Benim durumumda, Windows için kaynaklardan (paranoya ...) hayrete derlemeyi seçtim, bu da oldukça detaylı bir süreçti. Sunucu tarafında, paket yöneticisinde mevcuttu :)

  4. Stunnel'in yapılandırması ilk başta göz korkutucu oldu, ancak göründüğü kadar basit! Temel olarak, sunucuda, aşağıdaki "sunucunun stunnel.conf" gibi bir şeye ihtiyacınız vardır. Müşteride, aşağıdaki "müşterinin stunnel.conf" gibi bir şeye ihtiyacınız var.

  5. Privoxy'yi başlatın; server üzerinde sersemletmek, config dosyasına işaret etmek; istemcideki stunnel'i config dosyasını işaretleyerek başlat. Privoxy'nin yapılandırmasıyla ilgili özel olan hiçbir şey yok; varsayılan benim için iyiydi.

  6. İstemci tarafında tercih ettiğiniz tarayıcınız olan Firefox’ta, HTTP ve HTTPS proxy’sini, müşterinizin stunnelinin dinlediği port ile aynı olacak şekilde ayarlayın - muhtemelen localhost: 8080.

Yerel ağınızın proxy'si bir tür kimlik doğrulaması isterse, sizin için kimliğinizi doğrulamak için stunnel almanız veya başka bir yerel görüşme proxy'si kullanmanız ve bunları birlikte zincirlemeniz gerekir - Firefox -> stunnel -> local gibi bir şey kimlik doğrulaması proxy -> LAN proxy / ağ geçidi -> internet -> sunucunuzun stunnel -> privoxy.

Çok fazla kopyalama, ama işe yarıyor!

;This is the *client's* stunnel.conf.
[https]
accept = localhost:9020
connect = your.lan.proxy:80
client = yes
protocol = connect
;protocolHost should be the same as the "accept" for the server
protocolHost = 1.2.3.4:443
;Same CAfile, different cert and key pair
CAfile = ca.crt
cert = client.crt
key = client.key
;VERY IMPORTANT!!! Make sure it's really your server and not a MITM attempt by your local network by making sure that the certificate authority "ca.crt" really signed the server's cert
verify = 2
;More performance tweaks...
sessionCachetimeout = 600
sessionCacheSize = 200
TIMEOUTidle = 600

.

;This is the *server's* stunnel.conf.
[https]
;1.2.3.4 is a publicly-routable, static IP address that can be connected to by your box that's under the firewall
accept = 1.2.3.4:443
;localhost:8118 is an example of where your local forwarding HTTP(S) proxy might reside.
connect = localhost:8118
CAfile = ca.crt
cert = server.crt
key = server.key
;VERY IMPORTANT!!! Without this, anyone in the world can use your public stunnel port as an open proxy!
verify = 2
;Set some timeouts higher for performance reasons
sessionCacheTimeout = 600
sessionCacheSize = 200
TIMEOUTidle = 600

Her şey bir kez yapılandırıldıktan sonra, sonuç şöyle sonuçlanır:

  1. Web tarayıcınız localhost:9020(stunnel) bağlanır ve HTTP ve / veya HTTPS bağlantılarını kabul edebilen bir proxy gibi davranır.
  2. Stunnel tarayıcınızdan bağlantı kurduğunda, güvenlik duvarınızın proxy / ağ geçidi üzerinden uzak sunucunuzla bir TLS oturumu oluşturmak için ulaşır. Bu noktada, müşteriniz sunucunuzun PKI sertifikasını doğrular ve bunun tersi de geçerlidir.
  3. Uzak sunucunuzla TLS oturumu kurulduktan sonra, stunnel, tarayıcınızdan gelen verileri, örneğin bir HTTP isteğini veya bir SSL tüneli isteğini, yerel proxy üzerinden ve doğrudan sunucunuza iletir. Bu kanal şifrelenmiştir, bu nedenle yerel ağınız verinin ne içerdiğini söyleyemez, yalnızca trafik analizi yaparak tahmin edebilir.
  4. Bir kez stunnelçalışan örneği sunucu üzerinde verilerini almaya başlar, bu örneğin bir bağlantı açar localhost:8118HTTP (S) proxy sunucusu, benim durumumda Privoxy içinde, dinleme nerede olurdu.
  5. Privoxy daha sonra normal bir iletme HTTP proxy sunucusu gibi davranır ve isteklerinizi sunucunun ISS'si üzerinden genel İnternet'e iletir.

İçerdiği soket ve arabelleklerin miktarı, bu yöntemi genel olarak çok yükseltir, özellikle de proxy üzerinden bir SSL bağlantısı kurarsanız, ancak yerel ağınızın SSL üzerinden hangi siteleri ziyaret ettiğinizi bilmesinin hiçbir yolu yoktur . Demek istediğim, sunucunuzu ziyaret ettiğinizi biliyor, ancak bunun dışında Gmail’i veya Süper Kullanıcı’yı ziyaret edip etmediğinizi bilmiyor. Ve yerel ağ geçidinizin sizi filtreleme veya engelleme yolu yoktur.


2

Bu kurulumu yerel makinemde denedim ve "kısıtlayıcı proxy" nin alacağına emin olabilirim CONNECT DEBIAN_IP:443 HTTP/1.1, ancak herhangi bir sertifika görmeyeceğinden, bunun işe yarayacağından emin değilim.

Diyelim ki: Debian'ınız proxy ve SSH sunucusuna sahip Apacheveya yapmıştır . İstemci PC'nizde, çalıştırmanız için yönetici ayrıcalıklarına ihtiyaç duymayan, yüklemeye gerek olmayan ve bir pendrive'dan çalıştırılabilen bir program gerekir.Squidputty

İlk önce Debian'ınız:

SSH bağlantı noktasında dinleme olun 443sadece ekleyebilir (veya geçerli bağlantı noktasını değiştirin) bir Port 443üzerinde /etc/ssh/sshd_configve aynı zamanda TCP yönlendirme izin (eklemek AllowTcpForwarding yeso dosya üzerinde)

Squid veya Apache'nizi proxy yapmak için yapılandırın. Bu bir SSH tüneli üzerinden kullanılacağından, sadece geridöngü arayüzü üzerinde dinlemek gerekirdi. Bir Apache kullanmanız durumunda:

Listen 127.0.0.1:8080
ProxyRequests On
<Proxy *>
  Order deny,allow
</Proxy>

Sunucu yapıldı, istemci PC'nizi yapılandıralım:

Macunda, Debian'ın genel IP'sini bağlantı noktası olarak Hostve 443bağlantı noktası olarak yapılandırın . SSHHala seçili olduğundan emin olun . Connection -> ProxyAyarlara geçin, HTTP"kısıtlayıcı proxy" ayarlarınızı seçin ve doldurun. ConnectionAyarlara geçin ve 30- 60. Değiştirin Connection -> SSH -> Tunnels. On source portstablish 8080ve üzerinde Destination, localhost:8080. LocalSeçili bırakın ve tuşuna basın Add. Böyle bir şeyin üstünde uzayda görmelisin L8080 locahost:8080. Geri değiştirin Session, ayarların ilk satırda bir isim yaz Saved sessionsve bütün bu sıkıcı ayarları kaydetmek sonraki günlerde bağlantıyı restablish yardımcı olur.

Şimdi OpenDebian'ınızla olan bağlantıyı deneyebilirsiniz . Kullanıcı mesajını görürseniz, bununla bitirmekten sadece bir adım ötedeyiz. Olmazsa ... başka bir yol aramalıyız.

Şimdi, Firefox'ta localhostbağlantı noktasında vekiliniz 8080olarak ayarlayın .


Ne yazık ki, bu işe yaramayacak, çünkü SSH'nin protokolü SSL / TLS'ye dayanmıyor. Müşteri tarafımdaki kısıtlayıcı proxy, 443 numaralı bağlantı noktasından geçen bağlantının kokusunu aldığında, bunun bir TLS soketi olmadığını anında anlar ve düşürür. Verilirse, TLS'ye sarabilirim , ancak cevabınızın tanımladığı şey bu değil.
allquixotic

Bir HTTP proxy (BURP) ile bir test yaptım ve çalıştım, bu yüzden denemeye değdi.
SSS'yi TLS'ye sarmak

TLS üzerinden SSH gerekli olmayan dolaylıdır. Zaten TLS soketiniz varsa, gerçekten SSH'ye ihtiyacınız yoktur. Aşağıdaki cevaba bakınız. (Not: Bu cevabı yakın zamana kadar bilmiyordum, bu yüzden cevabınızı
yumuşatıp çözüme ulaştırdım


1

Sunucunuzda proxy ayarlayarak yarıya kadarsınız. Diğer yarısı sunucudaki SSL ve istemcideki SSL etkin HTTP proxy'nize bağlanmak için macun kullanan bir yerel proxy ve Firefox'u her şeyi 127.0.0.1 olarak proxy yapacak şekilde ayarlamaktır.

Macun kurulumu için hızlı bir google yaptım ve şunu buldum: https://mariobrandt.de/archives/technik/ssh-tunnel-bypassing-transparent-proxy-using-apache-170/


Adil olmak gerekirse, göreviyle çok daha fazla ayrıntıya girdi. Oy için teşekkürler.
joe

@krowe Cevabımın hiçbir yerinde "Apache" veya "PuTTY" yazmıyor.
allquixotic

Hayır, bu cevabı yenmişsin beni rahatsız etmiyor! Ben sadece yorumunuzu bir şekilde onun cevabını çektiğimi ya da bir yanıt aradığımı, aslında bir çözüm ararken gerçekten bu cevaptan fazla kazanamadığımı söyleyerek yorumladım. Geçmişe bakıldığında, bağlantılı blog , gönderdiğim yanıtın yerine iyi bir alternatif gibi görünüyor , ancak performans, özellikler vb. Açısından nasıl farklı olacağından emin değilim (daha iyi veya daha kötü olabilir).
allquixotic

+1 Bunu beğendim çünkü yine de bir web sunucusu çalıştırıyorum.
krowe
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.