[zorp-hu] 3.9 https side stack chainer
Csányi Krisztián
chris at eotvos19.hu
2011. Jún. 21., K, 23:10:08 CEST
Szia!
Nem volt hiba a lenti megoldásban.
Működik.
Köszönöm.
Üdvözlettel: Csányi Krisztián
On Tue, 21 Jun 2011 10:02:41 +0200, KOVACS Krisztian wrote:
> Sziasztok,
>
> On 06/20/2011 04:28 PM, Csányi Krisztián wrote:
>>>>> Egy Zorp 3.3-mon működő megoldást szeretnék 3.9-re átültetni.
>>>>> Röviden így néz ki:
>>>>>
>>>>> Service('outside_HTTPS_wildcard.xyz.hu', HttpsPublicWildcardXyz,
>>>>> chainer=SideStackChainer(right_class=HttpPublicDirector,
>>>>> right_chainer=ConnectChainer(protocol=ZD_PROTO_AUTO)),
>>>>> router=TransparentRouter(forge_addr=TRUE))
>>>>> Dispatcher(DBSockAddr(SockAddrInet('__IP_OUTSIDE', 50443,
>>>>> ZD_PROTO_TCP), 'outside_HTTPS_wildcard.xyz.hu',
>>>>> transparent=TRUE)
>>>>>
>>>>> A HttpsPublicWildcardXyz egy sima PsslProxy aminek van egy
>>>>> self.client_cert_file és client_key_file megadva. (wildcardos)
>>>>>
>>>>> A HttpPublicDirector pedig egy sima HttpProxy, ahol
>>>>> self.request_url_host alapján döntünk, hogy melyik szervernek
>>>>> dobódjon
>>>>> át a forgalom.
>>>>>
>>>>>
>>>>> A kérdésem, hogy mi a fentieknek az elegáns megoldása 3.9 alatt?
>>>>> (Tekintettel arra, hogy már minden proxy támogat SSL-t)
>>>>> A fenti megoldás már nem működik 3.9-en.
>
> 3.9-en elvileg nincs szukseged a kulon PsslProxy-ra (ami amugy 3.9-en
> tulajdonkeppen egy PlugProxy). Regebben az okozta a problemat, hogy a
> PsslProxy a proxy indulasakor mindenkeppen kapcsolodik a szerver
> oldalhoz, viszont Te pont a HTTPS-en belul erkezo request-bol
> szeretned
> eldonteni, hogy hova kapcsolodjon.
>
> Mivel most mar a HttpProxy is tud SSL-t, igy nincs szukseg a
> SideStackChainer-re.
>
> Valami ilyesmi nem mukodne? (Nem probaltam ki, szoval biztosan van
> benne
> valami, amit javitani kell.)
>
> class HttpsPublicDirector(HttpPublicDirector):
> def config(self):
> HttpPublicDirector.config(self)
> self.ssl.client_connection_security = SSL_FORCE_SSL
> self.ssl.server_connection_security = SSL_NONE
> self.ssl.client_keypair_files =
> ("/etc/zorp/certs/wildcard.xyz.hu-cert.pem",
> "/etc/zorp/certs/wildcard.xyz.hu-key.pem")
> self.ssl.client_verify_type = SSL_VERIFY_OPTIONAL_TRUSTED
>
>>>>
>>>> be tudnad dobni a proxy class-t is?
>>> Persze:
>>>
>>> ###########################
>>> class PublicHttpProxyBase(HttpProxy):
>>> def config(self):
>>> HttpProxy.config(self)
>>> self.request['GET'] = (HTTP_REQ_POLICY,
>>> self.filterURL)
>>> self.request['POST'] = (HTTP_REQ_POLICY,
>>> self.filterURL)
>>> self.request['HEAD'] = (HTTP_REQ_POLICY,
>>> self.filterURL)
>>>
>>> self.response['*', '401'] = (HTTP_RSP_ACCEPT)
>>> self.response['*', '4'] = (HTTP_RSP_POLICY,
>>> self.filterError)
>>> self.response['*', '5'] = (HTTP_RSP_POLICY,
>>> self.filterError)
>>>
>>> self.response_headers['Server'] = (HTTP_HDR_DROP)
>>> self.response_headers['X-Powered-By'] =
>>> (HTTP_HDR_DROP)
>>> self.response_headers['X-AspNet-Version'] =
>>> (HTTP_HDR_DROP)
>>>
>>> self.error_silent = TRUE
>>>
>>> self.transparent_mode = TRUE
>>> self.permit_proxy_requests = FALSE
>>>
>>> def filterURL(self, method, url, version):
>>> log('http.info', 3, "%s: %s" % (method, url))
>>> return HTTP_REQ_ACCEPT
>>>
>>> def filterError(self, method, url, version, response):
>>> self.error_status = 404
>>> self.error_msg = 'not found'
>>> return HTTP_RSP_DENY
>>>
>>> ###########################
>>> class HttpPublicDirector(PublicHttpProxyBase):
>>> def config(self):
>>> PublicHttpProxyBase.config(self)
>>>
>>> def filterURL(self, method, url, version):
>>> if self.request_url_host == 'a.xyz.hu':
>>>
>>> self.session.setServer(SockAddrInet('192.168.168.100', 80))
>>> elif self.request_url_host == 'b.xyz.hu':
>>>
>>> self.session.setServer(SockAddrInet('192.168.168.25', 80))
>>> elif self.request_url_host == 'c.xyz.hu':
>>>
>>> self.session.setServer(SockAddrInet('192.168.169.10', 80))
>>> elif self.request_url_host ==
>>> '192.168.169.10':
>>>
>>> self.session.setServer(SockAddrInet('192.168.169.10', 80))
>>> else:
>>> log('http.info', 3, "Public http
>>> access
>>> denied: %s: %s" % (method, url))
>>> return HTTP_REQ_ABORT
>>>
>>> log('http.info', 3, "%s: %s" % (method,
>>> url))
>>> return HTTP_REQ_ACCEPT
>>>
>>> def __destroy__(self):
>>> log(self.session.session_id, CORE_DEBUG,
>>> 3,
>>> "Accounting data: client_address='%s', server_address='%s',
>>> client_stream_recvd='%s', client_stream_sent='%s'",
>>> (self.session.client_address, self.session.server_address,
>>>
>>>
>>>
>>> self.session.client_stream.bytes_recvd,self.session.client_stream.bytes_sent))
>>> PublicHttpProxyBase.__destroy__(self)
>>>
>>> ###########################
>>> class HttpsPublicWildcardXyz(PsslProxy):
>>> def config(self):
>>> PsslProxy.config(self)
>>>
>>> self.client_cert_file =
>>> "/etc/zorp/certs/wildcard.xyz.hu-cert.pem"
>>> self.client_key_file =
>>> "/etc/zorp/certs/wildcard.xyz.hu-key.pem"
>>> _______________________________________________
>>> zorp-hu mailing list
>>> zorp-hu at lists.balabit.hu
>>> https://lists.balabit.hu/mailman/listinfo/zorp-hu
>>
>> Még csak annyi, hogy amikor 3.9-en próbálkoztam a fentiekkel, akkor
>> az
>> alábbi logot kaptam:
>>
>> Jun 16 16:59:00 svc0 zorp/iPublic[3148]: core.session(3):
>> (svc/outside_HTTPS_wildcard.xyz.hu:27): Starting proxy instance;
>> client_fd='15', client_address='AF_INET(84.206.45.43:56118)',
>> client_zone='Zone(outside, 0.0.0.0/0)',
>> client_local='AF_INET(192.168.169.10:443)', client_protocol='TCP'
>> Jun 16 16:59:00 svc0 zorp/iPublic[3148]: core.error(1):
>> (svc/outside_HTTPS_wildcard.xyz.hu:27/plug): SSL handshake failed;
>> side='client', error='error:140890C7:SSL
>> routines:lib(20):SSL3_GET_CLIENT_CERTIFICATE:func(137):peer did not
>> return a certificate:reason(199), supressed 1 messages'
>> Jun 16 16:59:00 svc0 zorp/iPublic[3148]: core.session(4):
>> (svc/outside_HTTPS_wildcard.xyz.hu:27): Ending proxy instance;
>
> Ezek alapjan ugy tunik, hogy a Zorp mindenkeppen kliens certificatet
> var, es nem kap. Probaltad mar ezt kikapcsolni?
További információk a(z) zorp-hu levelezőlistáról