Netgate Discussion Forum
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Search
    • Register
    • Login

    Varnish 3 can't get it to work without NAT

    Scheduled Pinned Locked Moved pfSense Packages
    12 Posts 2 Posters 2.7k Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • J Offline
      jmack
      last edited by

      Mmm, new situation will have 2 sites to be proxied:
      Site A - public www - 80
      Site B - extranet - 80  (filtered on IP-ranges)

      When all traffic goes to WAN 80, where to split the filtering on source_ip?
      I guess this should be done then on proxy-level somehow? Is this possible with HAproxy?

      1 Reply Last reply Reply Quote 0
      • P Offline
        PiBa
        last edited by

        haproxy itself can accept/block traffic from a list of network subnets..
        configuration would be something like this:

        tcp-request connection accept if { src -f /etc/haproxy/whitelist.lst }
        

        or

        acl goodguys src 10.0.0.0/24
        acl badguys  src 10.0.1.0/24
        tcp-request content accept if goodguys
        tcp-request content reject if badguys WAIT_END
        tcp-request content reject
        

        You can configure such settings in the 'advanced' textbox in the webgui. However the whitelist.lst file would need to created manually..

        See http://cbonte.github.io/haproxy-dconv/configuration-1.5.html for the complete manual of options haproxy itself offers. (not everything is possible with the pfsense package webgui build in options..)

        1 Reply Last reply Reply Quote 0
        • J Offline
          jmack
          last edited by

          What I want to accomplish in HAproxy is following:

          
          IF host matches www.mysite.com ==> tcp-request connection accept ALL
          IF host matches extranet.mysite.com ==> tcp-request connection accept if { src -f /etc/haproxy/whitelist.lst }
          ELSE deny access
          
          

          Om monday they are about to migrate my connection to single IP…
          (Above "language" probably maybe doesn make sense, hopefully it explains what I want...)

          1 Reply Last reply Reply Quote 0
          • J Offline
            jmack
            last edited by

            here my new config, it does NOT block the IP's which are NOT whitelisted yet…:

            
            global
            	maxconn			1000
            	stats socket /tmp/haproxy.socket level admin
            	gid			80
            	nbproc			1
            	chroot			/tmp/haproxy_chroot
            	daemon
            
            frontend mhi.nl-merged
            	bind			37.111.111.111:80  
            	mode			http
            	log			global
            	option			http-keep-alive
            	option			forwardfor
            	reqadd X-Forwarded-Proto:\ http
            	maxconn			10000
            	timeout client		30000
            	acl			0_www.site.nl	hdr(host) -i www.site.nl
            	acl			1_extranet.site.nl	hdr(host) -i extranet.site.nl
            	acl			2_whitelist { src -f /var/etc/haproxy_whitelist.lst }
            	use_backend		www.site.nl_http if 0_www.site.nl 
            	use_backend		extranet.site.nl_http if 2_whitelist 1_extranet.site.nl
            
            backend www.site.nl_http
            	mode			http
            	balance			roundrobin
            	timeout connect		30000
            	timeout server		30000
            	retries			3
            	option			httpchk OPTIONS / 
            	server			www.site.nl 10.11.12.13:80 check inter 1000  weight 100 
            
            backend extranet.site.nl_http
            	mode			http
            	balance			roundrobin
            	timeout connect		30000
            	timeout server		30000
            	retries			3
            	source 0.0.0.0 usesrc clientip
            	option			httpchk OPTIONS / 
            	server			extranet.site.nl 10.14.15.16:80 check inter 1000  weight 100
            
            
            1 Reply Last reply Reply Quote 0
            • P Offline
              PiBa
              last edited by

              the acl is invalid and haproxy should trow and fatal alert for that remove the accolades:
              acl 2_whitelist src -f /var/etc/haproxy_whitelist.lst

              only when writing the acl directly behind a 'if' it needs to be between {  } characters.

              1 Reply Last reply Reply Quote 0
              • J Offline
                jmack
                last edited by

                It all works now, here is my configfile ==>
                ALL what I needed could be done from the pfsense web-config-page, I did not read this sentence properly, thats why I started to edit cfg manually….:
                "acl's with the same name wil be 'combined', acl's with different names will be evaluated seperately."
                So do as written, and the particular backend uses BOTH acls combined as needed... ;-)

                Also, for other users, try to stick as long as possible with the web-config-page.
                I was lost for at least an 2 hours, to be able to restart HAproxy properly... and maintain the right config file?!?
                (it was when I began in /var/etc/haproxy.cfg, later in /var/etc/haproxy/haproxy.cfg of some reason)

                The custom error pages can be pasted in Pfsense config-page / Frontend / Advanced pass thru

                PfSense 2.1.5, with haproxy-devel 1.5.3 pkg v 0.10

                global
                	maxconn			1000
                	stats socket /tmp/haproxy.socket level admin
                	gid			80
                	nbproc			1
                	chroot			/tmp/haproxy_chroot
                	daemon
                
                listen HAProxyLocalStats
                	bind 127.0.0.1:2200
                	mode http
                	stats enable
                	stats refresh 10
                	stats admin if TRUE
                	stats uri /haproxy_stats.php?haproxystats=1
                	timeout client 5000
                	timeout connect 5000
                	timeout server 5000
                
                frontend site.com-merged
                	bind			80.90.100.110:80  
                	errorfile 400 /home/jmack/haproxy400error.http
                	errorfile 403 /home/jmack/haproxy403error.http
                	errorfile 408 /home/jmack/haproxy408error.http
                	errorfile 500 /home/jmack/haproxy500error.http
                	errorfile 502 /home/jmack/haproxy502error.http
                	errorfile 503 /home/jmack/haproxy503error.http
                	errorfile 504 /home/jmack/haproxy504error.http
                	mode			http
                	log			global
                	option			log-separate-errors
                	option			httplog
                	option			http-keep-alive
                	option			forwardfor
                	reqadd X-Forwarded-Proto:\ http
                	maxconn			10000
                	timeout client		30000
                	acl			0_www.site.com	hdr(host) -i www.site.com
                	use_backend		www.site.com_http if 0_www.site.com 
                	acl			1_extranet.site.com	hdr(host) -i extranet.site.com
                	acl			2_extranet.site.com	src -f /home/jmack/haproxy_whitelist.1st
                	use_backend		extranet.site.com_http if 1_extranet.site.com 2_extranet.site.com 
                
                backend www.site.com_http
                	mode			http
                	balance			roundrobin
                	timeout connect		30000
                	timeout server		30000
                	retries			3
                	option			httpchk OPTIONS / 
                	server			www.site.com 10.22.22.22:80 check inter 1000  weight 100 
                
                backend extranet.site.com_http
                	mode			http
                	balance			roundrobin
                	timeout connect		30000
                	timeout server		30000
                	retries			3
                	source 0.0.0.0 usesrc clientip
                	option			httpchk OPTIONS / 
                	server			extranet.site.com 10.11.12.13:80 check inter 1000  weight 100
                
                1 Reply Last reply Reply Quote 0
                • J Offline
                  jmack
                  last edited by

                  2 questions left:

                  A.)
                  I cannot put custom error files and whitelist file in /var/etc/ they get erased after restart.
                  When make readonly, they get deleted after server reboot.
                  I added files to /home/[user]  is this place OK?

                  B.)
                  How to add to the whitelist-file CIDR subnet IP's?
                  It seems only possible to add single IP's….

                  1 Reply Last reply Reply Quote 0
                  • P Offline
                    PiBa
                    last edited by

                    A) indeed /var and /tmp are deleted on every pfsense reboot
                    as for the proper location im not sure what would be..

                    B) cidr ranges should be possible (seems to work for me), ill add some basic support for ip aliases in the webgui.. (changes only loaded when haproxy config is generated again..)

                    1 Reply Last reply Reply Quote 0
                    • J Offline
                      jmack
                      last edited by

                      B) cidr ranges should be possible (seems to work for me),

                      To confirm:
                      I tested my whitelist "cidr-only", so when single IP's; they were /32 etc.
                      Haproxy refuses to start…

                      To be able to use PFsense's aliasses would be a welcome function!

                      1 Reply Last reply Reply Quote 0
                      • P Offline
                        PiBa
                        last edited by

                        reinstall the package, and give the 'ip matches ip or alias' acl a try, you can just put the name of a ip-alias there and it should work..

                        remember the list is only reloaded when config is written again while starting haproxy.. changing an alias does not currently trigger that.

                        1 Reply Last reply Reply Quote 0
                        • First post
                          Last post
                        Copyright 2025 Rubicon Communications LLC (Netgate). All rights reserved.