pfSense HAproxy LetsEncrypt http2

Здравейте,

От около седмица-две започнах тестове с pfSense 2.4.2, а от няколко дни го използвам в production среда!

В този пост (pfSense HAproxy LetsEncrypt http2 ) ще споделя как да инсталираме, конфигурираме и използваме HaProxy с Let’s Encrypt и най-новия http протокол – http2!

Инсталация

Трябва да инсталираме следните пакети за pfsense : acme (let’s encrypt) и haproxy-devel (dev версията е 1.8 която поддържа http2).

pfSense HAproxy LetsEncrypt http2

 

Конфигуриране

 

HaProxy

След като сме инсталирали HaProxy, е необходимо да създадем backend чрез който да може да инсталираме и подновяваме Let’s Encrypt сертификати.

pfSense HAproxy LetsEncrypt http2

Избираме си име – примерно localacmeserver който да работи на localhost на порт 8126 (порта е много важен за frontend частта!)

Следва да направим и два frontend-а които да работят на порт 80 и порт 443.

Първия HTTP-to-HTTPS ще служи за препращане на всичкия трафик от порт 80 към HTTPS (порт 443) с едно изключение – заявките от Let’s Encrypt ще бъдат обработвани локално от localacmeserver (порт 8126). Това се прави ето така :

Намираме Default backend, access control lists and actions и създаваме acme. За expression избираме  Path starts with: , на Not избираме yes, и за Value слагаме : /.well-known/acme-challenge

Така всички заявки от типа /.well-known/acme-challenge ще бъдат обработвани от backend-а ни който кръстихме acme.

 

По-долу на Actions се описва и 302 redirect-а от HTTP към HTTPS:

Накрая избираме за default backend “acme”

Следва конфигурирането на HTTPS frontend-a ни.

Тук важното е при Access Control lists да изберем за Notno , и да сложим същото Value – /.well-known/acme-challenge/ и при Actions да посочим, че ще използваме backend : acme.

Let’s encrypt

Нужно да си на настройм ACME акаунта от Services -> Acme certificates -> Account keys. Избераме за сървър Acme server – Let’s Encrypt production, след това кликваме на Create new account key, и след това на Register acme account key и накрая save.

Отиваме на Certificates и си създаваме нов, като тук важното е да спазим следното :

За method да изберем : standalone HTTP server а за порт да изберем 8126 , а на Action lists да спожим следните две команди :

Restart the GUI on this firewall: Select “Shell Command” and enter /etc/rc.restart_webgui
Restart HAProxy on this firewall: Select “Shell Command” and enter /usr/local/etc/rc.d/haproxy.sh restart

Така когато ни се поднови автоматични сертификата след 60 дни, HaProxy сървъра ще се рестартира автоматично и ще вземе новият сертификат за съответният домейн.

 

 

HaProxy Http2

Включването на http2 в haproxy 1.8 е много лесно.

Избираме HTTPS backend-a ни и срещу IP адреса му в полето Advanced добавяме следното : alpn h2,http/1.1

Препорачително е да изключим старите SSL протоколи – SSLv2 , SSLv3 , TLSv10 и TLSv11

На Advanced ssl options слагаме :

force-tlsv12 no-tls-tickets

На 

ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS

 

Резултатът

След като приключим с настройките е хубаво да тестваме всичко дали е ок. В моят случай всичко мина нормално и ето и резултатите от

https://tools.keycdn.com/http2-test и https://www.ssllabs.com/ssltest/analyze.html?d=nqma.net

Това е! 🙂