Article delegate <_A12985@delegate.ML_>
  upper oldest olders older1 this newer1 newers latest
search
[Top/Up] [oldest] - [Older+chunk] - [Newer+chunk] - [newest + Check]
[delegate/12985] [Reference:<_A12981@delegate.ML_>]
Newsgroups: mail-lists.delegate

[DeleGate] fix for "non-half-dup CONNECT" (Re: Delegate9.0.3pre14Win32Httpにて)
22 Jun 2005 06:43:08 GMT ysato@delegate.org (Yutaka Sato)
The DeleGate Project


On 06/22/05(13:40) you ysato@delegate (Yutaka Sato) wrote
in <_A12981@delegate.ML_>
 |その後送って頂いたログも含めて、全てのログに、
 |「E-P: No permission: ... non-half-dup CONNECT」
 |というメッセージが出ています。

自家用(個人用)のプロキシのログを見てみたら、これが出てました。

再現性は非常に低く、1000回に一度程度(月に1,2度)で、アクセス先も普段
アクセスしているありふれたHTTPSサーバだったのですが、
最近、件のサーバにテストのためにアクセスした時に数回続けて出てました。
今再試してみたら、数回に1度の頻度で再現します。

で、通信の内容を見てみると、SSLのサーバからの応答と同時に、SSLのクライ
アントからデータ届いており、その中身を見てみると SSL の Alert レコード
でした。暗号化されているので何の Alert かはわからないのですが、
ともかく、これはSSLとして正当な通信ですので通過させるようにします。

というわけで、同封のパッチのように修正します。(9.0.3-pre20とします)


 |これが出ているということは、HTTPS/SSL をDeleGate が途中で強制切断している
 |ことを意味しています。それがブラウザにおけるフリーズにつながる可能性も
 |考えられます。
 |
 |また、これが繰り返し出ている場合には DeleGate は、不許可アクセスに対して
 |ペナルティを科すために、応答の遅延を行っていることが考えられ、それが
 |ブラウザにおける「反応がない」状態になある可能性が考えられます。
 |
 |というわけですので、まずはこの
 |
 |  REMITTABLE=+,ssltunnel
 |
 |というのをつけた状態で試してみて下さい。

としている場合には、この問題は起こりませんが、HTTPS/SSL 以外の目的外
使用を監視するためには、これは望ましくありません。

                   D G  
┌─┐┬┌──┬┐ //\^^ ( - ); {Do the more with the less -- B. Fuller}
├─┤│└─┐│ / 877m\_<   >_ <URL:http://www.delegate.org/delegate/>
┴ └┴──┘┴──────────────────────────────
佐藤豊@情報技術研究部門.産業技術総合研究所(独立行政法人)


diff -cr delegate9.0.3-pre19/rary/nbio.c delegate9.0.3-pre20/rary/nbio.c
*** delegate9.0.3-pre19/rary/nbio.c	Sun Jun 19 17:54:21 2005
--- delegate9.0.3-pre20/rary/nbio.c	Wed Jun 22 15:23:26 2005
***************
*** 340,345 ****
--- 340,374 ----
  	fprintf(stderr,"------- got SIGURG\n");
  }
  
+ static int toBeBroken(int fdc,int fdv[]){
+ 	unsigned char b[4];
+ 	int rcc;
+ 	int fi;
+ 	int fd;
+ 
+ 	if( !IsAlive(fdv[0]) )
+ 		return 0;
+ 	if( !IsAlive(fdv[1]) )
+ 		return 0;
+ 	for( fi = 0; fi < 2; fi++ ){
+ 		fd = fdv[fi];
+ 		rcc = recv(fd,b,1,MSG_PEEK);
+ 		syslog_ERROR(
+ 		"## EXIT relaysx: not half_duplex ? [%d] %d[%X]\n",fd,rcc,b[0]);
+ 
+ 		if( b[0] == 0x15 ){ /* SSL_RT_ALERT */
+ 			syslog_ERROR(
+ 			"## relaysx: thru SSL ALERT [%d] %d[%X]\n",fd,rcc,b[0]);
+ 			return 0;
+ 		}
+ 		rcc = recv(fd,b,4,MSG_PEEK);
+ 		syslog_ERROR(
+ 		"## EXIT relaysx: not half_duplex ? [%d] %d[%X][%X][%X][%X]\n",
+ 			fd,rcc,b[0],b[1],b[2],b[3]);
+ 	}
+ 	return 1;
+ }
+ 
  void relaysx(int timeout,int sdc,int sdv[][2],int sdx[],int rccs[],IFUNCP funcv[],void *argv[])
  {	int fi;
  	int pc,pi,pfv[32],pxv[32];
***************
*** 476,482 ****
--- 505,514 ----
  		}
  		if( nready == pc ){
  			syslog_ERROR("## relaysx: seems not half_duplex\n");
+ 			/*
  			if( 2 <= pc && IsAlive(pfv[0]) && IsAlive(pfv[1]) ){
+ 			*/
+ 			if( 2 <= pc && toBeBroken(pc,pfv) ){
  			syslog_ERROR("## EXIT relaysx: not half_duplex\n");
  			RELAY_stat = RELAY_NOTHALFDUP;
  			goto EXIT;

  admin search upper oldest olders older1 this newer1 newers latest
[Top/Up] [oldest] - [Older+chunk] - [Newer+chunk] - [newest + Check]
@_@V