Sziasztok! Egy webszervert védenék http/https proxyval (az apache a zorp egy gépen van). A teszt üzemben minden jól működött, viszont, most, hogy ma élesbe ment a site a https proxy néha beadja az unalmast. Először lassulásokat tapasztalok, majd a https teljesen leáll. Ezekután csak force-stop-pal tudom csak leállítani a https proxy-t. Mi a fene lehet? ------------------------------------------------------------------- # zorpctl version Zorp 3.0.8 Revision: devel@balabit.hu--zorp-1/zorp-core--mainline--3.0--patch-362 Compile-Date: Dec 18 2005 19:39:15 Config-Date: 2005/12/18 Trace: off Debug: off IPOptions: off IPFilter-Tproxy: off Netfilter-Tproxy: on Netfilter-Linux22-Fallback: on Linux22-Tproxy: off Conntrack: on Zorplib 3.0.6.4 Revision: devel@balabit.hu--zorp-1/zorp-lib--mainline--3.0--patch-109 Compile-Date: Dec 18 2005 19:37:19 -------------------------------------------------------------------- uname -a Linux szerver 2.6.10-1.760_FC3tproxy2.0.0smp #1 SMP Thu Jul 21 16:53:02 CEST 2005 i686 i686 i386 GNU/Linux -------------------- A logokban valami ilyesmi láccik: Jan 10 14:20:22 szerver zorp_ssl[5547]: (zorp_ssl@zorp@www_szerver/https:377/pssl): SSL handshake failed on the client side; error='error:000000 00:(null):lib(0):(null):func(0):(null):reason(0)' Először minden jól megy (kb. 30 perc), majd elkezdenek ezek a hibaüzenetek szaporodni.... Köszi a segítséget Czigi
On Tue, 2006-01-10 at 20:41 +0200, Balazs Czigany wrote:
Sziasztok!
Egy webszervert védenék http/https proxyval (az apache a zorp egy gépen van). A teszt üzemben minden jól működött, viszont, most, hogy ma élesbe ment a site a https proxy néha beadja az unalmast. Először lassulásokat tapasztalok, majd a https teljesen leáll. Ezekután csak force-stop-pal tudom csak leállítani a https proxy-t. Mi a fene lehet?
------------------------------------------------------------------- # zorpctl version Zorp 3.0.8 Revision: devel@balabit.hu--zorp-1/zorp-core--mainline--3.0--patch-362 Compile-Date: Dec 18 2005 19:39:15 Config-Date: 2005/12/18 Trace: off Debug: off IPOptions: off IPFilter-Tproxy: off Netfilter-Tproxy: on Netfilter-Linux22-Fallback: on Linux22-Tproxy: off Conntrack: on
Zorplib 3.0.6.4 Revision: devel@balabit.hu--zorp-1/zorp-lib--mainline--3.0--patch-109 Compile-Date: Dec 18 2005 19:37:19
Pro vagy GPL ? (jut eszembe, lehet, hogy a version kimenetbe ki kellene irni...) Van egy ilyen javitas, ami a Pro-ban 3.0.8-cal jelent meg, viszont a GPL-ben egy teljesen masik Pssl proxy van, igy ellenoriznem kellene, hogy abban megvan-e. * Fixed timeout processing during SSL handshake. * Added new handshake_timeout parameter to control the timeout used during SSL handshake. Ugy nezem ott meg megvan ez a problema. Ellenorizni ugy tudod, hogy tenyleg errol van-e szo, hogy rainditasz egy strace-t egy SSL-es szalra, ami valoszinuleg read()-ben blokkol. Egy ido utan betelik a --threads altal megadott limit, es ilyenkor a zorp var egy szal felszabadulasara, ami ha a szalak fixen, timeout nelkul blokkolnak sosem tortenik meg. Atportoltam a kereskedelmiben levo javitast (bar szemelyesen nem tudtam kiprobalni), a lenyeg, hogy letrejott egy handshake_timeout attributum, default 30 masodperc, es ha az SSL handshake nem jon letre ennyi ido alatt barmelyik oldalon, akkor bontja a kapcsolatot. --- orig/modules/pssl/pssl.c +++ mod/modules/pssl/pssl.c @@ -51,6 +51,7 @@ typedef struct _PsslProxy GString *server_ca_dir; GString *server_crl_dir; gboolean need_ssl[EP_MAX]; + gint handshake_timeout; int verify_type[EP_MAX]; int verify_depth[EP_MAX]; } PsslProxy; @@ -71,6 +72,7 @@ pssl_config_set_defaults(PsslProxy *self z_proxy_enter(self); + self->handshake_timeout = 30000; self->session_data.timeout = -1; self->session_data.copy_to_server = TRUE; self->session_data.copy_to_client = TRUE; @@ -113,6 +115,11 @@ pssl_register_vars(PsslProxy *self) &self->session_data.timeout); z_proxy_var_new(&self->super, + "handshake_timeout", + Z_VAR_GET | Z_VAR_SET_CONFIG | Z_VAR_TYPE_INT, + &self->handshake_timeout); + + z_proxy_var_new(&self->super, "copy_to_client", Z_VAR_GET | Z_VAR_SET_CONFIG | Z_VAR_TYPE_INT, &self->session_data.copy_to_client); @@ -311,11 +318,12 @@ pssl_init_client_ssl(PsslProxy *self) SSL_set_options(ssl->ssl, SSL_MODE_ENABLE_PARTIAL_WRITE); + z_stream_set_timeout(self->super.endpoints[EP_CLIENT], self->handshake_timeout); + tmpstream = self->super.endpoints[EP_CLIENT]; self->super.endpoints[EP_CLIENT] = z_stream_ssl_new(tmpstream, ssl); z_stream_unref(tmpstream); - z_stream_set_timeout(self->super.endpoints[EP_CLIENT], self->session_data.timeout); ret = SSL_accept(ssl->ssl); if (ret <= 0) @@ -339,6 +347,7 @@ pssl_init_client_ssl(PsslProxy *self) } z_ssl_session_unref(ssl); + z_stream_set_timeout(self->super.endpoints[EP_CLIENT], -2); z_proxy_log(self, PSSL_DEBUG, 6, "Client side SSL handshake successful;"); z_proxy_leave(self); return TRUE; @@ -370,13 +379,13 @@ pssl_init_server_ssl(PsslProxy *self) } SSL_set_options(ssl->ssl, SSL_MODE_ENABLE_PARTIAL_WRITE); - + + z_stream_set_timeout(self->super.endpoints[EP_SERVER], self->handshake_timeout); + tmpstream = self->super.endpoints[EP_SERVER]; self->super.endpoints[EP_SERVER] = z_stream_ssl_new(tmpstream, ssl); z_stream_unref(tmpstream); - z_stream_set_timeout(self->super.endpoints[EP_SERVER], self->session_data.timeout); - ret = SSL_connect(ssl->ssl); if (ret <= 0) { @@ -399,6 +408,7 @@ pssl_init_server_ssl(PsslProxy *self) } z_ssl_session_unref(ssl); + z_stream_set_timeout(self->super.endpoints[EP_SERVER], -2); z_proxy_log(self, PSSL_DEBUG, 6, "Server side SSL handshake successful;"); z_proxy_leave(self); return TRUE;
Szia! Köszi, GPL-es Zorpról van szó, ha minden igaz este ki tudom próbálni, addigra elkészül a tesztkörnyzet. Holnap beszámolok az eredményről. Üdv Balázs On Wed, 11 Jan 2006 13:19:46 +0100, Balazs Scheidler wrote
On Tue, 2006-01-10 at 20:41 +0200, Balazs Czigany wrote:
Sziasztok!
Egy webszervert védenék http/https proxyval (az apache a zorp egy gépen van). A teszt üzemben minden jól működött, viszont, most, hogy ma élesbe ment a site a https proxy néha beadja az unalmast. Először lassulásokat tapasztalok, majd a https teljesen leáll. Ezekután csak force-stop-pal tudom csak leállítani a https proxy-t. Mi a fene lehet?
------------------------------------------------------------------- # zorpctl version Zorp 3.0.8 Revision: devel@balabit.hu--zorp-1/zorp-core--mainline--3.0--patch-362 Compile-Date: Dec 18 2005 19:39:15 Config-Date: 2005/12/18 Trace: off Debug: off IPOptions: off IPFilter-Tproxy: off Netfilter-Tproxy: on Netfilter-Linux22-Fallback: on Linux22-Tproxy: off Conntrack: on
Zorplib 3.0.6.4 Revision: devel@balabit.hu--zorp-1/zorp-lib--mainline--3.0--patch-109 Compile-Date: Dec 18 2005 19:37:19
Pro vagy GPL ? (jut eszembe, lehet, hogy a version kimenetbe ki kellene irni...)
Van egy ilyen javitas, ami a Pro-ban 3.0.8-cal jelent meg, viszont a GPL-ben egy teljesen masik Pssl proxy van, igy ellenoriznem kellene, hogy abban megvan-e.
* Fixed timeout processing during SSL handshake. * Added new handshake_timeout parameter to control the timeout used during SSL handshake.
Ugy nezem ott meg megvan ez a problema. Ellenorizni ugy tudod, hogy tenyleg errol van-e szo, hogy rainditasz egy strace-t egy SSL-es szalra, ami valoszinuleg read()-ben blokkol.
Egy ido utan betelik a --threads altal megadott limit, es ilyenkor a zorp var egy szal felszabadulasara, ami ha a szalak fixen, timeout nelkul blokkolnak sosem tortenik meg.
Atportoltam a kereskedelmiben levo javitast (bar szemelyesen nem tudtam kiprobalni), a lenyeg, hogy letrejott egy handshake_timeout attributum, default 30 masodperc, es ha az SSL handshake nem jon letre ennyi ido alatt barmelyik oldalon, akkor bontja a kapcsolatot.
--- orig/modules/pssl/pssl.c +++ mod/modules/pssl/pssl.c @@ -51,6 +51,7 @@ typedef struct _PsslProxy GString *server_ca_dir; GString *server_crl_dir; gboolean need_ssl[EP_MAX]; + gint handshake_timeout; int verify_type[EP_MAX]; int verify_depth[EP_MAX]; } PsslProxy; @@ -71,6 +72,7 @@ pssl_config_set_defaults(PsslProxy *self
z_proxy_enter(self);
+ self->handshake_timeout = 30000; self->session_data.timeout = -1; self->session_data.copy_to_server = TRUE; self->session_data.copy_to_client = TRUE; @@ -113,6 +115,11 @@ pssl_register_vars(PsslProxy *self) &self->session_data.timeout);
z_proxy_var_new(&self->super, + "handshake_timeout", + Z_VAR_GET | Z_VAR_SET_CONFIG | Z_VAR_TYPE_INT, + &self->handshake_timeout); + + z_proxy_var_new(&self->super, "copy_to_client", Z_VAR_GET | Z_VAR_SET_CONFIG | Z_VAR_TYPE_INT, &self->session_data.copy_to_client); @@ -311,11 +318,12 @@ pssl_init_client_ssl(PsslProxy *self)
SSL_set_options(ssl->ssl, SSL_MODE_ENABLE_PARTIAL_WRITE);
+ z_stream_set_timeout(self->super.endpoints[EP_CLIENT], self-
handshake_timeout); + tmpstream = self- super.endpoints[EP_CLIENT]; self->super.endpoints[EP_CLIENT] = z_stream_ssl_new(tmpstream, ssl); z_stream_unref(tmpstream);
- z_stream_set_timeout(self->super.endpoints[EP_CLIENT], self-
session_data.timeout);
ret = SSL_accept(ssl->ssl); if (ret <= 0) @@ -339,6 +347,7 @@ pssl_init_client_ssl(PsslProxy *self) }
z_ssl_session_unref(ssl); + z_stream_set_timeout(self->super.endpoints[EP_CLIENT], -2); z_proxy_log(self, PSSL_DEBUG, 6, "Client side SSL handshake successful;"); z_proxy_leave(self); return TRUE; @@ -370,13 +379, 13 @@ pssl_init_server_ssl(PsslProxy *self) }
SSL_set_options(ssl->ssl, SSL_MODE_ENABLE_PARTIAL_WRITE); - + + z_stream_set_timeout(self->super.endpoints[EP_SERVER], self-
handshake_timeout); + tmpstream = self- super.endpoints[EP_SERVER]; self->super.endpoints[EP_SERVER] = z_stream_ssl_new(tmpstream, ssl); z_stream_unref(tmpstream);
session_data.timeout);
- z_stream_set_timeout(self->super.endpoints[EP_SERVER], self- - ret = SSL_connect(ssl->ssl); if (ret <= 0) { @@ -399,6 +408,7 @@ pssl_init_server_ssl(PsslProxy *self) }
z_ssl_session_unref(ssl); + z_stream_set_timeout(self->super.endpoints[EP_SERVER], -2); z_proxy_log(self, PSSL_DEBUG, 6, "Server side SSL handshake successful;"); z_proxy_leave(self); return TRUE;
Hi, Megpacheltem a pssl.c-t de ugyanúgy elszáll. Ha kiadom rá a strace-t akkor csak annyi jön rá: futex(0xd13eac, FUTEX_WAIT, 2, NULL A process nem csinál semmit.... Üdv Balázs On Wed, 11 Jan 2006 13:19:46 +0100, Balazs Scheidler wrote
On Tue, 2006-01-10 at 20:41 +0200, Balazs Czigany wrote:
Sziasztok!
Egy webszervert védenék http/https proxyval (az apache a zorp egy gépen van). A teszt üzemben minden jól működött, viszont, most, hogy ma élesbe ment a site a https proxy néha beadja az unalmast. Először lassulásokat tapasztalok, majd a https teljesen leáll. Ezekután csak force-stop-pal tudom csak leállítani a https proxy-t. Mi a fene lehet?
------------------------------------------------------------------- # zorpctl version Zorp 3.0.8 Revision: devel@balabit.hu--zorp-1/zorp-core--mainline--3.0--patch-362 Compile-Date: Dec 18 2005 19:39:15 Config-Date: 2005/12/18 Trace: off Debug: off IPOptions: off IPFilter-Tproxy: off Netfilter-Tproxy: on Netfilter-Linux22-Fallback: on Linux22-Tproxy: off Conntrack: on
Zorplib 3.0.6.4 Revision: devel@balabit.hu--zorp-1/zorp-lib--mainline--3.0--patch-109 Compile-Date: Dec 18 2005 19:37:19
Pro vagy GPL ? (jut eszembe, lehet, hogy a version kimenetbe ki kellene irni...)
Van egy ilyen javitas, ami a Pro-ban 3.0.8-cal jelent meg, viszont a GPL-ben egy teljesen masik Pssl proxy van, igy ellenoriznem kellene, hogy abban megvan-e.
* Fixed timeout processing during SSL handshake. * Added new handshake_timeout parameter to control the timeout used during SSL handshake.
Ugy nezem ott meg megvan ez a problema. Ellenorizni ugy tudod, hogy tenyleg errol van-e szo, hogy rainditasz egy strace-t egy SSL-es szalra, ami valoszinuleg read()-ben blokkol.
Egy ido utan betelik a --threads altal megadott limit, es ilyenkor a zorp var egy szal felszabadulasara, ami ha a szalak fixen, timeout nelkul blokkolnak sosem tortenik meg.
Atportoltam a kereskedelmiben levo javitast (bar szemelyesen nem tudtam kiprobalni), a lenyeg, hogy letrejott egy handshake_timeout attributum, default 30 masodperc, es ha az SSL handshake nem jon letre ennyi ido alatt barmelyik oldalon, akkor bontja a kapcsolatot.
--- orig/modules/pssl/pssl.c +++ mod/modules/pssl/pssl.c @@ -51,6 +51,7 @@ typedef struct _PsslProxy GString *server_ca_dir; GString *server_crl_dir; gboolean need_ssl[EP_MAX]; + gint handshake_timeout; int verify_type[EP_MAX]; int verify_depth[EP_MAX]; } PsslProxy; @@ -71,6 +72,7 @@ pssl_config_set_defaults(PsslProxy *self
z_proxy_enter(self);
+ self->handshake_timeout = 30000; self->session_data.timeout = -1; self->session_data.copy_to_server = TRUE; self->session_data.copy_to_client = TRUE; @@ -113,6 +115,11 @@ pssl_register_vars(PsslProxy *self) &self->session_data.timeout);
z_proxy_var_new(&self->super, + "handshake_timeout", + Z_VAR_GET | Z_VAR_SET_CONFIG | Z_VAR_TYPE_INT, + &self->handshake_timeout); + + z_proxy_var_new(&self->super, "copy_to_client", Z_VAR_GET | Z_VAR_SET_CONFIG | Z_VAR_TYPE_INT, &self->session_data.copy_to_client); @@ -311,11 +318,12 @@ pssl_init_client_ssl(PsslProxy *self)
SSL_set_options(ssl->ssl, SSL_MODE_ENABLE_PARTIAL_WRITE);
+ z_stream_set_timeout(self->super.endpoints[EP_CLIENT], self-
handshake_timeout); + tmpstream = self- super.endpoints[EP_CLIENT]; self->super.endpoints[EP_CLIENT] = z_stream_ssl_new(tmpstream, ssl); z_stream_unref(tmpstream);
- z_stream_set_timeout(self->super.endpoints[EP_CLIENT], self-
session_data.timeout);
ret = SSL_accept(ssl->ssl); if (ret <= 0) @@ -339,6 +347,7 @@ pssl_init_client_ssl(PsslProxy *self) }
z_ssl_session_unref(ssl); + z_stream_set_timeout(self->super.endpoints[EP_CLIENT], -2); z_proxy_log(self, PSSL_DEBUG, 6, "Client side SSL handshake successful;"); z_proxy_leave(self); return TRUE; @@ -370,13 +379, 13 @@ pssl_init_server_ssl(PsslProxy *self) }
SSL_set_options(ssl->ssl, SSL_MODE_ENABLE_PARTIAL_WRITE); - + + z_stream_set_timeout(self->super.endpoints[EP_SERVER], self-
handshake_timeout); + tmpstream = self- super.endpoints[EP_SERVER]; self->super.endpoints[EP_SERVER] = z_stream_ssl_new(tmpstream, ssl); z_stream_unref(tmpstream);
session_data.timeout);
- z_stream_set_timeout(self->super.endpoints[EP_SERVER], self- - ret = SSL_connect(ssl->ssl); if (ret <= 0) { @@ -399,6 +408,7 @@ pssl_init_server_ssl(PsslProxy *self) }
z_ssl_session_unref(ssl); + z_stream_set_timeout(self->super.endpoints[EP_SERVER], -2); z_proxy_log(self, PSSL_DEBUG, 6, "Server side SSL handshake successful;"); z_proxy_leave(self); return TRUE;
On Thu, 2006-01-12 at 15:18 +0200, Balazs Czigany wrote:
Hi,
Megpacheltem a pssl.c-t de ugyanúgy elszáll. Ha kiadom rá a strace-t akkor csak annyi jön rá: futex(0xd13eac, FUTEX_WAIT, 2, NULL
A process nem csinál semmit....
Akkor viszont egy picit tobb infora lesz szukseg. Mi van a logban, kellene a processz utolso 1 perces logja. Ezen kivul hasznos lenne egy lsof -p <pid>, illetve meg hasznosabb lenne egy gdb-vel attacholni a megallt peldanyra: gdb -p <pid> majd "info threads", majd minden thread sorszamnal "thread XX", ahol XX a thread azonositoja, illetve egy "bt" parancs. Ezek eredmenyet kuldd el legyszives. -- Bazsi
participants (2)
-
Balazs Czigany
-
Balazs Scheidler