From 29f56908dd826d884f37e7eea8ba537ac57ff433 Mon Sep 17 00:00:00 2001 From: Frank Wall Date: Sat, 18 Nov 2017 00:15:11 +0100 Subject: [PATCH 1/4] net/haproxy: make SSL params configurable, closes #375 --- .../OPNsense/HAProxy/forms/dialogFrontend.xml | 41 +++++++++++++++---- .../app/models/OPNsense/HAProxy/HAProxy.xml | 25 +++++++++++ .../mvc/app/views/OPNsense/HAProxy/index.volt | 16 ++++++++ .../templates/OPNsense/HAProxy/haproxy.conf | 19 +++++++-- 4 files changed, 89 insertions(+), 12 deletions(-) diff --git a/net/haproxy/src/opnsense/mvc/app/controllers/OPNsense/HAProxy/forms/dialogFrontend.xml b/net/haproxy/src/opnsense/mvc/app/controllers/OPNsense/HAProxy/forms/dialogFrontend.xml index 2ed5d20a4..e9a1b33b5 100644 --- a/net/haproxy/src/opnsense/mvc/app/controllers/OPNsense/HAProxy/forms/dialogFrontend.xml +++ b/net/haproxy/src/opnsense/mvc/app/controllers/OPNsense/HAProxy/forms/dialogFrontend.xml @@ -45,17 +45,17 @@ dropdown - - - header - - frontend.ssl_enabled - + checkbox Enable SSL offloading + + + header + + frontend.ssl_certificates @@ -74,11 +74,36 @@ frontend.ssl_customOptions - + text - Example: no-sslv3 ciphers HIGH:!DSS:!aNULL@STRENGTH
]]>
+ true
+ + frontend.ssl_advancedEnabled + + checkbox + + + + + header + + + + frontend.ssl_bindOptions + + select_multiple + + true + + + + frontend.ssl_cipherList + + text + + header diff --git a/net/haproxy/src/opnsense/mvc/app/models/OPNsense/HAProxy/HAProxy.xml b/net/haproxy/src/opnsense/mvc/app/models/OPNsense/HAProxy/HAProxy.xml index 5829d0c53..045076ccd 100644 --- a/net/haproxy/src/opnsense/mvc/app/models/OPNsense/HAProxy/HAProxy.xml +++ b/net/haproxy/src/opnsense/mvc/app/models/OPNsense/HAProxy/HAProxy.xml @@ -298,6 +298,31 @@ N + + 0 + Y + + + N + no-sslv3,no-tlsv10,no-tls-tickets + Y + + no-sslv3 + no-tlsv10 + no-tlsv11 + no-tlsv12 + no-tls-tickets + force-sslv3 + force-tlsv10 + force-tlsv11 + force-tlsv12 + strict-sni + + + + ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256 + N + 1 500000 diff --git a/net/haproxy/src/opnsense/mvc/app/views/OPNsense/HAProxy/index.volt b/net/haproxy/src/opnsense/mvc/app/views/OPNsense/HAProxy/index.volt index 031b8f8c5..9750fc363 100644 --- a/net/haproxy/src/opnsense/mvc/app/views/OPNsense/HAProxy/index.volt +++ b/net/haproxy/src/opnsense/mvc/app/views/OPNsense/HAProxy/index.volt @@ -186,6 +186,22 @@ POSSIBILITY OF SUCH DAMAGE. $("."+service_id).show(); }); $("#frontend\\.mode").change(); + + // show/hide SSL offloading + $("#frontend\\.ssl_enabled").change(function(){ + var service_id = 'table_ssl_' + $(this).is(':checked'); + $(".table_ssl").hide(); + $("."+service_id).show(); + }); + $("#frontend\\.ssl_enabled").change(); + + // show/hide advanced SSL settings + $("#frontend\\.ssl_advancedEnabled").change(function(){ + var service_id = 'table_ssl_advanced_' + $(this).is(':checked'); + $(".table_ssl_advanced").hide(); + $("."+service_id).show(); + }); + $("#frontend\\.ssl_advancedEnabled").change(); }) // hook into on-show event for dialog to extend layout. diff --git a/net/haproxy/src/opnsense/service/templates/OPNsense/HAProxy/haproxy.conf b/net/haproxy/src/opnsense/service/templates/OPNsense/HAProxy/haproxy.conf index ad6ce9700..1d3f84f6f 100644 --- a/net/haproxy/src/opnsense/service/templates/OPNsense/HAProxy/haproxy.conf +++ b/net/haproxy/src/opnsense/service/templates/OPNsense/HAProxy/haproxy.conf @@ -571,22 +571,33 @@ defaults # Frontend: {{frontend.name}} ({{frontend.description}}) frontend {{frontend.name}} {% set ssl_certs = [] %} +{% set ssl_options = [] %} {% if frontend.ssl_enabled == '1' %} {# # check if ssl certs are configured #} {% if frontend.ssl_certificates|default("") != "" %} {# # NOTE: Cert lists are generated by exportCerts.php #} {% do ssl_certs.append('crt-list /var/etc/haproxy/ssl/' ~ frontend.id ~ '.crtlist') %} {% endif %} -{# # advanced ssl options #} +{# # advanced ssl parameters (pass-through) #} {% if frontend.ssl_customOptions|default("") != "" %} -{# # add a space to separate it from other ssl params #} -{% set ssl_options = frontend.ssl_customOptions ~ ' ' %} +{% do ssl_options.append(frontend.ssl_customOptions ~ ' ') %} +{% endif %} +{# # advanced ssl settings #} +{% if frontend.ssl_advancedEnabled|default("") == '1' %} +{% if frontend.ssl_bindOptions|default("") != "" %} +{% for bindopt in frontend.ssl_bindOptions.split(",") %} +{% do ssl_options.append(bindopt) %} +{% endfor %} +{% endif %} +{% if frontend.ssl_cipherList|default("") != "" %} +{% do ssl_options.append('ciphers ' ~ frontend.ssl_cipherList) %} +{% endif %} {% endif %} {% endif %} {# # bind/listen configuration #} {% if frontend.bind|default("") != "" %} {% for bind in frontend.bind.split(",") %} - bind {{bind}} name {{bind}} {% if frontend.bindOptions|default("") != "" %}{{ frontend.bindOptions }} {% endif %}{% if frontend.ssl_enabled == '1' and ssl_certs|default("") != "" %}ssl {{ ssl_options }}{{ssl_certs|join(' ')}} {% endif %} + bind {{bind}} name {{bind}} {% if frontend.bindOptions|default("") != "" %}{{ frontend.bindOptions }} {% endif %}{% if frontend.ssl_enabled == '1' and ssl_certs|default("") != "" %}ssl {{ ssl_options|join(' ') }} {{ ssl_certs|join(' ') }} {% endif %} {% endfor %} {% endif %} From d231f77062bb2cdf2bb06c90620dff479824d980 Mon Sep 17 00:00:00 2001 From: Frank Wall Date: Sat, 18 Nov 2017 00:15:55 +0100 Subject: [PATCH 2/4] net/haproxy: fix syntax error --- .../mvc/app/controllers/OPNsense/HAProxy/forms/dialogAction.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/net/haproxy/src/opnsense/mvc/app/controllers/OPNsense/HAProxy/forms/dialogAction.xml b/net/haproxy/src/opnsense/mvc/app/controllers/OPNsense/HAProxy/forms/dialogAction.xml index 8935c7e6a..5df745d0d 100644 --- a/net/haproxy/src/opnsense/mvc/app/controllers/OPNsense/HAProxy/forms/dialogAction.xml +++ b/net/haproxy/src/opnsense/mvc/app/controllers/OPNsense/HAProxy/forms/dialogAction.xml @@ -69,6 +69,7 @@ info + header From f7afbc30b753c9ace466709f484c95e47ab2c67c Mon Sep 17 00:00:00 2001 From: Frank Wall Date: Sat, 18 Nov 2017 00:51:25 +0100 Subject: [PATCH 3/4] net/haproxy: add global SSL default values, refs #375 --- .../OPNsense/HAProxy/forms/main.xml | 24 ++++++++++++++++++ .../app/models/OPNsense/HAProxy/HAProxy.xml | 25 +++++++++++++++++++ .../templates/OPNsense/HAProxy/haproxy.conf | 14 +++++++++++ 3 files changed, 63 insertions(+) diff --git a/net/haproxy/src/opnsense/mvc/app/controllers/OPNsense/HAProxy/forms/main.xml b/net/haproxy/src/opnsense/mvc/app/controllers/OPNsense/HAProxy/forms/main.xml index bfe9c6e35..3a48bfaeb 100644 --- a/net/haproxy/src/opnsense/mvc/app/controllers/OPNsense/HAProxy/forms/main.xml +++ b/net/haproxy/src/opnsense/mvc/app/controllers/OPNsense/HAProxy/forms/main.xml @@ -86,6 +86,30 @@
NOTE: The syntax will not be checked, use at your own risk!
]]>
true
+ + + header + + + haproxy.general.tuning.ssl_defaultsEnabled + + checkbox + + + + haproxy.general.tuning.ssl_bindOptions + + select_multiple + + true + + + + haproxy.general.tuning.ssl_cipherList + + text + + diff --git a/net/haproxy/src/opnsense/mvc/app/models/OPNsense/HAProxy/HAProxy.xml b/net/haproxy/src/opnsense/mvc/app/models/OPNsense/HAProxy/HAProxy.xml index 045076ccd..ae6724884 100644 --- a/net/haproxy/src/opnsense/mvc/app/models/OPNsense/HAProxy/HAProxy.xml +++ b/net/haproxy/src/opnsense/mvc/app/models/OPNsense/HAProxy/HAProxy.xml @@ -79,6 +79,31 @@ N + + 0 + Y + + + N + no-sslv3,no-tlsv10,no-tls-tickets + Y + + no-sslv3 + no-tlsv10 + no-tlsv11 + no-tlsv12 + no-tls-tickets + force-sslv3 + force-tlsv10 + force-tlsv11 + force-tlsv12 + strict-sni + + + + ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256 + N + diff --git a/net/haproxy/src/opnsense/service/templates/OPNsense/HAProxy/haproxy.conf b/net/haproxy/src/opnsense/service/templates/OPNsense/HAProxy/haproxy.conf index 1d3f84f6f..d0aeb2f27 100644 --- a/net/haproxy/src/opnsense/service/templates/OPNsense/HAProxy/haproxy.conf +++ b/net/haproxy/src/opnsense/service/templates/OPNsense/HAProxy/haproxy.conf @@ -518,6 +518,20 @@ global {% endif %} {% endfor %} {% endif %} +{# # ssl default settings #} +{% if OPNsense.HAProxy.general.tuning.ssl_defaultsEnabled|default("") == '1' %} +{% if OPNsense.HAProxy.general.tuning.ssl_bindOptions|default("") != "" %} +{% set bindopts = [] %} +{% for bindopt in OPNsense.HAProxy.general.tuning.ssl_bindOptions.split(",") %} +{% do bindopts.append(bindopt) %} +{% endfor %} + ssl-default-bind-options {{ bindopts|join(' ') }} +{% endif %} +{% if OPNsense.HAProxy.general.tuning.ssl_cipherList|default("") != "" %} + ssl-default-bind-ciphers {{ OPNsense.HAProxy.general.tuning.ssl_cipherList }} +{% endif %} +{% endif %} +{# # pass-through options #} {% if OPNsense.HAProxy.general.tuning.customOptions|default("") != "" %} # WARNING: pass through options below this line {% for customOpt in OPNsense.HAProxy.general.tuning.customOptions.split("\n") %} From 80613eea0ed7295f38d03f80afaf8eb35b5ba9e5 Mon Sep 17 00:00:00 2001 From: Frank Wall Date: Sat, 18 Nov 2017 01:09:38 +0100 Subject: [PATCH 4/4] net/haproxy: support HSTS, refs #375 --- .../OPNsense/HAProxy/forms/dialogFrontend.xml | 12 ++++++++++++ .../mvc/app/models/OPNsense/HAProxy/HAProxy.xml | 11 +++++++++++ .../service/templates/OPNsense/HAProxy/haproxy.conf | 4 ++++ 3 files changed, 27 insertions(+) diff --git a/net/haproxy/src/opnsense/mvc/app/controllers/OPNsense/HAProxy/forms/dialogFrontend.xml b/net/haproxy/src/opnsense/mvc/app/controllers/OPNsense/HAProxy/forms/dialogFrontend.xml index e9a1b33b5..3b1e3449a 100644 --- a/net/haproxy/src/opnsense/mvc/app/controllers/OPNsense/HAProxy/forms/dialogFrontend.xml +++ b/net/haproxy/src/opnsense/mvc/app/controllers/OPNsense/HAProxy/forms/dialogFrontend.xml @@ -104,6 +104,18 @@ text + + frontend.ssl_hstsEnabled + + checkbox + + + + frontend.ssl_hstsMaxAge + + text + + header diff --git a/net/haproxy/src/opnsense/mvc/app/models/OPNsense/HAProxy/HAProxy.xml b/net/haproxy/src/opnsense/mvc/app/models/OPNsense/HAProxy/HAProxy.xml index ae6724884..af366cdcb 100644 --- a/net/haproxy/src/opnsense/mvc/app/models/OPNsense/HAProxy/HAProxy.xml +++ b/net/haproxy/src/opnsense/mvc/app/models/OPNsense/HAProxy/HAProxy.xml @@ -348,6 +348,17 @@ ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256 N + + 1 + Y + + + 15768000 + 1 + 1000000000 + Please specify a value between 1 and 1000000000. + Y + 1 500000 diff --git a/net/haproxy/src/opnsense/service/templates/OPNsense/HAProxy/haproxy.conf b/net/haproxy/src/opnsense/service/templates/OPNsense/HAProxy/haproxy.conf index d0aeb2f27..b6b70b8b0 100644 --- a/net/haproxy/src/opnsense/service/templates/OPNsense/HAProxy/haproxy.conf +++ b/net/haproxy/src/opnsense/service/templates/OPNsense/HAProxy/haproxy.conf @@ -607,6 +607,10 @@ frontend {{frontend.name}} {% do ssl_options.append('ciphers ' ~ frontend.ssl_cipherList) %} {% endif %} {% endif %} +{# # HSTS #} +{% if frontend.ssl_hstsEnabled|default("") == '1' %} + http-response set-header Strict-Transport-Security max-age={{frontend.ssl_hstsMaxAge}} +{% endif %} {% endif %} {# # bind/listen configuration #} {% if frontend.bind|default("") != "" %}