Błąd PSK programu Stunnel

1

Zbudowałem anonimowy serwer proxy SSL SSL stunnel 5.29 + squid 3.3 do kilku celów i chcę włączyć autoryzację PSK. Konfiguracja serwera stunnel:

pid = /run/stunnel.pid
chroot  = /var/lib/stunnel
client  = no
setuid  = stunnel
setgid  = stunnel
cert    = /etc/stunnel/stunnel.pem

debug   = 7
;output = stunnel.log
foreground = yes

[server_psk]
accept = 443
accept = :::443
connect = 127.0.0.1:8443
ciphers = PSK
PSKsecrets = /etc/stunnel/psk.txt

[server_proxy]
accept = 8443
connect = 127.0.1:3128
sslVersion = all
ciphers = ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!3DES:!MD5:!PS
options = NO_SSLv2
options = NO_SSLv3
options = CIPHER_SERVER_PREFERENCE

Ale odkrywam, że nie mogę połączyć się z Internetem i po stronie klienta otrzymuję ten komunikat:

LOG5[676]: Service [squid] accepted connection from 127.0.0.1:60216
LOG3[676]: s_connect: s_poll_wait 192.169.169.152:443: TIMEOUTconnect exceeded
LOG5[676]: Connection reset: 0 byte(s) sent to SSL, 0 byte(s) sent to socket

Przeglądarka (Firefox 43) zgłasza dwa błędy, SSL Errorkiedy uzyskuję dostęp do Google za pomocą HTTPS i Connection Resetkiedy uzyskuję dostęp do witryny nieobsługującej HTTPS. Oto konfiguracja po stronie klienta:

client = yes

[local_proxy]
accept = 127.0.0.1:8089
connect = 192.169.169.152:443
PSKsecrets = psk.txt
CAfile = ca-certs.pem
sslVersion = all
options = NO_SSLv2
options = NO_SSLv3

Potwierdziłem, że konfiguracja kałamarnicy jest dobra i działa, więc jestem pewien, że problem występuje w stunnel. Czy ktoś doświadczony w stunnel może mi pomóc?

Hartman
źródło

Odpowiedzi:

1

Po dniu spędzonym na badaniach w końcu odkrywam sposób rozwiązania problemu. Wskazówka jest taka: strona klienta musi się rozdzielić na dwie części, takie jak strona serwera. Dlatego zmieniam konfigurację po stronie klienta na:

[local_psk]
client = yes
accept = 127.0.0.1:8443
connect = 192.168.169.152:443
PSKsecrets = psk.txt

[local_proxy]
client = yes
accept = 127.0.0.1:8089
connect = 127.0.0.1:8443
sslVersion = all
options = NO_SSLv2
options = NO_SSLv3

Tak więc proces wygląda następująco:

browser <--> [local_proxy] <--> [local_psk] <==> [server_psk] <--> [server_proxy] <==> website

gdzie -oznacza ruch lokalny, ruch =internetowy i []oznacza konfigurację sekcji w stunnel

I aktualizuję opcję [squid]sekcji konfiguracji serwera acceptod 8443do 127.0.0.1:8443. Ta informacja stunnel akceptuje tylko połączenie z localhost, w przeciwnym razie [PSK]sekcja stanie się bezużyteczna. Oto jak wygląda po zmianie:

[server_proxy]
accept = 127.0.0.1:8443
connect = 127.0.1:3128
sslVersion = all
ciphers = ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!3DES:!MD5:!PS
options = NO_SSLv2
options = NO_SSLv3
options = CIPHER_SERVER_PREFERENCE

UWAGA

Te konfiguracje służą wyłącznie do programowania / testowania. Jeśli chcesz mieć wysoce bezpieczny anonimowy serwer proxy, musisz ustawić debug = 0opcję wyłączenia rejestrowania i foreground = nodemona w pliku konfiguracyjnym stunnel, z odpowiednią konfiguracją konfiguracji kałamarnicy i regułami iptables.

Hartman
źródło