diff --git a/src/opnsense/mvc/app/controllers/OPNsense/Proxy/forms/main.xml b/src/opnsense/mvc/app/controllers/OPNsense/Proxy/forms/main.xml index 0cd808839..2de62e336 100644 --- a/src/opnsense/mvc/app/controllers/OPNsense/Proxy/forms/main.xml +++ b/src/opnsense/mvc/app/controllers/OPNsense/Proxy/forms/main.xml @@ -202,10 +202,19 @@ checkbox Be aware of the security implications before enabling this option. +

+ Transparent HTTP proxy needs to be enabled and you need nat rules to reflect your traffic + for this feature to work. ]]>
+ + proxy.forward.sslbumpport + + text + + proxy.forward.sslcertificate @@ -221,7 +230,8 @@ true + Prefix the domain with a . to accept all subdomains (e.g. .google.com). ]]> diff --git a/src/opnsense/mvc/app/models/OPNsense/Proxy/Proxy.xml b/src/opnsense/mvc/app/models/OPNsense/Proxy/Proxy.xml index bb89d8426..58a97e37e 100644 --- a/src/opnsense/mvc/app/models/OPNsense/Proxy/Proxy.xml +++ b/src/opnsense/mvc/app/models/OPNsense/Proxy/Proxy.xml @@ -159,6 +159,13 @@ Proxy port needs to be an integer value between 1 and 65535 Y + + 3129 + 1 + 65535 + SSL Proxy port needs to be an integer value between 1 and 65535 + Y + 0 Y diff --git a/src/opnsense/scripts/proxy/setup.sh b/src/opnsense/scripts/proxy/setup.sh index 76469628e..d996a88b5 100755 --- a/src/opnsense/scripts/proxy/setup.sh +++ b/src/opnsense/scripts/proxy/setup.sh @@ -3,9 +3,9 @@ SQUID_DIRS="/var/log/squid /var/run/squid /var/squid /var/squid/cache /var/squid/ssl /var/squid/logs" for SQUID_DIR in ${SQUID_DIRS}; do - mkdir -p ${SQUID_DIR} - chown -R squid:squid ${SQUID_DIR} - chmod -R 750 ${SQUID_DIR} + mkdir -p ${SQUID_DIR} + chown -R squid:squid ${SQUID_DIR} + chmod -R 750 ${SQUID_DIR} done /usr/sbin/pw groupmod proxy -m squid /usr/local/sbin/squid -z > /dev/null 2>&1 @@ -14,12 +14,30 @@ done # some vague errors. sleep 1 +# remove ssl certificate store in case the user changed the CA +if [ -f /usr/local/etc/squid/ca.pem.id ]; then + current_cert=`cat /usr/local/etc/squid/ca.pem.id` + if [ -d /var/squid/ssl_crtd ]; then + if [ -f /var/squid/ssl_crtd.id ]; then + running_cert=`cat /var/squid/ssl_crtd.id` + else + running_cert="" + fi + if [ "$current_cert" != "$running_cert" ]; then + rm -rf /var/squid/ssl_crtd + fi + fi +fi + # create ssl certificate store, in case sslbump is enabled we need this if [ ! -d /var/squid/ssl_crtd ]; then -/usr/local/libexec/squid/ssl_crtd -c -s /var/squid/ssl_crtd > /dev/null 2>&1 -chown -R squid:squid /var/squid/ssl_crtd -chmod -R 750 /var/squid/ssl_crtd + /usr/local/libexec/squid/ssl_crtd -c -s /var/squid/ssl_crtd > /dev/null 2>&1 + chown -R squid:squid /var/squid/ssl_crtd + chmod -R 750 /var/squid/ssl_crtd + if [ -f /usr/local/etc/squid/ca.pem.id ]; then + cat /usr/local/etc/squid/ca.pem.id > /var/squid/ssl_crtd.id + fi fi # generate SSL bump certificate -/usr/local/opnsense/scripts/proxy/generate_cert.php +/usr/local/opnsense/scripts/proxy/generate_cert.php > /dev/null 2>&1 diff --git a/src/opnsense/service/templates/OPNsense/Proxy/squid.conf b/src/opnsense/service/templates/OPNsense/Proxy/squid.conf index 1051f4ad1..49a07dc1b 100644 --- a/src/opnsense/service/templates/OPNsense/Proxy/squid.conf +++ b/src/opnsense/service/templates/OPNsense/Proxy/squid.conf @@ -3,16 +3,18 @@ # Do not edit this file manually. {# wrap http_port ssl bump configuration for reuse #} -{% macro sslbump_httpconfig() -%} +{% macro sslbump_httpsconfig(network, tags='') -%} {% if helpers.exists('OPNsense.proxy.forward.sslbump') and OPNsense.proxy.forward.sslbump == '1' %} - ssl-bump cert=/var/squid/ssl/ca.pem dynamic_cert_mem_cache_size=10MB generate-host-certificates=on +https_port {{network}}:{{OPNsense.proxy.forward.sslbumpport|default('3129')}} {{tags}} ssl-bump cert=/var/squid/ssl/ca.pem dynamic_cert_mem_cache_size=10MB generate-host-certificates=on {% endif %} {%- endmacro %} {% if helpers.exists('OPNsense.proxy.forward.transparentMode') and OPNsense.proxy.forward.transparentMode == '1' %} # transparent mode, listen on localhost -http_port 127.0.0.1:{{ OPNsense.proxy.forward.port }} intercept {{ sslbump_httpconfig() }} -http_port [::1]:{{ OPNsense.proxy.forward.port }} intercept {{ sslbump_httpconfig() }} +http_port 127.0.0.1:{{ OPNsense.proxy.forward.port }} intercept +{{ sslbump_httpsconfig('127.0.0.1', 'intercept') }} +http_port [::1]:{{ OPNsense.proxy.forward.port }} intercept +{{ sslbump_httpsconfig('[::1]', 'intercept') }} {% endif %} # Setup listen configuration @@ -20,14 +22,14 @@ http_port [::1]:{{ OPNsense.proxy.forward.port }} intercept {{ sslbump_httpconfi {% for interface in OPNsense.proxy.forward.interfaces.split(",") %} {% for intf_key,intf_item in interfaces.iteritems() %} {% if intf_key == interface and intf_item.ipaddr != 'dhcp' %} -http_port {{intf_item.ipaddr}}:{{ OPNsense.proxy.forward.port }} {{ sslbump_httpconfig() }} +http_port {{intf_item.ipaddr}}:{{ OPNsense.proxy.forward.port }} {% endif %} {% endfor %} {# virtual ip's #} {% if helpers.exists('virtualip') %} {% for intf_key,intf_item in virtualip.iteritems() %} {% if intf_item.interface == interface and intf_item.mode == 'ipalias' %} -http_port {{intf_item.subnet}}:{{ OPNsense.proxy.forward.port }} {{ sslbump_httpconfig() }} +http_port {{intf_item.subnet}}:{{ OPNsense.proxy.forward.port }} {% endif %} {% endfor %} {% endif %} @@ -50,6 +52,8 @@ ssl_bump splice bump_nobumpsites ssl_bump peek bump_step2 bump_nobumpsites ssl_bump splice bump_step3 bump_nobumpsites ssl_bump bump + +sslproxy_cert_error deny all {% endif %} acl ftp proto FTP