Ssl

根據源 ip 選擇一個 haproxy tcp 後端

  • July 6, 2021

我有基本的 haproxy 知識,並且知道如何根據 SNI 伺服器名稱處理 tcp 後端的選擇。

相關線路是

   acl is_myhost req.ssl_sni -i my.host.com
   acl is_otherhost req.ssl_sni -i other.host.com


   use_backend mybackend if is_myhost
   use_backend otherbackend if is_otherhost

現在我想將它們更改為允許我根據源 ip 選擇後端的東西,但我不知道以下偽配置的確切語法或這是否可能

   acl is_myhost_for_specif req.ssl_sni -i my.host.com <and source ip = 1.2.3.4>
   acl is_myhost_for_others req.ssl_sni -i my.host.com <and source ip != 1.2.3.4>
   acl is_otherhost req.ssl_sni -i other.host.com


   use_backend mybackend1 if is_myhost_for_specific
   use_backend mybackend2 if is_myhost_for_others
   use_backend otherbackend if is_otherhost

您的 ACL 虛擬碼不正確,因為 ACL 聲明沒有 AND/OR 邏輯的語法。將其移至使用 ACL 的位置,如下例所示。

對於源 IP 有srchttps://cbonte.github.io/haproxy-dconv/2.2/configuration.html#7.3.3-src),例如:

請注意,在 if 語句中匹配兩個條件的語法不是

use_backend mybackend if condition1 and condition2

只是

use_backend mybackend if condition1 condition2

acl test_network src 192.168.10.0/24
acl test_network src 192.168.20.0/24
acl is_myhost_for_specif req.ssl_sni -i my.host.com

# both acls must be true (is_myhost **and** test_network)
use_backend mybackend1 if is_myhost test_network
use_backend mybackend2 if is_myhost

順序use_backend很重要,因此如果 SNI 匹配,則來自test_networkgo tomybackend1和其他IP 的 IPs 去。mybackend2此處兩次聲明test_networkACL 表示“src_ip 匹配 192.168.10.0/24 OR 192.168.20.0/24”

引用自:https://serverfault.com/questions/1068213