The DNS, point the DNS record for crsplabweb2.example.com to the public IP of haproxy.
On Mon, Oct 29, 2018 at 2:36 PM Imam Toufique <[email protected]> wrote: > " Well you need to point crsplabweb2.example.com to the haproxy IP that's > the whole point of it running behind a proxy. Or am I missing something? " > > Well, I am not sure what you meant by that comment above. > > On Sun, Oct 28, 2018 at 8:07 PM Igor Cicimov < > [email protected]> wrote: > >> Well you need to point crsplabweb2.example.com to the haproxy IP that's >> the whole point of it running behind a proxy. Or am I missing something? >> >> On Mon, Oct 29, 2018 at 1:28 PM Imam Toufique <[email protected]> >> wrote: >> >>> Hi Igor, >>> >>> Thank you so much, I will definitely try your suggestions, but I am not >>> sure how it will help my situation. shibboleth SP looks for, let's >>> suppose, https://crsplabweb2.example.com/Shibboleth.sso - for it it's >>> single sign-on. for apache or nginx to talk to the SP, SP needs to run in >>> the same node ( as far as I know ). So, I am not sure how shibboleth will >>> be able to communicate with the HAP for its SSO calls. >>> >>> --imam >>> >>> >>> >>> On Sun, Oct 28, 2018 at 5:21 PM Igor Cicimov < >>> [email protected]> wrote: >>> >>>> Hi Imam, >>>> >>>> On Sat, Oct 27, 2018 at 4:42 PM Imam Toufique <[email protected]> >>>> wrote: >>>> >>>>> Hi Igor, >>>>> >>>>> Thanks very much for offering to help! I will do this in sections, >>>>> hopefully, I can keep this from being too cluttered. >>>>> >>>>> haproxy.cfg: >>>>> >>>>> -------------------------------------------------------------------------------------- >>>>> global >>>>> #log /dev/log local0 debug >>>>> #log /dev/log local1 debug >>>>> log 127.0.0.1 local2 >>>>> chroot /var/lib/haproxy >>>>> stats timeout 30s >>>>> user haproxy >>>>> group haproxy >>>>> tune.ssl.default-dh-param 2048 >>>>> daemon >>>>> >>>>> defaults >>>>> log global >>>>> mode http >>>>> option tcplog >>>>> option dontlognull >>>>> timeout connect 5000 >>>>> timeout client 50000 >>>>> timeout server 50000 >>>>> timeout tunnel 9h >>>>> option tcp-check >>>>> >>>>> frontend http_front >>>>> bind :80 >>>>> bind 0.0.0.0:443 ssl crt /etc/haproxy/crsplab2_1.pem >>>>> stats uri /haproxy?stats >>>>> default_backend web1_cluster >>>>> option httplog >>>>> log global >>>>> #option dontlognull >>>>> log /dev/log local0 debug >>>>> mode http >>>>> option forwardfor # forward IP >>>>> http-request set-header X-Forwarded-Port %[dst_port] >>>>> http-request add-header X-Forwarded-Proto https if { ssl_fc } >>>>> redirect scheme https if !{ ssl_fc } >>>>> >>>>> acl host_web2 hdr(host) -i crsplab2.oit.uci.edu/webdav >>>>> use_backend webdav_cluster if host_web2 >>>>> >>>>> acl host_web3 path_beg /jhub >>>>> use_backend web3_cluster if host_web3 >>>>> >>>>> >>>>> backend webdav_cluster >>>>> balance roundrobin >>>>> server web1 10.1.100.156:8080 check inter 2000 cookie w1 >>>>> server web2 10.1.100.160:8080 check inter 2000 cookie w2 >>>>> >>>>> backend web3_cluster >>>>> server publicIP:443 check ssl verify none inter 2000 cookie w1 >>>>> >>>>> ----------------------------------------------------------------------------------------------------- >>>>> Note: I have a single backend node, as it was easy to test with just >>>>> one node, instead of making changes to 2 nodes at a time. >>>>> >>>>> Here is my apache config: >>>>> >>>>> in httpd.conf, only change I have made is ( the rest is a stock centos >>>>> 7.5 httpd.conf ): >>>>> ------------------------------------- >>>>> ServerName 10.1.100.160:80 ( Internal IP of the backend node) >>>>> Redirect permanent /jhub https://crsplabweb1.domain.com/jhub >>>>> ------------------------------------- >>>>> >>>>> in my ssl.conf, where I access the jupyterhub instance running in >>>>> 127.0.0.1:8000 . Also, note that the backend is running shibboleth >>>>> SP. One of the issues I encountered is, If I did not have SSL , i was >>>>> getting a browser warning for not having SSL. >>>>> >>>>> Here is my ssl.conf: >>>>> >>>>> >>>>> -------------------------------------------------------------------------- >>>>> Listen 443 https >>>>> SSLPassPhraseDialog exec:/usr/libexec/httpd-ssl-pass-dialog >>>>> SSLSessionCache shmcb:/run/httpd/sslcache(512000) >>>>> SSLSessionCacheTimeout 300 >>>>> SSLRandomSeed startup file:/dev/urandom 256 >>>>> SSLRandomSeed connect builtin >>>>> SSLCryptoDevice builtin >>>>> >>>>> <VirtualHost _default_:443> >>>>> >>>>> UseCanonicalName on >>>>> ServerName crsplabweb1.domain.com:443 >>>>> >>>>> ErrorLog logs/ssl_error_log >>>>> TransferLog logs/ssl_access_log >>>>> LogLevel warn >>>>> >>>>> SSLEngine on >>>>> >>>>> SSLProtocol all -SSLv2 -SSLv3 >>>>> SSLCipherSuite HIGH:3DES:!aNULL:!MD5:!SEED:!IDEA >>>>> SSLCertificateFile /etc/pki/tls/certs/crsplabweb1.domain.com_cert.cer >>>>> SSLCertificateKeyFile /etc/pki/tls/certs/crsplabweb2.key >>>>> SSLCertificateChainFile >>>>> /etc/pki/tls/certs/crsplabweb1.domain.com_interm_reverse.c >>>>> >>>>> <Files ~ "\.(cgi|shtml|phtml|php3?)$"> >>>>> SSLOptions +StdEnvVars >>>>> </Files> >>>>> <Directory "/var/www/cgi-bin"> >>>>> SSLOptions +StdEnvVars >>>>> </Directory> >>>>> >>>>> <Location /jhub> >>>>> ProxyPass http://127.0.0.1:8000/jhub >>>>> ProxyPassReverse http://127.0.0.1:8000/jhub >>>>> RequestHeader unset Accept-Encoding >>>>> ProxyPreserveHost on >>>>> AuthType shibboleth >>>>> ShibRequestSetting requireSession 1 >>>>> Require shibboleth >>>>> ShibUseHeaders On >>>>> ShibBasicHijack On >>>>> RewriteEngine On >>>>> RequestHeader set X-Remote-User %{REMOTE_USER}s >>>>> </Location> >>>>> >>>>> <LocationMatch >>>>> "/jhub/(user/[^/]*)/(api/kernels/[^/]+/channels/websocket)(.*)"> >>>>> ProxyPassMatch ws://127.0.0.1:8000/jhub/$1/$2$3 >>>>> ProxyPassReverse ws://127.0.0.1:8000/jhub/$1/$2$3 >>>>> </LocationMatch> >>>>> >>>>> BrowserMatch "MSIE [2-5]" \ >>>>> nokeepalive ssl-unclean-shutdown \ >>>>> downgrade-1.0 force-response-1.0 >>>>> >>>>> CustomLog logs/ssl_request_log \ >>>>> "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b" >>>>> </VirtualHost> >>>>> >>>>> ---------------------------------------------------------------------------------- >>>>> >>>>> Thanks >>>>> >>>> >>>> Your problem is that you are not using the Forwarded headers set by HAP >>>> in Apache thus you get http response instead ssl. >>>> >>>> First for haproxy create a directory where you will keep all your SSL >>>> certs, lets say /etc/haproxy/ssl.d/, and put the crsplab2.oit.uci.edu >>>> and crsplabweb1.domain.com certificates inside. More details on >>>> setting SSL certificates in Haproxy can be found here: >>>> https://cbonte.github.io/haproxy-dconv/1.7/configuration.html#5.1-crt >>>> >>>> The config will then look something like this: >>>> >>>> frontend http_front >>>> bind *:80 >>>> bind *:443 ssl crt /etc/haproxy/ssl.d/ no-sslv3 no-tls-tickets ... >>>> >>>> backend web3_cluster >>>> server shibboleth1 10.1.100.160:80 check inter 2000 >>>> >>>> On the apache side remove the ssl settings (since now HAP will be >>>> terminating SSL) and set a SSL redirect, something like this: >>>> >>>> <VirtualHost *:80> >>>> ServerName crsplabweb1.domain.com >>>> ServerAlias www.crsplabweb1.domain.com >>>> >>>> SetEnvIfNoCase X-Forwarded-Proto https HTTPS=on >>>> # Insure the pages requested over ssl are always over ssl >>>> RewriteEngine On >>>> RewriteCond %{HTTP_X_Forwarded_Proto} ^https$ >>>> RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R,L] >>>> ... >>>> </VirtualHost> >>>> Let me know if any further questions. >>>> >>>> >>>>> On Fri, Oct 26, 2018 at 8:34 PM Igor Cicimov < >>>>> [email protected]> wrote: >>>>> >>>>>> Hi Imam, >>>>>> >>>>>> On Sat, Oct 27, 2018 at 9:37 AM Imam Toufique <[email protected]> >>>>>> wrote: >>>>>> >>>>>>> Hi, >>>>>>> >>>>>>> I came up with the following config, things seem to be working now, >>>>>>> for the most part. >>>>>>> >>>>>>> frontend http_front >>>>>>> bind :80 >>>>>>> bind 0.0.0.0:443 ssl crt /etc/haproxy/crsplab2_1.pem >>>>>>> stats uri /haproxy?stats >>>>>>> default_backend web1_cluster >>>>>>> option httplog >>>>>>> log global >>>>>>> #option dontlognull >>>>>>> log /dev/log local0 debug >>>>>>> mode http >>>>>>> option forwardfor # forward IP >>>>>>> http-request set-header X-Forwarded-Port %[dst_port] >>>>>>> http-request add-header X-Forwarded-Proto https if { ssl_fc } >>>>>>> redirect scheme https if !{ ssl_fc } >>>>>>> acl host_web3 path_beg /jhub >>>>>>> use_backend web3_cluster if host_web3 >>>>>>> >>>>>>> web3_cluster >>>>>>> >>>>>>> backend web3_cluster >>>>>>> mode http >>>>>>> balance source >>>>>>> server crsplabweb1.domain.com publicIP:443 check ssl verify none >>>>>>> inter 2000 cookie w1 >>>>>>> >>>>>>> The above config gets me to the backend node -- where I have a >>>>>>> jupyterhub instance running + . Shibboleth SP running for >>>>>>> authentication. >>>>>>> As I could not get shibboleth SP to work by staying in my private >>>>>>> network, >>>>>>> I had to set up a public IP for the backend node, get SSL certs - so >>>>>>> shibboleth authentication could be done. I am sure there is a better >>>>>>> approach to this, but I don't know what it is. I will be trying out >>>>>>> SNAT >>>>>>> to see if that will allow me to keep using my private IP for the backend >>>>>>> nodes. If any of you know how to do SNAT, please chime in, it would be >>>>>>> worth the time/effort to try it out. >>>>>>> >>>>>>> Now, the interesting thing I have noticed with the above setup -- >>>>>>> when I connect to HAProxy, let's say with https://proxy.domain.com >>>>>>> , I authenticate with shibboleth, and then the URL in the browser >>>>>>> points to >>>>>>> the backend node. >>>>>>> >>>>>>> For example: >>>>>>> >>>>>>> my proxy address: https://proxy.domain.com/jhub >>>>>>> >>>>>>> after I connect to the backend, the URL turns into - >>>>>>> https://crsplabweb1.domain.com/jhub/tree? >>>>>>> >>>>>>> ...and everything works thereafter. >>>>>>> >>>>>>> I tried the rewrite method that Igor has suggested before, that did >>>>>>> not make any difference. But what I noticed is, after I connect, no >>>>>>> traffic go through the proxy anymore, my client ( i.e. laptop) connects >>>>>>> directly to the backend server. Not sure if this good or bad though (?) >>>>>>> , >>>>>>> but, I am not sure how to configure this so that I will go through a >>>>>>> proxy but still be connected in the backend via a private IP and I can ( >>>>>>> still ) authenticate via shibboleth. >>>>>>> >>>>>>> So, when I change the 'web3_cluster' backend to : >>>>>>> >>>>>>> server crsplabweb1 privateIP:80 inter 2000 cookie w1 >>>>>>> >>>>>>> and, I set backend apache to accept connection on port 80, then I >>>>>>> break shibboleth authentication. >>>>>>> >>>>>>> Any inputs here? >>>>>>> >>>>>>> thanks, guys! >>>>>>> >>>>>>> >>>>>> I think it is time for you to provide the full HAP and Apache configs >>>>>> so we can see what is going on (please obfuscate any sensitive data). >>>>>> Also >>>>>> the use of the "cookie w1" is not clear since you are not setting it >>>>>> in HAP and is kinda redundant for single backend setup. >>>>>> >>>>>> >>>>>>> >>>>>>> On Thu, Oct 25, 2018 at 1:21 AM Igor Cicimov < >>>>>>> [email protected]> wrote: >>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> On Thu, Oct 25, 2018 at 6:31 PM Igor Cicimov < >>>>>>>> [email protected]> wrote: >>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> On Thu, 25 Oct 2018 6:13 pm Imam Toufique <[email protected]> >>>>>>>>> wrote: >>>>>>>>> >>>>>>>>>> so I almost got this to work, based on the situation I am in. To >>>>>>>>>> elaborate just a bit, my setup involves a shibboleth SP that I need >>>>>>>>>> to >>>>>>>>>> authenticate my application. Since I can't set up the HA proxy node >>>>>>>>>> with >>>>>>>>>> shibboleth SP - I had to wrap my application in the backend with >>>>>>>>>> apache so >>>>>>>>>> I can pass REMOTE_USER to the application. the application I have >>>>>>>>>> is - >>>>>>>>>> jupyterhub and it start with its own proxy. Long story short, here >>>>>>>>>> is my >>>>>>>>>> current setup: >>>>>>>>>> >>>>>>>>>> frontend >>>>>>>>>> bind :80 >>>>>>>>>> bind :443 ssl crt /etc/haproxy/crsplab2_1.pem >>>>>>>>>> stats uri /haproxy?stats >>>>>>>>>> default_backend web1_cluster >>>>>>>>>> option httplog >>>>>>>>>> log global >>>>>>>>>> #option dontlognull >>>>>>>>>> log /dev/log local0 debug >>>>>>>>>> mode http >>>>>>>>>> option forwardfor # forward IP >>>>>>>>>> http-request set-header X-Forwarded-Port %[dst_port] >>>>>>>>>> http-request add-header X-Forwarded-Proto https if { ssl_fc } >>>>>>>>>> redirect scheme https if !{ ssl_fc } >>>>>>>>>> >>>>>>>>>> acl host_web3 path_beg /jhub >>>>>>>>>> use_backend web3_cluster if host_web3 >>>>>>>>>> >>>>>>>>>> backend >>>>>>>>>> server web1.oit.uci.edu 128.110.80.5:80 check >>>>>>>>>> >>>>>>>>>> this works for the most part. But I am confused with a problem. >>>>>>>>>> when I get to my application, my backend IP address shows up in the >>>>>>>>>> browser >>>>>>>>>> URL. >>>>>>>>>> >>>>>>>>>> for example, I see this in my browser: >>>>>>>>>> >>>>>>>>>> http://128.110.80.5/jhub/user/itoufiqu/tree? >>>>>>>>>> >>>>>>>>>> whereas, I was expecting that it would show the original URL, >>>>>>>>>> such as: >>>>>>>>>> >>>>>>>>>> http://crsplab2.domain.com/jhub/user/itoufiqu/tree? ( where >>>>>>>>>> crsplab2.domain.com is the URL to get HAproxy ) >>>>>>>>>> >>>>>>>>> >>>>>>>>> You need to tell your backend app that it runs behind reverse >>>>>>>>> proxy with ssl termination and that it's domain/url is >>>>>>>>> https://crsplab2.domain.com >>>>>>>>> <http://crsplab2.domain.com/jhub/user/itoufiqu/tree>. How you do >>>>>>>>> that depends on the backend app you are using but most of them like >>>>>>>>> apache2, tomcat etc. have specific configs that you can find in their >>>>>>>>> documentation. For example if your backend is apache2 I bet you don't >>>>>>>>> have >>>>>>>>> the DomainName set in the config in which case it defaults to the >>>>>>>>> host ip >>>>>>>>> address. >>>>>>>>> >>>>>>>> >>>>>>>> You can also try: >>>>>>>> >>>>>>>> rspirep ^Location:\ http://(.*):80(.*) Location:\ https:// >>>>>>>> crsplab2.domain.com >>>>>>>> <http://crsplab2.domain.com/jhub/user/itoufiqu/tree>:443\2 if { >>>>>>>> ssl_fc } >>>>>>>> >>>>>>>> to fix the URL but note that this will not save you from hard coded >>>>>>>> url's in the returned html pages the way apache does. >>>>>>>> >>>>>>>> >>>>>>>>> >>>>>>>>>> While I am no expert in HA proxy world, I think this might due to >>>>>>>>>> the fact that my backend does not have SSL and HAproxy frontend does >>>>>>>>>> have >>>>>>>>>> SSL. At this point, I would avoid that IP address showing up in the >>>>>>>>>> browser. what is the best way to accomplish this? >>>>>>>>>> >>>>>>>>>> thanks for your continues help! >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> On Tue, Oct 23, 2018 at 8:35 AM Aleksandar Lazic < >>>>>>>>>> [email protected]> wrote: >>>>>>>>>> >>>>>>>>>>> Hi. >>>>>>>>>>> >>>>>>>>>>> Am 23.10.2018 um 09:04 schrieb Imam Toufique: >>>>>>>>>>> > I am looking for some help on how to write the following >>>>>>>>>>> apache proxypass rules >>>>>>>>>>> > in HAproxy. Not to mention I am at a bit of loss with my >>>>>>>>>>> first try :-) . Here >>>>>>>>>>> > are my current proxypass rules: >>>>>>>>>>> > >>>>>>>>>>> > ProxyPass http://10.1.100.156:8000/jhub >>>>>>>>>>> > ProxyPassReverse http://10.1.100.156:8000/jhub >>>>>>>>>>> >>>>>>>>>>> Well ProxyPass and ProxyPassReverse do a lot of thinks not just >>>>>>>>>>> rewrites, as >>>>>>>>>>> mentioned in the doc >>>>>>>>>>> >>>>>>>>>>> https://httpd.apache.org/docs/2.4/mod/mod_proxy.html#proxypass >>>>>>>>>>> >>>>>>>>>>> https://httpd.apache.org/docs/2.4/mod/mod_proxy.html#proxypassreverse >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> > <LocationMatch >>>>>>>>>>> "/jhub/(user/[^/]*)/(api/kernels/[^/]+/channels/websocket)(.*)"> >>>>>>>>>>> > ProxyPassMatch ws://10.1.100.156:8000/jhub/$1/$2$3 >>>>>>>>>>> > ProxyPassReverse ws://10.1.100.156:8000/jhub/$1/$2$3 >>>>>>>>>>> > </LocationMatch> >>>>>>>>>>> > >>>>>>>>>>> > As I am not well versed in the massive HAproxy configuration >>>>>>>>>>> guide, if any of >>>>>>>>>>> > you can give me a hand with this, I would very much appreciate >>>>>>>>>>> it. >>>>>>>>>>> >>>>>>>>>>> I'm also not "that" expert but I would try the following, >>>>>>>>>>> untested. >>>>>>>>>>> >>>>>>>>>>> ### >>>>>>>>>>> defaults >>>>>>>>>>> mode http >>>>>>>>>>> log global >>>>>>>>>>> >>>>>>>>>>> #... maybe some other settings >>>>>>>>>>> timeout tunnel 10h >>>>>>>>>>> >>>>>>>>>>> frontend https_001 >>>>>>>>>>> >>>>>>>>>>> #... maybe some other settings >>>>>>>>>>> >>>>>>>>>>> acl websocket path_beg /jhub >>>>>>>>>>> >>>>>>>>>>> #... maybe some other acls >>>>>>>>>>> >>>>>>>>>>> use_backend websocket_001 if websocket >>>>>>>>>>> >>>>>>>>>>> backend websocket_001 >>>>>>>>>>> >>>>>>>>>>> reqrep "^([^\ :]*) >>>>>>>>>>> /jhub/(user/[^/]*)/(api/kernels/[^/]+/channels/websocket)(.*)" >>>>>>>>>>> "/jhub/\1/\2\3" >>>>>>>>>>> >>>>>>>>>>> # You will need to replace the first column with the response >>>>>>>>>>> from the >>>>>>>>>>> # backend response >>>>>>>>>>> # rspirep "^Location: >>>>>>>>>>> /jhub/(user/[^/]*)/(api/kernels/[^/]+/channels/websocket)(.*)" >>>>>>>>>>> "Location: >>>>>>>>>>> /jhub/\1/\2\3" >>>>>>>>>>> # OR >>>>>>>>>>> # http-response replace-header Location >>>>>>>>>>> "/jhub/(user/[^/]*)/(api/kernels/[^/]+/channels/websocket)(.*)" >>>>>>>>>>> "/jhub/\1/\2\3" >>>>>>>>>>> >>>>>>>>>>> # add some checks >>>>>>>>>>> >>>>>>>>>>> server ws_01 10.1.100.156:8000 check >>>>>>>>>>> ### >>>>>>>>>>> >>>>>>>>>>> Here are some links which may help you also. >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> https://www.haproxy.com/blog/websockets-load-balancing-with-haproxy/ >>>>>>>>>>> >>>>>>>>>>> https://cbonte.github.io/haproxy-dconv/1.8/configuration.html#4-reqirep >>>>>>>>>>> >>>>>>>>>>> https://cbonte.github.io/haproxy-dconv/1.8/configuration.html#4-rspirep >>>>>>>>>>> >>>>>>>>>>> I would run haproxy in Debug mode and see how the request pass >>>>>>>>>>> haproxy and adopt >>>>>>>>>>> the config. >>>>>>>>>>> >>>>>>>>>>> It would be nice when you show us the working conf ;-) >>>>>>>>>>> >>>>>>>>>>> It would be nice to have a >>>>>>>>>>> >>>>>>>>>>> http-request replace-uri <match-regex> <replace-fmt> >>>>>>>>>>> >>>>>>>>>>> to replace the reqrep. >>>>>>>>>>> >>>>>>>>>>> > thanks >>>>>>>>>>> >>>>>>>>>>> Hth >>>>>>>>>>> Aleks >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>> >>>>>>>>>> -- >>>>>>>>>> Regards, >>>>>>>>>> *Imam Toufique* >>>>>>>>>> *213-700-5485* >>>>>>>>>> >>>>>>>>> >>>>>>>> >>>>>>>> -- >>>>>>>> Igor Cicimov | DevOps >>>>>>>> >>>>>>>> >>>>>>>> p. +61 (0) 433 078 728 >>>>>>>> e. [email protected] >>>>>>>> <http://encompasscorporation.com/> >>>>>>>> w*.* www.encompasscorporation.com >>>>>>>> a. Level 4, 65 York Street, Sydney 2000 >>>>>>>> >>>>>>> >>>>>>> >>>>>>> -- >>>>>>> Regards, >>>>>>> *Imam Toufique* >>>>>>> *213-700-5485* >>>>>>> >>>>>> >>>>>> >>>>>> -- >>>>>> Igor Cicimov | DevOps >>>>>> >>>>>> >>>>>> p. +61 (0) 433 078 728 >>>>>> e. [email protected] <http://encompasscorporation.com/> >>>>>> w*.* www.encompasscorporation.com >>>>>> a. Level 4, 65 York Street, Sydney 2000 >>>>>> >>>>> >>>>> >>>>> -- >>>>> Regards, >>>>> *Imam Toufique* >>>>> *213-700-5485* >>>>> >>>> >>>> >>>> -- >>>> Igor Cicimov | DevOps >>>> >>>> >>>> p. +61 (0) 433 078 728 >>>> e. [email protected] <http://encompasscorporation.com/> >>>> w*.* www.encompasscorporation.com >>>> a. Level 4, 65 York Street, Sydney 2000 >>>> >>> >>> >>> -- >>> Regards, >>> *Imam Toufique* >>> *213-700-5485* >>> >> >> >> -- >> Igor Cicimov | DevOps >> >> >> p. +61 (0) 433 078 728 >> e. [email protected] <http://encompasscorporation.com/> >> w*.* www.encompasscorporation.com >> a. Level 4, 65 York Street, Sydney 2000 >> > > > -- > Regards, > *Imam Toufique* > *213-700-5485* > -- Igor Cicimov | DevOps p. +61 (0) 433 078 728 e. [email protected] <http://encompasscorporation.com/> w*.* www.encompasscorporation.com a. Level 4, 65 York Street, Sydney 2000

