{"id":473565,"date":"2025-09-02T16:56:19","date_gmt":"2025-09-02T16:56:19","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=473565"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=473565","title":{"rendered":"<span>\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f QUIC \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 \u0447\u0435\u0440\u0435\u0437 HAProxy<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0412 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043f\u043e\u043a\u0430\u0436\u0443 \u043a\u0430\u043a \u0441\u043e\u0431\u0440\u0430\u0442\u044c HAProxy \u0434\u043b\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u00ab\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0433\u043e\u00bb QUIC \u043d\u0435\u00a0\u0432\u00a0\u0440\u0435\u0436\u0438\u043c\u0435 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u0438, \u0441\u043e \u0441\u0431\u043e\u0440\u043a\u043e\u0439 OpenSSL 3.5\u00a0\u0441\u00a0\u043f\u043e\u0434\u0434\u0435 \u0440\u0436\u043a\u043e\u0439 QUIC \u0432 \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432\u0430\u0445 \u0441 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u043c OpenSSL 3.0, \u0441 \u0432\u044b\u0445\u043e\u0434\u043e\u043c Debian 13 \u0437\u0430\u0434\u0430\u0447\u0430 \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u043b\u0430\u0441\u044c, \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e HAProxy, \u0432 \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432 \u0443\u0436\u0435 \u0432\u0441\u0442\u0440\u043e\u0435\u043d OpenSSL 3.5 \u0441 \u043f\u043e\u043b\u043d\u043e\u0439 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 QUIC \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u0435\u0440\u0432\u0435\u0440\u0430. \u0414\u0430\u043b\u0435\u0435 \u0431\u0443\u0434\u0443 \u0441\u043e\u043a\u0440\u0430\u0449\u0430\u0442\u044c HAProxy \u0434\u043e HA.<\/p>\n<p>Disclaimer\u00a0\u2014 \u0432\u0441\u0435 \u043d\u0438\u0436\u0435 \u0441\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0435 \u043f\u0440\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443 \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430, \u0434\u043b\u044f \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u0435\u043d\u0430, \u043b\u0443\u0447\u0448\u0435 \u0441\u043e\u0431\u0440\u0430\u0442\u044c deb \u043f\u0430\u043a\u0435\u0442. <\/p>\n<h2>\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u043a \u0441\u0431\u043e\u0440\u043a\u0435<\/h2>\n<p>\u0414\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u043d\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0431\u0430\u0437\u043e\u0432\u044b\u0435 \u043f\u0430\u043a\u0435\u0442\u044b, \u0442\u0430\u043a \u0436\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c HA \u0438\u0437 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f \u0434\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u0432 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c:<\/p>\n<p><code>apt install -y build-essential libpcre2-dev zlib1g-dev libsystemd-dev liblua5.3-dev libssl-dev curl ca-certificates haproxy<\/code><\/p>\n<p>\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u043c \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e \u0434\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u0438 \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u0432 \u043d\u0435\u0435:<\/p>\n<p><code>mkdir -p ~\/build\/openssl &amp;&amp; cd ~\/build<\/code><\/p>\n<h2>\u0421\u0431\u043e\u0440\u043a\u0430 OpenSSL 3.5+QUIC<\/h2>\n<p>\u041d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f LTS \u0432\u0435\u0440\u0441\u0438\u044f OpenSSL 3.5.1 (\u043e\u0431\u043d\u043e\u0432\u0438\u043b\u0441\u044f \u043d\u0430 OpenSSL 3.5.2)<br \/>\u041d\u043e\u0432\u044b\u0435 \u0440\u0435\u043b\u0438\u0437\u044b \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c <a href=\"https:\/\/github.com\/openssl\/openssl\/releases\/\" rel=\"noopener noreferrer nofollow\">\u0442\u0443\u0442<\/a>. \u0417\u0430\u0433\u0440\u0443\u0437\u0438\u043c \u0435\u0435:<\/p>\n<p><code>curl -LO https:\/\/github.com\/openssl\/openssl\/releases\/download\/openssl-3.5.1\/openssl-3.5.1.tar.gz<\/code><\/p>\n<p>\u0420\u0430\u0441\u043f\u0430\u043a\u0443\u0435\u043c \u0438 \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e: <\/p>\n<p><code>tar xvf openssl-3.5.1.tar.gz &amp;&amp; cd openssl-3.5.1<\/code><\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a OpenSSL:<\/p>\n<p><code>mkdir \/opt\/openssl-custom<\/code><\/p>\n<p>\u041d\u0430\u0441\u0442\u0440\u043e\u0438\u043c \u0441\u0431\u043e\u0440\u043a\u0443 \u0434\u043b\u044f \u043f\u043e\u043b\u043d\u043e\u0439 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 QUIC \u0438 \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u043c OpenSSL \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u043e\u0442 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u0434\u043e\u0431\u0430\u0432\u0438\u0432 \u0432\u0435\u0440\u0441\u0438\u044e \u043a \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438: <\/p>\n<p><code>.\/Configure enable-quic linux-x86_64 --prefix=\/opt\/openssl-custom\/openssl-3.5.1<\/code><\/p>\n<p>\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u0441\u0431\u043e\u0440\u043a\u0443:<\/p>\n<p><code>make -j\"$(nproc)\"<\/code><\/p>\n<p>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c \u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e OpenSSL:<\/p>\n<p><code>make install_sw<\/code><\/p>\n<p>\u0414\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0441\u0438\u043c\u043b\u0438\u043d\u043a \u043d\u0430 openssl-3.5.1, \u0432 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u0434\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 HA \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043f\u0435\u0440\u0435\u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u0438\u043c\u043b\u0438\u043d\u043a \u043d\u0430 \u043d\u043e\u0432\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e OpenSSL \u043f\u0440\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0438:<\/p>\n<p><code>ln -sfn \/opt\/openssl-custom\/openssl-3.5.1 \/opt\/openssl-custom\/openssl<\/code><\/p>\n<p>\u041e\u0447\u0438\u0441\u0442\u0438\u043c build \u043e\u0442 \u043e\u0441\u0442\u0430\u0442\u043a\u043e\u0432 OpenSSL<\/p>\n<p><code>rm -rf ~\/build\/openssl*<\/code><\/p>\n<h2>\u0421\u0431\u043e\u0440\u043a\u0430 HAProxy 3.2<\/h2>\n<p>\u041d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f LTS \u0432\u0435\u0440\u0441\u0438\u044f 3.2.3<br \/>\u041d\u043e\u0432\u044b\u0435 \u0440\u0435\u043b\u0438\u0437\u044b \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c <a href=\"https:\/\/www.haproxy.org\" rel=\"noopener noreferrer nofollow\">\u0442\u0443\u0442<\/a>.<\/p>\n<p>\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u043c \u0440\u0435\u043b\u0438\u0437:<\/p>\n<p><code>curl -LO https:\/\/www.haproxy.org\/download\/3.2\/src\/haproxy-3.2.3.tar.gz<\/code><\/p>\n<p>\u0420\u0430\u0441\u043f\u0430\u043a\u0443\u0435\u043c \u0438 \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e:<\/p>\n<p><code>tar xvf haproxy-3.2.3.tar.gz &amp;&amp; cd haproxy-3.2.3<\/code><\/p>\n<p>\u0421\u043e\u0431\u0435\u0440\u0435\u043c \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 OpenSSL, \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043c\u043e\u0434\u0443\u043b\u044c Prometheus:<\/p>\n<pre><code>make -j\"$(nproc)\" TARGET=linux-glibc \\  USE_OPENSSL=1 USE_QUIC=1 USE_PROMEX=1 \\  SSL_INC=\/opt\/openssl-custom\/openssl\/include SSL_LIB=\/opt\/openssl-custom\/openssl\/lib64 \\  LDFLAGS=\"-Wl,-rpath=\/opt\/openssl-custom\/openssl\/lib64\" \\  USE_PCRE2=1 USE_ZLIB=1 \\  USE_LUA=1 LUA_INC=\/usr\/include\/lua5.3 LUA_LIB=\/usr\/lib \\  USE_SYSTEMD=1<\/code><\/pre>\n<p>\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c Debian 13 \u0438 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0445 \u0441 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 QUIC \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c OpenSSL \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f, \u0432\u0441\u044f \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435, \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0434\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0438\u043d\u0430\u0447\u0435:<\/p>\n<pre><code>make -j\"$(nproc)\" TARGET=linux-glibc \\  USE_OPENSSL=1 USE_QUIC=1 USE_PROMEX=1 \\  USE_PCRE2=1 USE_ZLIB=1 \\  USE_LUA=1 LUA_INC=\/usr\/include\/lua5.3 LUA_LIB=\/usr\/lib \\  USE_SYSTEMD=1<\/code><\/pre>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u0441\u043e\u0431\u0440\u0430\u043d\u043d\u044b\u0439  HA:<\/p>\n<p>\u0412\u044b\u043f\u043e\u043b\u043d\u0438\u043c <code>.\/haproxy -vv<\/code>, \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u043d\u0430 +QUIC -QUIC_OPENSSL_COMPAT \u0438 \u0432\u0435\u0440\u0441\u0438\u044e OpenSSL<\/p>\n<p>\u0414\u0430\u043b\u0435\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043c:<\/p>\n<p><code>ldd .\/haproxy | grep ssl<\/code><\/p>\n<p>\u0412\u044b\u0432\u043e\u0434 \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u0441\u044b\u043b\u0430\u0442\u044c\u0441\u044f \u043d\u0430 openssl-custom.<\/p>\n<p>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e HA:<\/p>\n<p>\u041e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c \u0441\u0435\u0440\u0432\u0438\u0441:<\/p>\n<p><code>systemctl stop haproxy<\/code><\/p>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u043a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0444\u0430\u0439\u043b:<\/p>\n<p><code>cp \/usr\/sbin\/haproxy \/usr\/sbin\/haproxy.repo<\/code><\/p>\n<p>\u041f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043c \u0437\u0430\u043c\u0435\u043d\u0443:<\/p>\n<p><code>cp haproxy \/usr\/sbin\/haproxy<\/code><\/p>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0434\u043b\u044f \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432\u043e\u0432 \u0431\u0435\u0437 \u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 QUIC:<\/p>\n<p><code>ldd \/usr\/sbin\/haproxy | grep ssl<\/code><br \/><code>ldd \/usr\/sbin\/haproxy | grep crypto<\/code><\/p>\n<p>\u0415\u0441\u043b\u0438 \u0441\u0441\u044b\u043b\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \/opt\/openssl-custom\/openssl\/ \u0437\u043d\u0430\u0447\u0438\u0442 \u0432\u0441\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e.<\/p>\n<p>\u041e\u0447\u0438\u0441\u0442\u0438\u043c build \u043e\u0442 haproxy<\/p>\n<p><code>rm -rf ~\/build\/haproxy*<\/code><\/p>\n<details class=\"spoiler\">\n<summary>\u0412\u044b\u0432\u043e\u0434 \u043a\u043e\u043c\u0430\u043d\u0434<\/summary>\n<div class=\"spoiler__content\">\n<p># ldd \/usr\/sbin\/haproxy | grep ssl<br \/> <a href=\"http:\/\/libssl.so\" rel=\"noopener noreferrer nofollow\">libssl.so<\/a>.3 =&gt; \/opt\/openssl-custom\/openssl\/lib64\/<a href=\"http:\/\/libssl.so\" rel=\"noopener noreferrer nofollow\">libssl.so<\/a>.3 (0x00007dd8efcf0000)<br \/> <a href=\"http:\/\/libcrypto.so\" rel=\"noopener noreferrer nofollow\">libcrypto.so<\/a>.3 =&gt; \/opt\/openssl-custom\/openssl\/lib64\/<a href=\"http:\/\/libcrypto.so\" rel=\"noopener noreferrer nofollow\">libcrypto.so<\/a>.3 (0x00007dd8ef600000)<br \/># ldd \/usr\/sbin\/haproxy | grep crypto<br \/> <a href=\"http:\/\/libcrypto.so\" rel=\"noopener noreferrer nofollow\">libcrypto.so<\/a>.3 =&gt; \/opt\/openssl-custom\/openssl\/lib64\/<a href=\"http:\/\/libcrypto.so\" rel=\"noopener noreferrer nofollow\">libcrypto.so<\/a>.3 (0x000072e226e00000)<\/p>\n<\/div>\n<\/details>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u0432\u0435\u0440\u0441\u0438\u044e: <code>haproxy -vv<\/code><\/p>\n<p>\u0412\u044b\u0432\u043e\u0434 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043f\u043e\u0445\u043e\u0436 \u043d\u0430 \u0442\u0430\u043a\u043e\u0439(\u0432\u044b\u0432\u043e\u0434 \u043d\u0435 \u043f\u043e\u043b\u043d\u044b\u0439):<\/p>\n<pre><code>HAProxy version 3.2.3-1844da7 2025\/07\/09 - https:\/\/haproxy.org\/ Status: long-term supported branch - will stop receiving fixes around Q2 2030. Known bugs: http:\/\/www.haproxy.org\/bugs\/bugs-3.2.3.html Build options :    OPTIONS = USE_OPENSSL=1 USE_LUA=1 USE_ZLIB=1 USE_QUIC=1 USE_PROMEX=1 USE_PCRE2=1  Feature list : +OPENSSL +PROMEX +QUIC -QUIC_OPENSSL_COMPAT   Built with multi-threading support (MAX_TGROUPS=32, MAX_THREADS=1024, default=6). Built with SSL library version : OpenSSL 3.5.1 1 Jul 2025 Running on SSL library version : OpenSSL 3.5.1 1 Jul 2025 QUIC: connection socket-owner mode support : yes QUIC: GSO emission support : yes  Available multiplexer protocols :        quic : mode=HTTP  side=FE     mux=QUIC  flags=HTX|NO_UPG|FRAMED<\/code><\/pre>\n<p>\u0417\u0434\u0435\u0441\u044c \u043d\u0430\u0441 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0442 \u0444\u043b\u0430\u0433\u0438: USE_QUIC=1 +OPENSSL +QUIC -QUIC_OPENSSL_COMPAT<br \/>SSL library version OpenSSL 3.5.1, <\/p>\n<p>QUIC: connection socket-owner mode support : yes<br \/>QUIC: GSO emission support : yes <br \/>Available multiplexer protocols:<\/p>\n<p>quic : mode=HTTP  side=FE     mux=QUIC  flags=HTX|NO_UPG|FRAMED<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u0441\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0435 \u0444\u043b\u0430\u0433\u0438 \u043a\u0430\u043a \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0437\u043d\u0430\u0447\u0438\u0442 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043f\u043e\u043b\u043d\u0430\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 QUIC.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u0448\u0430\u0431\u043b\u043e\u043d \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438, \u043d\u0430 \u043f\u043e\u0440\u0442\u0443 8080 \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0441\u0435\u0440\u0432\u0438\u0441 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438:<\/p>\n<pre><code>global    log \/dev\/log    local0    log \/dev\/log    local1 notice    chroot \/var\/lib\/haproxy    stats socket \/var\/run\/haproxy\/admin.sock level admin mode 660    stats timeout 30s    user    haproxy    group   haproxy    daemon     # \u0423\u043b\u0443\u0447\u0448\u0435\u043d\u043d\u0430\u044f \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u044c \u0438 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u044c \u0441\u043e \u0441\u0442\u0430\u0440\u044b\u043c\u0438 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430\u043c\u0438.    ssl-default-bind-curves X25519:prime256v1:secp384r1    ssl-default-bind-ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305    ssl-default-bind-ciphersuites TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256    ssl-default-bind-options prefer-client-ciphers ssl-min-ver TLSv1.2 #no-tls-tickets     ssl-default-server-ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305    ssl-default-server-ciphersuites TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256    ssl-default-server-options ssl-min-ver TLSv1.2 #no-tls-tickets defaults    log global    mode http    option httplog    option dontlognull    timeout connect 40s    timeout client  1m    timeout server  1m    timeout tunnel 1h    timeout http-request 30s frontend stats    bind *:8080    mode http    stats enable    stats uri \/    stats refresh 10s    stats show-version<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439:<\/p>\n<p><code>systemctl start haproxy<\/code><\/p>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u0437\u0430\u043f\u0443\u0441\u043a:<\/p>\n<p><code>systemctl status haproxy<\/code><\/p>\n<h2>\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u043c frontend \u043a \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 QUIC<\/h2>\n<p>\u0423 \u043c\u0435\u043d\u044f \u0435\u0441\u0442\u044c \u0442\u0430\u043a\u043e\u0439 frontend:<\/p>\n<pre><code>frontend http     bind [::]:80 v4v6     mode http     http-request redirect scheme https code 301 unless { ssl_fc } frontend https     bind [::]:443 v4v6 ssl crt \/etc\/haproxy\/certs\/ alpn h2,http\/1.1 strict-sni     http-request reject if { req.hdr(user-agent) -m sub evil }     http-request deny if { path -m sub \/. }     http-response set-header Strict-Transport-Security \"max-age=16000000; includeSubDomains;\"       use_backend http_site1 if { ssl_fc_sni -i example.ru }<\/code><\/pre>\n<p>\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043a \u043d\u0435\u043c\u0443 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c QUIC, \u0435\u0441\u0442\u044c \u0434\u0432\u0430 \u043f\u0443\u0442\u0438, \u0432\u044b\u043d\u0435\u0441\u0442\u0438 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 frontend \u043b\u0438\u0431\u043e \u0432\u043d\u0435\u0441\u0442\u0438 \u0432 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 https frontend.<\/p>\n<p>\u041d\u0438\u0436\u0435 \u043f\u0440\u0438\u043c\u0435\u0440 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0432\u044b\u043d\u0435\u0441\u0435\u043d\u043d\u043e\u0433\u043e frontend<\/p>\n<pre><code>frontend f_quic     bind quic4@:443 ssl crt \/etc\/haproxy\/certs\/ alpn h3 strict-sni ssl-min-ver TLSv1.3 allow-0rtt     bind quic6@:443 ssl crt \/etc\/haproxy\/certs\/ alpn h3 strict-sni ssl-min-ver TLSv1.3 allow-0rtt      http-request return status 200 content-type text\/plain lf-string \"Status 200 OK! Your IP %[src].\" if { path \/quic } { ssl_fc_alpn -i h3 }      use_backend http_site1 if { ssl_fc_sni -i example.ru }  <\/code><\/pre>\n<p><em>quic4@:443<\/em> \u0438 <em>quic6@:443<\/em> \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043b\u0443\u0448\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u043f\u043e\u0440\u0442 443 UDP<br \/><em>http-request return status 200<\/em>\u00a0\u2014 \u0432\u0435\u0440\u043d\u0435\u0442 \u0441\u0442\u0430\u0442\u0443\u0441 200 \u0435\u0441\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f QUIC \u043f\u043e \u043f\u0443\u0442\u0438 example.ru\/quic \u043f\u043e\u0441\u043b\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0443\u0431\u0440\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0439 \u043e\u0442\u0432\u0435\u0442.<\/p>\n<p>\u0412 \u043b\u044e\u0431\u043e\u043c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0435 \u0432 frontend https \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0434\u043b\u044f \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u044f \u043e \u043d\u0430\u043b\u0438\u0447\u0438\u0438 QUIC, \u0447\u0442\u043e \u0431\u044b \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043f\u043e\u043d\u0438\u043c\u0430\u043b\u0438 \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435, \u0435\u0441\u043b\u0438 \u0441 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435\u043c \u0431\u0443\u0434\u0443\u0442 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0435\u0442 \u043e\u0442\u043a\u0430\u0442 \u043d\u0430 TCP:<\/p>\n<pre><code>http-after-response add-header alt-svc 'h3=\":443\"; ma=86400, h3-29=\":443\"; ma=86400, h3-28=\":443\"; ma=86400, h3-27=\":443\"; ma=86400' <\/code><\/pre>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 frontend https \u0438\u0437 \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0432\u044b\u0448\u0435 \u0441 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u043c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u043c \u0438 QUIC: <\/p>\n<pre><code>frontend https     bind [::]:443 v4v6 ssl crt \/etc\/haproxy\/certs\/ alpn h2,http\/1.1 strict-sni     bind quic4@:443 ssl crt \/etc\/haproxy\/certs\/ alpn h3 strict-sni ssl-min-ver TLSv1.3 allow-0rtt     bind quic6@:443 ssl crt \/etc\/haproxy\/certs\/ alpn h3 strict-sni ssl-min-ver TLSv1.3 allow-0rtt     http-request reject if { req.hdr(user-agent) -m sub evil }     http-request deny if { path -m sub \/. }     http-response set-header Strict-Transport-Security \"max-age=16000000; includeSubDomains;\"      http-after-response add-header alt-svc 'h3=\":443\"; ma=86400, h3-29=\":443\"; ma=86400, h3-28=\":443\"; ma=86400, h3-27=\":443\"; ma=86400'       use_backend http_site1 if { ssl_fc_sni -i example.ru }<\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u041f\u0440\u043e TLS 1.3 0-RTT early data  \u0432 QUIC\/HTTP3  ( allow-0rtt )<\/summary>\n<div class=\"spoiler__content\">\n<ul>\n<li>\n<p>TLS 1.3 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043a\u043b\u0438\u0435\u043d\u0442\u0443 \u0441\u0440\u0430\u0437\u0443 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u043f\u0435\u0440\u0432\u044b\u043c \u043f\u0430\u043a\u0435\u0442\u043e\u043c ClientHello (0-RTT), \u043d\u0435 \u0434\u043e\u0436\u0438\u0434\u0430\u044f\u0441\u044c \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f \u0440\u0443\u043a\u043e\u043f\u043e\u0436\u0430\u0442\u0438\u044f.<\/p>\n<\/li>\n<li>\n<p>\u042d\u0442\u043e \u0443\u0441\u043a\u043e\u0440\u044f\u0435\u0442 \u0432\u0440\u0435\u043c\u044f \u043e\u0442\u043a\u043b\u0438\u043a\u0430 (\u043d\u0435\u0442 \u043b\u0438\u0448\u043d\u0435\u0433\u043e round trip), \u043d\u043e \u0443\u044f\u0437\u0432\u0438\u043c\u043e \u0434\u043b\u044f replay-\u0430\u0442\u0430\u043a, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u044d\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u044b \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a\u043e\u043c \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u043c \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0438.<\/p>\n<\/li>\n<li>\n<p>HAProxy \u0434\u0430\u0451\u0442 ACL ssl_fc_has_early, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f, \u0435\u0441\u043b\u0438 \u043a\u043b\u0438\u0435\u043d\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u043b \u00ab\u0440\u0430\u043d\u043d\u0438\u0435\u00bb \u0434\u0430\u043d\u043d\u044b\u0435.<\/p>\n<\/li>\n<\/ul>\n<p>\u0414\u043b\u044f \u0437\u0430\u0449\u0438\u0442\u044b \u043e\u0442 replay-\u0430\u0442\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c <code>http-request wait-for-handshake if { ssl_fc_has_early }<\/code> \u2014 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0437\u0430\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 HA \u043e\u0442\u043b\u043e\u0436\u0438\u0442\u044c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0434\u043e \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f TLS-handshake.<\/p>\n<p>\u0411\u0435\u0437 \u0434\u0430\u043d\u043d\u043e\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u044b \u0435\u0441\u0442\u044c \u0440\u0438\u0441\u043a \u0430\u0442\u0430\u043a \u043d\u0430 0-RTT, HA \u043d\u0430\u0447\u043d\u0435\u0442 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c 0-RTT \u0434\u043e \u043f\u043e\u043b\u043d\u043e\u0433\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f handshake. <\/p>\n<p>\u0421 \u0434\u0430\u043d\u043d\u043e\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u043e\u0439 HA \u0436\u0434\u0451\u0442 \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f handshake, \u043f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u0430, \u0447\u0442\u043e \u0443\u0431\u0438\u0440\u0430\u0435\u0442 \u0440\u0438\u0441\u043a, \u043d\u043e \u043c\u043e\u0436\u0435\u0442 \u043b\u0438\u0448\u0438\u0442\u044c 0-RTT \u043f\u0440\u0438\u0440\u043e\u0441\u0442\u0430 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438. <\/p>\n<p>\u041d\u0430 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c 0-RTT \u043d\u0430 \u0440\u0430\u043d\u043d\u0435\u043c \u044d\u0442\u0430\u043f\u0435 \u0447\u0435\u0440\u0435\u0437 QUIC \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f, \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0430 ssl_fc_has_early \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0441 TCP \u043d\u0430 \u0440\u0430\u043d\u043d\u0435\u043c \u044d\u0442\u0430\u043f\u0435, \u043f\u043e \u044d\u0442\u043e\u043c\u0443 \u0441 QUIC \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 http.<\/p>\n<p>\u0422\u0430\u0431\u043b\u0438\u0446\u0430 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 HTTP-\u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0432 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 TLS 1.3 0-RTT early data \u0438 replay-\u0430\u0442\u0430\u043a<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u041c\u0435\u0442\u043e\u0434<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u041d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435<\/p>\n<\/th>\n<th data-colwidth=\"103\" width=\"103\">\n<p align=\"left\">\u0418\u0437\u043c\u0435\u043d\u044f\u0435\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u0430<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0418\u0434\u0435\u043c\u043f\u043e\u0442\u0435\u043d\u0442\u043d\u044b\u0439?<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0420\u0438\u0441\u043a \u043f\u0440\u0438 0-RTT<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0420\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u044f<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>GET<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u0430<\/p>\n<\/td>\n<td data-colwidth=\"103\" width=\"103\">\n<p align=\"left\">\u274c<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u2705<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041d\u0438\u0437\u043a\u0438\u0439<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0420\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044c<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>HEAD<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u0432 \u0431\u0435\u0437 \u0442\u0435\u043b\u0430<\/p>\n<\/td>\n<td data-colwidth=\"103\" width=\"103\">\n<p align=\"left\">\u274c<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u2705<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041d\u0438\u0437\u043a\u0438\u0439<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0420\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044c<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>OPTIONS<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0423\u0437\u043d\u0430\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438\/\u043c\u0435\u0442\u043e\u0434\u044b<\/p>\n<\/td>\n<td data-colwidth=\"103\" width=\"103\">\n<p align=\"left\">\u274c<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u2705<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041d\u0438\u0437\u043a\u0438\u0439<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0420\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044c<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>TRACE<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u042d\u0445\u043e-\u0437\u0430\u043f\u0440\u043e\u0441 \u0434\u043b\u044f \u0434\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u043a\u0438<\/p>\n<\/td>\n<td data-colwidth=\"103\" width=\"103\">\n<p align=\"left\">\u274c<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u2705<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041d\u0438\u0437\u043a\u0438\u0439 (\u043d\u043e \u0440\u0435\u0434\u043a\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f)<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041c\u043e\u0436\u043d\u043e \u0440\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044c \u0438\u043b\u0438 \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0432\u043e\u0432\u0441\u0435<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>POST<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435\/\u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445<\/p>\n<\/td>\n<td data-colwidth=\"103\" width=\"103\">\n<p align=\"left\">\u2705<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u274c<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0412\u044b\u0441\u043e\u043a\u0438\u0439<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0411\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u0442\u044c<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>PUT<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041f\u043e\u043b\u043d\u0430\u044f \u0437\u0430\u043c\u0435\u043d\u0430 \u0440\u0435\u0441\u0443\u0440\u0441\u0430<\/p>\n<\/td>\n<td data-colwidth=\"103\" width=\"103\">\n<p align=\"left\">\u2705<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u2705*<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0412\u044b\u0441\u043e\u043a\u0438\u0439<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0411\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u0442\u044c<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>PATCH<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0427\u0430\u0441\u0442\u0438\u0447\u043d\u043e\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u0430<\/p>\n<\/td>\n<td data-colwidth=\"103\" width=\"103\">\n<p align=\"left\">\u2705<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u274c<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0412\u044b\u0441\u043e\u043a\u0438\u0439<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0411\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u0442\u044c<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>DELETE<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u0430<\/p>\n<\/td>\n<td data-colwidth=\"103\" width=\"103\">\n<p align=\"left\">\u2705<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u2705*<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0412\u044b\u0441\u043e\u043a\u0438\u0439<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0411\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u0442\u044c<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>CONNECT<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0442\u0443\u043d\u043d\u0435\u043b\u044f (\u043e\u0431\u044b\u0447\u043d\u043e \u0434\u043b\u044f HTTPS-\u043f\u0440\u043e\u043a\u0441\u0438)<\/p>\n<\/td>\n<td data-colwidth=\"103\" width=\"103\">\n<p align=\"left\">\u041c\u043e\u0436\u0435\u0442<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u274c<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0421\u0440\u0435\u0434\u043d\u0438\u0439\/\u0412\u044b\u0441\u043e\u043a\u0438\u0439<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0411\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u0442\u044c<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u044e 0-RTT \u043f\u043e IP \u0438 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u043c \u043c\u0435\u0442\u043e\u0434\u0430\u043c, \u0434\u043b\u044f QUIC \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u044e \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043c \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 HTTP \u0432 TCP IP-\u0430\u0434\u0440\u0435\u0441\u0430 \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u0440\u0430\u043d\u043d\u0435\u043c \u044d\u0442\u0430\u043f\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f, \u043f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<pre><code>frontend https ...   tcp-request connection reject if { ssl_fc_has_early} !{ src -f \/etc\/haproxy\/acl\/ip.list }  ...   http-request deny if { ssl_fc_has_early } !{ method GET HEAD OPTIONS TRACE }  ...  frontend quic ... # \u041e\u0442\u043a\u043b\u043e\u043d\u0438\u043c \u043b\u044e\u0431\u043e\u0439 0-RRT \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u043a\u0440\u043e\u043c\u0435 IP \u0441\u043f\u0438\u0441\u043a\u0430 \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 ALPN H3   http-request deny if { ssl_fc_has_early } { ssl_fc_alpn h3 } !{ src -f \/etc\/haproxy\/acl\/ip.list } ... # \u0412\u0430\u0440\u0438\u0430\u043d\u0442 1, \u043e\u0442\u043a\u043b\u043e\u043d\u0438\u043c \u0441\u0440\u0430\u0437\u0443 \u0432\u0441\u0435 \u043d\u0435 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u0447\u0435\u0440\u0435\u0437 0-RTT   http-request deny if { ssl_fc_has_early } !{ method GET HEAD OPTIONS TRACE }  ... # \u0412\u0430\u0440\u0438\u0430\u043d\u0442 2 \u043c\u044f\u0433\u043a\u043e\u0435 \u043e\u0442\u043a\u043b\u043e\u043d\u0435\u043d\u0438\u0435 \u0447\u0435\u0440\u0435\u0437 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u0435 \u043f\u043e\u043b\u043d\u043e\u0433\u043e handshake \u0434\u043b\u044f \u043d\u0435 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432   http-request wait-for-handshake if { ssl_fc_has_early } !{ method GET HEAD OPTIONS TRACE }   <\/code><\/pre>\n<\/div>\n<\/details>\n<h2>\u0424\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u044f QUIC \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439<\/h2>\n<p>\u0412 \u0441\u0442\u0430\u0442\u044c\u044f\u0445 \u0440\u0430\u043d\u0435\u0435 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 <a href=\"https:\/\/habr.com\/ru\/articles\/904038\/\" rel=\"noopener noreferrer nofollow\">\u0442\u0443\u0442<\/a>) \u044f \u043f\u0438\u0441\u0430\u043b \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432\u0430\u0442\u044c TCP \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u043f\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0443, \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u044f, IP \u0430\u0434\u0440\u0435\u0441\u0430\u043c:<\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 \u0434\u043b\u044f \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0438 \u043f\u043e IP FireHol \u0432 TCP:<\/p>\n<pre><code>tcp-request connection reject if { src -f \/etc\/haproxy\/firehol\/level1.acl } tcp-request connection reject if { src -f \/etc\/haproxy\/firehol\/level2.acl } tcp-request connection reject if { src -f \/etc\/haproxy\/firehol\/level3.acl } tcp-request connection reject if { src -f \/etc\/haproxy\/firehol\/abusers_1d.acl }<\/code><\/pre>\n<p>\u0414\u043b\u044f \u0442\u043e\u0433\u043e \u0447\u0442\u043e \u0431\u044b \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0442\u0430\u043a\u0443\u044e \u0436\u0435 \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u044e \u0432 QUIC \u0441 \u0432\u0435\u0440\u0441\u0438\u0438 HAProxy 3.1 \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438 \u043d\u043e\u0432\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438: <\/p>\n<p><strong>quic-initial reject<\/strong> \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u0435\u043d tcp-request connection reject, \u043e\u0442\u043a\u043b\u043e\u043d\u044f\u0435\u0442 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 QUIC \u0434\u043e \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f TLS \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442 \u043a\u043b\u0438\u0435\u043d\u0442\u0443 <strong>CONNECTION_REFUSED<\/strong> \u0441 \u043a\u043e\u0434\u043e\u043c \u043e\u0448\u0438\u0431\u043a\u0438.<\/p>\n<p><strong>quic-initial dgram-drop<\/strong> \u0440\u0430\u0432\u0435\u043d tcp-request connection silent-drop, \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u0442 \u0432\u0441\u0435 <strong>Initial <\/strong>\u043f\u0430\u043a\u0435\u0442\u044b QUIC  <\/p>\n<pre><code>quic-initial dgram-drop if { src -f \/etc\/haproxy\/firehol\/level1.acl }  stick-table type ip size 10k expire 30s store conn_cur,conn_rate(5s) quic-initial track-sc0 src  quic-initial reject if !{ src -f \/etc\/haproxy\/acl\/whiteip.acl } &amp;&amp; { sc0_conn_cur gt 100 } quic-initial reject if !{ src -f \/etc\/haproxy\/acl\/whiteip.acl } &amp;&amp; { sc0_conn_rate gt 30 } <\/code><\/pre>\n<p><em>quic-initial dgram-drop<\/em>\u00a0\u2014 \u043c\u043e\u043b\u0447\u0430 \u043e\u0442\u0431\u0440\u043e\u0441\u0438\u0442 \u0432\u0441\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0441 IP \u0430\u0434\u0440\u0435\u0441\u043e\u0432 \u0438\u0437 \u0441\u043f\u0438\u0441\u043a\u0430.<\/p>\n<p><em>stick-table<\/em> \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0430\u043d\u043e\u043d\u0438\u043c\u043d\u0443\u044e \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f IP \u0438 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439.<\/p>\n<p><em>{ src -f \/etc\/haproxy\/acl\/whiteip.acl }<\/em> \u2014 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u0431\u0435\u043b\u044b\u0445 IP, \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439, \u0435\u0441\u043b\u0438 \u043d\u0435\u0442 \u0441\u043f\u0438\u0441\u043a\u0430, \u0443\u0434\u0430\u043b\u0438\u0442\u0435 \u0435\u0433\u043e, \u0438\u043d\u0430\u0447\u0435 HA \u043d\u0435 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c\u0441\u044f.<\/p>\n<p><em>{ sc0_conn_cur gt 100 } \u2014 <\/em>\u0441\u0447\u0435\u0442\u0447\u0438\u043a \u043e\u0431\u0449\u0435\u0433\u043e \u043a\u043e\u043b-\u0432\u0430 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439 \u0441 \u043e\u0434\u043d\u043e\u0433\u043e IP.<\/p>\n<p><em>{ sc0_conn_rate gt 30 }<\/em> \u2014 \u0441\u0447\u0435\u0442\u0447\u0438\u043a \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439(rate limit) \u0441 \u043e\u0434\u043d\u043e\u0433\u043e IP, \u043b\u0438\u043c\u0438\u0442 30 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439 \u0437\u0430 5\u0441\u0435\u043a.<\/p>\n<p>\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 ! \u2014 \u0438\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u0443\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435.<\/p>\n<p>\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 <em>&amp;&amp; <\/em>\u0441\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 IP \u043d\u0435 \u0438\u0437 \u0441\u043f\u0438\u0441\u043a\u0430 \u0438 \u043f\u0440\u0435\u0432\u044b\u0448\u0435\u043d\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0430, \u0435\u0441\u043b\u0438 IP \u0431\u0443\u0434\u0435\u0442 \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u0442\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u043d\u0435 \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442<\/p>\n<p>\u0414\u043b\u044f \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u043b\u0438\u043c\u0438\u0442\u043e\u0432 \u0434\u043b\u044f IP \u0438\u0437 \u0441\u043f\u0438\u0441\u043a\u0430 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u0430\u043a\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440:<\/p>\n<pre><code>quic-initial reject if { src -f \/etc\/haproxy\/acl\/whiteip.acl } &amp;&amp; { sc0_conn_cur gt 200 } quic-initial reject if { src -f \/etc\/haproxy\/acl\/whiteip.acl } &amp;&amp; { sc0_conn_rate gt 100 }<\/code><\/pre>\n<p>\u041d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u043b\u0438 \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0438 \u043e\u0431\u0449\u0435\u0433\u043e \u043a\u043e\u043b-\u0432\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439 \u0434\u043e 200, \u0438 rate limit \u0434\u043e 100.<\/p>\n<p>\u0412\u0441\u0435 \u0432\u044b\u0448\u0435 \u0441\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0438 \u0432 TCP, \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c <code>tcp-request connection reject<\/code><\/p>\n<p>\u041a\u0430\u043a \u0438\u0442\u043e\u0433 conn_cur \u0437\u0430\u0449\u0438\u0449\u0430\u0435\u0442 \u043e\u0442 \u0432\u0438\u0441\u044f\u0449\u0438\u0445 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439 \u0441 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e\u043c \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0445 \u0441\u0435\u0441\u0441\u0438\u0439 \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 DDoS, \u0430 conn_rate \u0437\u0430\u0449\u0438\u0449\u0430\u0435\u0442 \u043e\u0442 \u0432\u0441\u043f\u043b\u0435\u0441\u043a\u043e\u0432 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439 \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0444\u043b\u0443\u0434, \u043f\u0435\u0440\u0435\u0431\u043e\u0440, \u043b\u0438\u043c\u0438\u0442\u044b \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043f\u043e\u0434 \u0441\u0432\u043e\u044e \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0443.<\/p>\n<h2>\u0422\u044e\u043d\u0438\u043d\u0433 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0438 HA \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 QUIC (\u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438)<\/h2>\n<p>\u041f\u0435\u0440\u0432\u043e\u0435 \u0447\u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c \u043b\u0438\u043c\u0438\u0442\u044b UDP \u0432 \u044f\u0434\u0440\u0435:<\/p>\n<p><code>nano \/etc\/sysctl.conf<\/code><\/p>\n<p>\u0412 \u043a\u043e\u043d\u0435\u0446 <em>sysctl.conf<\/em> \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f:<\/p>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u043c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u0431\u0443\u0444\u0435\u0440 \u0434\u043e 208\u041a\u0411 \u0434\u043e\u0431\u0430\u0432\u0438\u0432:<\/p>\n<p><code>net.core.rmem_default = 212992<\/code><br \/><code>net.core.wmem_default = 212992<\/code><\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u043c \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0434\u043e 4\u041c\u0411:<\/p>\n<p><code>net.core.rmem_max=4194304<\/code><br \/><code>net.core.wmem_max=4194304<\/code><\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c \u043d\u0438\u0436\u043d\u0438\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0431\u0443\u0444\u0435\u0440\u0430 \u0434\u043e 4\u041a\u0411 (\u0447\u0442\u043e\u0431\u044b \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0435 \u043f\u0430\u043a\u0435\u0442\u044b \u043d\u0435 \u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u043d\u043e\u0433\u043e \u043f\u0430\u043c\u044f\u0442\u0438):<\/p>\n<p><code>net.ipv4.udp_rmem_min=4096<\/code><br \/><code>net.ipv4.udp_wmem_min=4096<\/code><\/p>\n<p>\u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432 \u0435\u0435 \u0441 100 \u0434\u043e 4096:<\/p>\n<p><code>net.core.netdev_max_backlog = 4096<\/code><\/p>\n<p>\u0423\u0432\u0435\u043b\u0438\u0447\u0438\u043c \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b-\u0432\u043e \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u043d\u0430 \u0432\u0445\u043e\u0434\u0435:<\/p>\n<p><code>net.ipv4.netfilter.ip_conntrack_max = 262144<\/code><\/p>\n<p>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0437\u043a\u043e\u0439 TCP \u2014 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c BBR:<\/p>\n<p><code>net.ipv4.tcp_congestion_control = bbr<\/code><\/p>\n<p>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0438 \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c\u044b \u0434\u043b\u044f TCP \u0431\u0443\u0444\u0435\u0440\u043e\u0432 \u043f\u0440\u0438\u0451\u043c\u0430 \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 (\u0432 \u0431\u0430\u0439\u0442\u0430\u0445): <\/p>\n<p><code>net.ipv4.tcp_rmem = 4096 87380 4194304<\/code><br \/><code>net.ipv4.tcp_wmem = 4096 65536 4194304<\/code><\/p>\n<p>\u0423\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0435 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u043e\u0436\u0438\u0434\u0430\u044e\u0449\u0438\u0445 \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439: <\/p>\n<p><code>net.core.somaxconn = 65535<\/code><\/p>\n<p>\u0412\u043a\u043b\u044e\u0447\u0438\u043c \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u043e\u043a\u0435\u0442\u043e\u0432 \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 TIME-WAIT \u0434\u043b\u044f \u043d\u043e\u0432\u044b\u0445 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439: <\/p>\n<p><code>net.ipv4.tcp_tw_reuse = 1<\/code><\/p>\n<p>\u0423\u043c\u0435\u043d\u044c\u0448\u0438\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u044f \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f FIN \u0434\u043b\u044f \u0431\u043e\u043b\u0435\u0435 \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432:<\/p>\n<p><code>net.ipv4.tcp_fin_timeout = 15<\/code><\/p>\n<p>\u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e HA:<\/p>\n<p>\u0412 \u043a\u043e\u043d\u0435\u0446 \u0441\u0442\u0440\u043e\u043a <em>bind quic4@<\/em> \u0438 <em>bind quic6@<\/em> \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 BBR \u0434\u043b\u044f QUIC:<\/p>\n<pre><code>quic-cc-algo bbr # \u0412\u043a\u043b\u044e\u0447\u0438\u043c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c BBR \u0434\u043b\u044f QUIC \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439.<\/code><\/pre>\n<p>\u0422\u0430\u043a \u0436\u0435 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0432 \u043a\u043e\u043d\u0435\u0446 \u0441\u0435\u043a\u0446\u0438\u0438 global \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c (\u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c \u0441 \u043e\u0441\u0442\u043e\u0440\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e):<\/p>\n<pre><code>tune.ssl.cachesize 200000 # \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c \u0440\u0430\u0437\u043c\u0435\u0440 \u043a\u044d\u0448\u0430 SSL \u0441\u0435\u0441\u0441\u0438\u0439 tune.bufsize 16384 # \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c \u0431\u0443\u0444\u0435\u0440 \u0432 16\u041a\u0411 \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u0430\u043a\u0435\u0442\u0430 tune.buffers.limit 65536 # \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c  \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u043c\u044b\u0445 \u0431\u0443\u0444\u0435\u0440\u043e\u0432.   tune.quic.frontend.max-tx-mem 64m # \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u043f\u0430\u043c\u044f\u0442\u0438 (64\u041c\u0411) \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u043c\u044b\u0439 \u043f\u043e\u0434 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0443 QUIC. maxconn 50000 # \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439.<\/code><\/pre>\n<p>\u041f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u043d\u0444\u0438\u0433 \u0434\u043b\u044f sysctl.conf<\/p>\n<pre><code>net.core.rmem_default = 212992 net.core.wmem_default = 212992 net.core.rmem_max=4194304 net.core.wmem_max=4194304 net.ipv4.udp_rmem_min=4096 net.ipv4.udp_wmem_min=4096 net.core.netdev_max_backlog = 4096 net.ipv4.netfilter.ip_conntrack_max = 262144 net.ipv4.tcp_congestion_control = bbr net.ipv4.tcp_rmem = 4096 87380 4194304 net.ipv4.tcp_wmem = 4096 65536 4194304 net.core.somaxconn = 65535 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_fin_timeout = 15<\/code><\/pre>\n<h2>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h2>\n<p>\u041d\u0430 \u044d\u0442\u043e\u043c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043f\u0440\u043e\u043a\u0441\u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0437\u0430\u043a\u043e\u043d\u0447\u0435\u043d\u0430, \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0440\u0430\u0431\u043e\u0447\u0438\u0439 QUIC \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b, HAProxy LTS \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043d\u0435\u0442 \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f\u0445 \u0438 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u0439 OpenSSL 3.5 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438.<\/p>\n<p>\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 LTS \u0440\u0435\u043b\u0438\u0437 Ubuntu \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0438 HA 3.2 \u0438 OpenSSL 3.5+quic \u0438 \u0442\u043e\u0433\u0434\u0430 QUIC \u0432\u043e\u0439\u0434\u0435\u0442 \u0432 \u043c\u0430\u0441\u0441\u044b, \u0443 \u043c\u0435\u043d\u044f \u0442\u0430\u043a\u043e\u0435 \u0432\u0438\u0434\u0435\u043d\u0438\u0435.<\/p>\n<details class=\"spoiler\">\n<summary>\u0420\u0435\u043c\u0430\u0440\u043a\u0430 \u0434\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 xray<\/summary>\n<div class=\"spoiler__content\">\n<p>XHTTP \u0441\u043f\u043e\u0441\u043e\u0431\u0435\u043d \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0447\u0435\u0440\u0435\u0437 QUIC, \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432 \u0441\u0435\u043a\u0446\u0438\u044e QUIC \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u0443\u0442\u044c \u043a XHTTP, \u0430 \u043d\u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u0435 \u0432\u044b\u0431\u0440\u0430\u0442\u044c h3,h2 \u0432 alpn \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f.<\/p>\n<p>\u041d\u0435 \u043c\u043e\u0433\u0443 \u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u0430\u043a \u0420\u041a\u041d \u043e\u0442\u0440\u0435\u0430\u0433\u0438\u0440\u0443\u0435\u0442 \u043d\u0430 \u0442\u0440\u0430\u0444\u0438\u043a \u043f\u043e QUIC \u0438 \u0437\u0430\u0431\u0430\u043d\u044f\u0442 \u043b\u0438 \u0432\u0430\u0448 \u0441\u0435\u0440\u0432\u0435\u0440\/\u0434\u043e\u043c\u0435\u043d, \u0432\u043d\u0443\u0442\u0440\u0438 \u0441\u0442\u0440\u0430\u043d\u044b \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e, \u0435\u0441\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440, \u043e\u0442 \u0445\u043e\u0441\u0442\u0435\u0440\u0430 QUIC \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0432 \u0420\u0424 \u0441\u043f\u043e\u043a\u043e\u0439\u043d\u043e \u0434\u043e\u0445\u043e\u0434\u0438\u0442 \u0434\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0437\u0430 \u0431\u0443\u0433\u0440\u043e\u043c, \u043e\u0434\u043d\u0430\u043a\u043e \u0432\u0441\u0435 \u0437\u0430\u0432\u0438\u0441\u0435\u0442\u044c \u0431\u0443\u0434\u0435\u0442 \u043e\u0442 \u0445\u043e\u0441\u0442\u0435\u0440\u0430. \u041f\u043e \u044d\u0442\u043e\u043c\u0443 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0441 \u043a\u043b\u0438\u0435\u043d\u0442 XHTTP H3&gt;\u0441\u0435\u0440\u0432\u0435\u0440 xray \u0420\u0424&gt;\u0432\u043e\u0441\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 XHTTP H3&gt; \u0441\u0435\u0440\u0432\u0435\u0440 xray \u0437\u0430 \u0431\u0443\u0433\u0440\u043e\u043c\u00a0\u2014 \u043f\u043e\u043a\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u0434\u043b\u044f QUIC \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0431\u043e\u043b\u0435\u0435 \u043c\u043e\u0449\u043d\u043e\u0435 \u0436\u0435\u043b\u0435\u0437\u043e, \u043e\u0434\u043d\u0430\u043a\u043e \u0438 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0448\u0435 \u0438 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u043d\u0438\u0436\u0435. \u0414\u043b\u044f 100\u2013200\u041c\u0431\u0438\u0442 \u043e\u0442 \u0445\u043e\u0441\u0442\u0435\u0440\u0430 \u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0441 1 \u044f\u0434\u0440\u043e\u043c, QUIC \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u0435\u043d, TCP \u0432\u044b\u0434\u0430\u0435\u0442 \u0431\u043e\u043b\u0435\u0435 \u0432\u044b\u0441\u043e\u043a\u0438\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438.<\/p>\n<p>\u0414\u0430\u043d\u043d\u0430\u044f \u0440\u0435\u043c\u0430\u0440\u043a\u0430 \u0434\u043b\u044f \u0442\u0435\u0445 \u043a\u0442\u043e \u043e\u0431\u0445\u043e\u0434\u0438\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u0440\u0443\u0431\u0435\u0436\u043d\u044b\u0435 \u0441\u0430\u043d\u043a\u0446\u0438\u0438, \u043e\u0431\u0445\u043e\u0434 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043e\u043a \u0420\u041a\u041d \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0432\u043b\u0435\u0447\u044c \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u0432\u043f\u043b\u043e\u0442\u044c \u0434\u043e \u0443\u0433\u043e\u043b\u043e\u0432\u043d\u043e\u0439.<\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 \u043a\u0430\u043a \u0437\u0430\u0432\u0435\u0441\u0442\u0438 XHTTP: <\/p>\n<pre><code>frontend f_https  bind [::]:443 v4v6 strict-sni ssl crt \/etc\/haproxy\/certs\/ alpn h2,http\/1.1 ... http-after-response add-header alt-svc 'h3=\":443\"; ma=86400, h3-29=\":443\"; ma=86400, h3-28=\":443\"; ma=86400, h3-27=\":443\"; ma=86400'  ... use_backend http_site1 if { ssl_fc_sni -i example.ru } use_backend xray_xhttp if { req.hdr(Host) -i example.ru } { path_beg -i \/yoursecretpath }  ...  frontend f_quic bind quic4@:443 ssl crt \/etc\/haproxy\/certs\/ alpn h3 strict-sni allow-0rtt ssl-min-ver TLSv1.3  bind quic6@:443 ssl crt \/etc\/haproxy\/certs\/ alpn h3 strict-sni allow-0rtt ssl-min-ver TLSv1.3  ... http-request wait-for-handshake if { ssl_fc_has_early } ... use_backend http_site1 if { ssl_fc_sni -i example.ru }  use_backend xray_xhttp if { req.hdr(Host) -i example.ru } { path_beg -i \/yoursecretpath }  ...  backend xray_xhttp # \u0447\u0435\u0440\u0435\u0437 UNIX Socket    mode http    option forwardfor if-none    http-request add-header X-Real-Ip %[src]    http-request set-header Host %[req.hdr(Host)]    http-request set-header X-Forwarded-For %[src]    http-request set-header X-Forwarded-Host %[req.hdr(host)]    retry-on conn-failure empty-response response-timeout    server xhttp1 \/xui\/xhttp.sock check # \u0418\u043b\u0438 backend xray_xhttp # \u0447\u0435\u0440\u0435\u0437 \u043f\u043e\u0440\u0442    mode http    option forwardfor if-none    http-request add-header X-Real-Ip %[src]    http-request set-header Host %[req.hdr(Host)]    http-request set-header X-Forwarded-For %[src]    http-request set-header X-Forwarded-Host %[req.hdr(host)]    server xhttp1 127.0.0.1:3333 send-proxy check ...<\/code><\/pre>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c send-proxy \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0432 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 XHTTP\/gRPC\/WS\/HttpUpgrade, \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0435 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e IP \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u0438 \u0434\u043e\u043c\u0435\u043d\u0430\/\u0445\u043e\u0441\u0442\u0430.<\/p>\n<p>\u041f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0433\u043e \u043d\u0430\u0431\u043e\u0440\u0430 \u0448\u0438\u0444\u0440\u043e\u0432 \u043a\u0430\u043a \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043d\u0438\u0436\u0435, \u043e\u0442\u043f\u0435\u0447\u0430\u0442\u043e\u043a JA3 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0445\u043e\u0436 \u043d\u0430 Chrome 80+ \u043f\u043e \u044d\u0442\u043e\u043c\u0443 \u0432 \u043a\u043b\u0438\u0435\u043d\u0442\u0430\u0445 uTLS \u0432\u044b\u0431\u0438\u0440\u0430\u0442\u044c \u043d\u0443\u0436\u043d\u043e Chrome, \u0435\u0441\u043b\u0438 \u0440\u0430\u0441\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c no-tls-ticket \u0442\u043e \u043e\u0442\u043f\u0435\u0447\u0430\u0442\u043e\u043a \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0445\u043e\u0436 \u043d\u0430 Chrome. <\/p>\n<p><a href=\"https:\/\/ssl-config.mozilla.org\/#server=haproxy&amp;version=3.2&amp;config=intermediate&amp;openssl=3.5.1&amp;guideline=5.7\" rel=\"noopener noreferrer nofollow\">\u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e<\/a> <br \/>\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f:<\/p>\n<pre><code>global     # intermediate configuration     ssl-default-bind-curves X25519:prime256v1:secp384r1     ssl-default-bind-ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305     ssl-default-bind-ciphersuites TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256     ssl-default-bind-options prefer-client-ciphers ssl-min-ver TLSv1.2 #no-tls-tickets      ssl-default-server-curves X25519:prime256v1:secp384r1     ssl-default-server-ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305     ssl-default-server-ciphersuites TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256     ssl-default-server-options ssl-min-ver TLSv1.2 #no-tls-tickets      # curl https:\/\/ssl-config.mozilla.org\/ffdhe2048.txt &gt; \/path\/to\/dhparam     ssl-dh-param-file \/path\/to\/dhparam<\/code><\/pre>\n<p>ssl-dh-param-file \u0432\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0438\u043b\u0438 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u0438\u043b\u0438 \u0441 \u0441\u0430\u0439\u0442\u0430 mozilla, \u0438\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <code>tune.ssl.default-dh-param 2048<\/code><\/p>\n<\/div>\n<\/details>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/935888\/\"> https:\/\/habr.com\/ru\/articles\/935888\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0412 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043f\u043e\u043a\u0430\u0436\u0443 \u043a\u0430\u043a \u0441\u043e\u0431\u0440\u0430\u0442\u044c HAProxy \u0434\u043b\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u00ab\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0433\u043e\u00bb QUIC \u043d\u0435\u00a0\u0432\u00a0\u0440\u0435\u0436\u0438\u043c\u0435 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u0438, \u0441\u043e \u0441\u0431\u043e\u0440\u043a\u043e\u0439 OpenSSL 3.5\u00a0\u0441\u00a0\u043f\u043e\u0434\u0434\u0435 \u0440\u0436\u043a\u043e\u0439 QUIC \u0432 \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432\u0430\u0445 \u0441 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u043c OpenSSL 3.0, \u0441 \u0432\u044b\u0445\u043e\u0434\u043e\u043c Debian 13 \u0437\u0430\u0434\u0430\u0447\u0430 \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u043b\u0430\u0441\u044c, \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e HAProxy, \u0432 \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432 \u0443\u0436\u0435 \u0432\u0441\u0442\u0440\u043e\u0435\u043d OpenSSL 3.5 \u0441 \u043f\u043e\u043b\u043d\u043e\u0439 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 QUIC \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u0435\u0440\u0432\u0435\u0440\u0430. \u0414\u0430\u043b\u0435\u0435 \u0431\u0443\u0434\u0443 \u0441\u043e\u043a\u0440\u0430\u0449\u0430\u0442\u044c HAProxy \u0434\u043e HA.<\/p>\n<p>Disclaimer\u00a0\u2014 \u0432\u0441\u0435 \u043d\u0438\u0436\u0435 \u0441\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0435 \u043f\u0440\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443 \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430, \u0434\u043b\u044f \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u0435\u043d\u0430, \u043b\u0443\u0447\u0448\u0435 \u0441\u043e\u0431\u0440\u0430\u0442\u044c deb \u043f\u0430\u043a\u0435\u0442. <\/p>\n<h2>\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u043a \u0441\u0431\u043e\u0440\u043a\u0435<\/h2>\n<p>\u0414\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u043d\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0431\u0430\u0437\u043e\u0432\u044b\u0435 \u043f\u0430\u043a\u0435\u0442\u044b, \u0442\u0430\u043a \u0436\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c HA \u0438\u0437 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f \u0434\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u0432 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c:<\/p>\n<p><code>apt install -y build-essential libpcre2-dev zlib1g-dev libsystemd-dev liblua5.3-dev libssl-dev curl ca-certificates haproxy<\/code><\/p>\n<p>\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u043c \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e \u0434\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u0438 \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u0432 \u043d\u0435\u0435:<\/p>\n<p><code>mkdir -p ~\/build\/openssl &amp;&amp; cd ~\/build<\/code><\/p>\n<h2>\u0421\u0431\u043e\u0440\u043a\u0430 OpenSSL 3.5+QUIC<\/h2>\n<p>\u041d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f LTS \u0432\u0435\u0440\u0441\u0438\u044f OpenSSL 3.5.1 (\u043e\u0431\u043d\u043e\u0432\u0438\u043b\u0441\u044f \u043d\u0430 OpenSSL 3.5.2)<br \/>\u041d\u043e\u0432\u044b\u0435 \u0440\u0435\u043b\u0438\u0437\u044b \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c <a href=\"https:\/\/github.com\/openssl\/openssl\/releases\/\" rel=\"noopener noreferrer nofollow\">\u0442\u0443\u0442<\/a>. \u0417\u0430\u0433\u0440\u0443\u0437\u0438\u043c \u0435\u0435:<\/p>\n<p><code>curl -LO https:\/\/github.com\/openssl\/openssl\/releases\/download\/openssl-3.5.1\/openssl-3.5.1.tar.gz<\/code><\/p>\n<p>\u0420\u0430\u0441\u043f\u0430\u043a\u0443\u0435\u043c \u0438 \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e: <\/p>\n<p><code>tar xvf openssl-3.5.1.tar.gz &amp;&amp; cd openssl-3.5.1<\/code><\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a OpenSSL:<\/p>\n<p><code>mkdir \/opt\/openssl-custom<\/code><\/p>\n<p>\u041d\u0430\u0441\u0442\u0440\u043e\u0438\u043c \u0441\u0431\u043e\u0440\u043a\u0443 \u0434\u043b\u044f \u043f\u043e\u043b\u043d\u043e\u0439 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 QUIC \u0438 \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u043c OpenSSL \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u043e\u0442 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u0434\u043e\u0431\u0430\u0432\u0438\u0432 \u0432\u0435\u0440\u0441\u0438\u044e \u043a \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438: <\/p>\n<p><code>.\/Configure enable-quic linux-x86_64 --prefix=\/opt\/openssl-custom\/openssl-3.5.1<\/code><\/p>\n<p>\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u0441\u0431\u043e\u0440\u043a\u0443:<\/p>\n<p><code>make -j\"$(nproc)\"<\/code><\/p>\n<p>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c \u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e OpenSSL:<\/p>\n<p><code>make install_sw<\/code><\/p>\n<p>\u0414\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0441\u0438\u043c\u043b\u0438\u043d\u043a \u043d\u0430 openssl-3.5.1, \u0432 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u0434\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 HA \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043f\u0435\u0440\u0435\u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u0438\u043c\u043b\u0438\u043d\u043a \u043d\u0430 \u043d\u043e\u0432\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e OpenSSL \u043f\u0440\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0438:<\/p>\n<p><code>ln -sfn \/opt\/openssl-custom\/openssl-3.5.1 \/opt\/openssl-custom\/openssl<\/code><\/p>\n<p>\u041e\u0447\u0438\u0441\u0442\u0438\u043c build \u043e\u0442 \u043e\u0441\u0442\u0430\u0442\u043a\u043e\u0432 OpenSSL<\/p>\n<p><code>rm -rf ~\/build\/openssl*<\/code><\/p>\n<h2>\u0421\u0431\u043e\u0440\u043a\u0430 HAProxy 3.2<\/h2>\n<p>\u041d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f LTS \u0432\u0435\u0440\u0441\u0438\u044f 3.2.3<br \/>\u041d\u043e\u0432\u044b\u0435 \u0440\u0435\u043b\u0438\u0437\u044b \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c <a href=\"https:\/\/www.haproxy.org\" rel=\"noopener noreferrer nofollow\">\u0442\u0443\u0442<\/a>.<\/p>\n<p>\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u043c \u0440\u0435\u043b\u0438\u0437:<\/p>\n<p><code>curl -LO https:\/\/www.haproxy.org\/download\/3.2\/src\/haproxy-3.2.3.tar.gz<\/code><\/p>\n<p>\u0420\u0430\u0441\u043f\u0430\u043a\u0443\u0435\u043c \u0438 \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e:<\/p>\n<p><code>tar xvf haproxy-3.2.3.tar.gz &amp;&amp; cd haproxy-3.2.3<\/code><\/p>\n<p>\u0421\u043e\u0431\u0435\u0440\u0435\u043c \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 OpenSSL, \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043c\u043e\u0434\u0443\u043b\u044c Prometheus:<\/p>\n<pre><code>make -j\"$(nproc)\" TARGET=linux-glibc \\  USE_OPENSSL=1 USE_QUIC=1 USE_PROMEX=1 \\  SSL_INC=\/opt\/openssl-custom\/openssl\/include SSL_LIB=\/opt\/openssl-custom\/openssl\/lib64 \\  LDFLAGS=\"-Wl,-rpath=\/opt\/openssl-custom\/openssl\/lib64\" \\  USE_PCRE2=1 USE_ZLIB=1 \\  USE_LUA=1 LUA_INC=\/usr\/include\/lua5.3 LUA_LIB=\/usr\/lib \\  USE_SYSTEMD=1<\/code><\/pre>\n<p>\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c Debian 13 \u0438 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0445 \u0441 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 QUIC \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c OpenSSL \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f, \u0432\u0441\u044f \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435, \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0434\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0438\u043d\u0430\u0447\u0435:<\/p>\n<pre><code>make -j\"$(nproc)\" TARGET=linux-glibc \\  USE_OPENSSL=1 USE_QUIC=1 USE_PROMEX=1 \\  USE_PCRE2=1 USE_ZLIB=1 \\  USE_LUA=1 LUA_INC=\/usr\/include\/lua5.3 LUA_LIB=\/usr\/lib \\  USE_SYSTEMD=1<\/code><\/pre>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u0441\u043e\u0431\u0440\u0430\u043d\u043d\u044b\u0439  HA:<\/p>\n<p>\u0412\u044b\u043f\u043e\u043b\u043d\u0438\u043c <code>.\/haproxy -vv<\/code>, \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u043d\u0430 +QUIC -QUIC_OPENSSL_COMPAT \u0438 \u0432\u0435\u0440\u0441\u0438\u044e OpenSSL<\/p>\n<p>\u0414\u0430\u043b\u0435\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043c:<\/p>\n<p><code>ldd .\/haproxy | grep ssl<\/code><\/p>\n<p>\u0412\u044b\u0432\u043e\u0434 \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u0441\u044b\u043b\u0430\u0442\u044c\u0441\u044f \u043d\u0430 openssl-custom.<\/p>\n<p>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e HA:<\/p>\n<p>\u041e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c \u0441\u0435\u0440\u0432\u0438\u0441:<\/p>\n<p><code>systemctl stop haproxy<\/code><\/p>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u043a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0444\u0430\u0439\u043b:<\/p>\n<p><code>cp \/usr\/sbin\/haproxy \/usr\/sbin\/haproxy.repo<\/code><\/p>\n<p>\u041f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043c \u0437\u0430\u043c\u0435\u043d\u0443:<\/p>\n<p><code>cp haproxy \/usr\/sbin\/haproxy<\/code><\/p>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0434\u043b\u044f \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432\u043e\u0432 \u0431\u0435\u0437 \u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 QUIC:<\/p>\n<p><code>ldd \/usr\/sbin\/haproxy | grep ssl<\/code><br \/><code>ldd \/usr\/sbin\/haproxy | grep crypto<\/code><\/p>\n<p>\u0415\u0441\u043b\u0438 \u0441\u0441\u044b\u043b\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \/opt\/openssl-custom\/openssl\/ \u0437\u043d\u0430\u0447\u0438\u0442 \u0432\u0441\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e.<\/p>\n<p>\u041e\u0447\u0438\u0441\u0442\u0438\u043c build \u043e\u0442 haproxy<\/p>\n<p><code>rm -rf ~\/build\/haproxy*<\/code><\/p>\n<details class=\"spoiler\">\n<summary>\u0412\u044b\u0432\u043e\u0434 \u043a\u043e\u043c\u0430\u043d\u0434<\/summary>\n<div class=\"spoiler__content\">\n<p># ldd \/usr\/sbin\/haproxy | grep ssl<br \/> <a href=\"http:\/\/libssl.so\" rel=\"noopener noreferrer nofollow\">libssl.so<\/a>.3 =&gt; \/opt\/openssl-custom\/openssl\/lib64\/<a href=\"http:\/\/libssl.so\" rel=\"noopener noreferrer nofollow\">libssl.so<\/a>.3 (0x00007dd8efcf0000)<br \/> <a href=\"http:\/\/libcrypto.so\" rel=\"noopener noreferrer nofollow\">libcrypto.so<\/a>.3 =&gt; \/opt\/openssl-custom\/openssl\/lib64\/<a href=\"http:\/\/libcrypto.so\" rel=\"noopener noreferrer nofollow\">libcrypto.so<\/a>.3 (0x00007dd8ef600000)<br \/># ldd \/usr\/sbin\/haproxy | grep crypto<br \/> <a href=\"http:\/\/libcrypto.so\" rel=\"noopener noreferrer nofollow\">libcrypto.so<\/a>.3 =&gt; \/opt\/openssl-custom\/openssl\/lib64\/<a href=\"http:\/\/libcrypto.so\" rel=\"noopener noreferrer nofollow\">libcrypto.so<\/a>.3 (0x000072e226e00000)<\/p>\n<\/div>\n<\/details>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u0432\u0435\u0440\u0441\u0438\u044e: <code>haproxy -vv<\/code><\/p>\n<p>\u0412\u044b\u0432\u043e\u0434 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043f\u043e\u0445\u043e\u0436 \u043d\u0430 \u0442\u0430\u043a\u043e\u0439(\u0432\u044b\u0432\u043e\u0434 \u043d\u0435 \u043f\u043e\u043b\u043d\u044b\u0439):<\/p>\n<pre><code>HAProxy version 3.2.3-1844da7 2025\/07\/09 - https:\/\/haproxy.org\/ Status: long-term supported branch - will stop receiving fixes around Q2 2030. Known bugs: http:\/\/www.haproxy.org\/bugs\/bugs-3.2.3.html Build options :    OPTIONS = USE_OPENSSL=1 USE_LUA=1 USE_ZLIB=1 USE_QUIC=1 USE_PROMEX=1 USE_PCRE2=1  Feature list : +OPENSSL +PROMEX +QUIC -QUIC_OPENSSL_COMPAT   Built with multi-threading support (MAX_TGROUPS=32, MAX_THREADS=1024, default=6). Built with SSL library version : OpenSSL 3.5.1 1 Jul 2025 Running on SSL library version : OpenSSL 3.5.1 1 Jul 2025 QUIC: connection socket-owner mode support : yes QUIC: GSO emission support : yes  Available multiplexer protocols :        quic : mode=HTTP  side=FE     mux=QUIC  flags=HTX|NO_UPG|FRAMED<\/code><\/pre>\n<p>\u0417\u0434\u0435\u0441\u044c \u043d\u0430\u0441 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0442 \u0444\u043b\u0430\u0433\u0438: USE_QUIC=1 +OPENSSL +QUIC -QUIC_OPENSSL_COMPAT<br \/>SSL library version OpenSSL 3.5.1, <\/p>\n<p>QUIC: connection socket-owner mode support : yes<br \/>QUIC: GSO emission support : yes <br \/>Available multiplexer protocols:<\/p>\n<p>quic : mode=HTTP  side=FE     mux=QUIC  flags=HTX|NO_UPG|FRAMED<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u0441\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0435 \u0444\u043b\u0430\u0433\u0438 \u043a\u0430\u043a \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0437\u043d\u0430\u0447\u0438\u0442 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043f\u043e\u043b\u043d\u0430\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 QUIC.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u0448\u0430\u0431\u043b\u043e\u043d \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438, \u043d\u0430 \u043f\u043e\u0440\u0442\u0443 8080 \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0441\u0435\u0440\u0432\u0438\u0441 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438:<\/p>\n<pre><code>global    log \/dev\/log    local0    log \/dev\/log    local1 notice    chroot \/var\/lib\/haproxy    stats socket \/var\/run\/haproxy\/admin.sock level admin mode 660    stats timeout 30s    user    haproxy    group   haproxy    daemon     # \u0423\u043b\u0443\u0447\u0448\u0435\u043d\u043d\u0430\u044f \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u044c \u0438 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u044c \u0441\u043e \u0441\u0442\u0430\u0440\u044b\u043c\u0438 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430\u043c\u0438.    ssl-default-bind-curves X25519:prime256v1:secp384r1    ssl-default-bind-ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305    ssl-default-bind-ciphersuites TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256    ssl-default-bind-options prefer-client-ciphers ssl-min-ver TLSv1.2 #no-tls-tickets     ssl-default-server-ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305    ssl-default-server-ciphersuites TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256    ssl-default-server-options ssl-min-ver TLSv1.2 #no-tls-tickets defaults    log global    mode http    option httplog    option dontlognull    timeout connect 40s    timeout client  1m    timeout server  1m    timeout tunnel 1h    timeout http-request 30s frontend stats    bind *:8080    mode http    stats enable    stats uri \/    stats refresh 10s    stats show-version<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439:<\/p>\n<p><code>systemctl start haproxy<\/code><\/p>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u0437\u0430\u043f\u0443\u0441\u043a:<\/p>\n<p><code>systemctl status haproxy<\/code><\/p>\n<h2>\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u043c frontend \u043a \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 QUIC<\/h2>\n<p>\u0423 \u043c\u0435\u043d\u044f \u0435\u0441\u0442\u044c \u0442\u0430\u043a\u043e\u0439 frontend:<\/p>\n<pre><code>frontend http     bind [::]:80 v4v6     mode http     http-request redirect scheme https code 301 unless { ssl_fc } frontend https     bind [::]:443 v4v6 ssl crt \/etc\/haproxy\/certs\/ alpn h2,http\/1.1 strict-sni     http-request reject if { req.hdr(user-agent) -m sub evil }     http-request deny if { path -m sub \/. }     http-response set-header Strict-Transport-Security \"max-age=16000000; includeSubDomains;\"       use_backend http_site1 if { ssl_fc_sni -i example.ru }<\/code><\/pre>\n<p>\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043a \u043d\u0435\u043c\u0443 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c QUIC, \u0435\u0441\u0442\u044c \u0434\u0432\u0430 \u043f\u0443\u0442\u0438, \u0432\u044b\u043d\u0435\u0441\u0442\u0438 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 frontend \u043b\u0438\u0431\u043e \u0432\u043d\u0435\u0441\u0442\u0438 \u0432 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 https frontend.<\/p>\n<p>\u041d\u0438\u0436\u0435 \u043f\u0440\u0438\u043c\u0435\u0440 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0432\u044b\u043d\u0435\u0441\u0435\u043d\u043d\u043e\u0433\u043e frontend<\/p>\n<pre><code>frontend f_quic     bind quic4@:443 ssl crt \/etc\/haproxy\/certs\/ alpn h3 strict-sni ssl-min-ver TLSv1.3 allow-0rtt     bind quic6@:443 ssl crt \/etc\/haproxy\/certs\/ alpn h3 strict-sni ssl-min-ver TLSv1.3 allow-0rtt      http-request return status 200 content-type text\/plain lf-string \"Status 200 OK! Your IP %[src].\" if { path \/quic } { ssl_fc_alpn -i h3 }      use_backend http_site1 if { ssl_fc_sni -i example.ru }  <\/code><\/pre>\n<p><em>quic4@:443<\/em> \u0438 <em>quic6@:443<\/em> \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043b\u0443\u0448\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u043f\u043e\u0440\u0442 443 UDP<br \/><em>http-request return status 200<\/em>\u00a0\u2014 \u0432\u0435\u0440\u043d\u0435\u0442 \u0441\u0442\u0430\u0442\u0443\u0441 200 \u0435\u0441\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f QUIC \u043f\u043e \u043f\u0443\u0442\u0438 example.ru\/quic \u043f\u043e\u0441\u043b\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0443\u0431\u0440\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0439 \u043e\u0442\u0432\u0435\u0442.<\/p>\n<p>\u0412 \u043b\u044e\u0431\u043e\u043c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0435 \u0432 frontend https \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0434\u043b\u044f \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u044f \u043e \u043d\u0430\u043b\u0438\u0447\u0438\u0438 QUIC, \u0447\u0442\u043e \u0431\u044b \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043f\u043e\u043d\u0438\u043c\u0430\u043b\u0438 \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435, \u0435\u0441\u043b\u0438 \u0441 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435\u043c \u0431\u0443\u0434\u0443\u0442 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0435\u0442 \u043e\u0442\u043a\u0430\u0442 \u043d\u0430 TCP:<\/p>\n<pre><code>http-after-response add-header alt-svc 'h3=\":443\"; ma=86400, h3-29=\":443\"; ma=86400, h3-28=\":443\"; ma=86400, h3-27=\":443\"; ma=86400' <\/code><\/pre>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 frontend https \u0438\u0437 \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0432\u044b\u0448\u0435 \u0441 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u043c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u043c \u0438 QUIC: <\/p>\n<pre><code>frontend https     bind [::]:443 v4v6 ssl crt \/etc\/haproxy\/certs\/ alpn h2,http\/1.1 strict-sni     bind quic4@:443 ssl crt \/etc\/haproxy\/certs\/ alpn h3 strict-sni ssl-min-ver TLSv1.3 allow-0rtt     bind quic6@:443 ssl crt \/etc\/haproxy\/certs\/ alpn h3 strict-sni ssl-min-ver TLSv1.3 allow-0rtt     http-request reject if { req.hdr(user-agent) -m sub evil }     http-request deny if { path -m sub \/. }     http-response set-header Strict-Transport-Security \"max-age=16000000; includeSubDomains;\"      http-after-response add-header alt-svc 'h3=\":443\"; ma=86400, h3-29=\":443\"; ma=86400, h3-28=\":443\"; ma=86400, h3-27=\":443\"; ma=86400'       use_backend http_site1 if { ssl_fc_sni -i example.ru }<\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u041f\u0440\u043e TLS 1.3 0-RTT early data  \u0432 QUIC\/HTTP3  ( allow-0rtt )<\/summary>\n<div class=\"spoiler__content\">\n<ul>\n<li>\n<p>TLS 1.3 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043a\u043b\u0438\u0435\u043d\u0442\u0443 \u0441\u0440\u0430\u0437\u0443 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u043f\u0435\u0440\u0432\u044b\u043c \u043f\u0430\u043a\u0435\u0442\u043e\u043c ClientHello (0-RTT), \u043d\u0435 \u0434\u043e\u0436\u0438\u0434\u0430\u044f\u0441\u044c \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f \u0440\u0443\u043a\u043e\u043f\u043e\u0436\u0430\u0442\u0438\u044f.<\/p>\n<\/li>\n<li>\n<p>\u042d\u0442\u043e \u0443\u0441\u043a\u043e\u0440\u044f\u0435\u0442 \u0432\u0440\u0435\u043c\u044f \u043e\u0442\u043a\u043b\u0438\u043a\u0430 (\u043d\u0435\u0442 \u043b\u0438\u0448\u043d\u0435\u0433\u043e round trip), \u043d\u043e \u0443\u044f\u0437\u0432\u0438\u043c\u043e \u0434\u043b\u044f replay-\u0430\u0442\u0430\u043a, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u044d\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u044b \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a\u043e\u043c \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u043c \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0438.<\/p>\n<\/li>\n<li>\n<p>HAProxy \u0434\u0430\u0451\u0442 ACL ssl_fc_has_early, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f, \u0435\u0441\u043b\u0438 \u043a\u043b\u0438\u0435\u043d\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u043b \u00ab\u0440\u0430\u043d\u043d\u0438\u0435\u00bb \u0434\u0430\u043d\u043d\u044b\u0435.<\/p>\n<\/li>\n<\/ul>\n<p>\u0414\u043b\u044f \u0437\u0430\u0449\u0438\u0442\u044b \u043e\u0442 replay-\u0430\u0442\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c <code>http-request wait-for-handshake if { ssl_fc_has_early }<\/code> \u2014 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0437\u0430\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 HA \u043e\u0442\u043b\u043e\u0436\u0438\u0442\u044c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0434\u043e \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f TLS-handshake.<\/p>\n<p>\u0411\u0435\u0437 \u0434\u0430\u043d\u043d\u043e\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u044b \u0435\u0441\u0442\u044c \u0440\u0438\u0441\u043a \u0430\u0442\u0430\u043a \u043d\u0430 0-RTT, HA \u043d\u0430\u0447\u043d\u0435\u0442 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c 0-RTT \u0434\u043e \u043f\u043e\u043b\u043d\u043e\u0433\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f handshake. <\/p>\n<p>\u0421 <\/p>\n<\/div>\n<\/details>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-473565","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/473565","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=473565"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/473565\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=473565"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=473565"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=473565"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}