Назад | Перейти на главную страницу

Настройка ASA для статического сопоставления большого количества хостов с одной машиной

У меня есть настройка, в которой я маршрутизирую сотни на потенциально тысячи веб-сайтов с поддержкой SSL через один виртуальный IP-адрес, который выполняет разгрузку SSL и балансировку нагрузки. Благодаря конструкции самого SSL, мне нужно, чтобы каждый «хост SSL» прослушивал уникальный порт и / или IP-адрес; Чтобы упростить настройку VIP, я просто назначаю каждый сертификат другому порту на том же VIP.

Внешне я хочу, чтобы на каждом IP-адресе открывались порты 80 и 443. Внутри я хочу, чтобы каждый внешний порт 80 отображался на порт 80 внутреннего хоста (с использованием стандартных виртуальных хостов HTTP для различения), тогда как каждый порт 443 отображался на определенный внутренний порт. Так, например:

External IP     External Port     Internal IP     Internal Port
1.2.3.1         80                10.0.0.5        80
1.2.3.1         443               10.0.0.5        20001
1.2.3.2         80                10.0.0.5        80
1.2.3.2         443               10.0.0.5        20002
1.2.3.3         80                10.0.0.5        80
1.2.3.3         443               10.0.0.5        20003

Реализовать это с помощью ASA было выполнимо, но болезненно. Сопоставление каждого внешнего IP-адреса с тем же портом требует использования уникального ACL для каждого внешнего хоста, даже если сам ACL идентичен. Мне удалось добиться этого только с помощью комбинации традиционных статических сопоставлений и статических сопоставлений на основе ACL, например:

object-group service webapp_ports tcp
 port-object eq www
 port-object eq https
object-group network webapp_hosts
 network-object host 1.2.3.1
 network-object host 1.2.3.2
 network-object host 1.2.3.3
access-list policy_nat_http_site1 extended permit tcp host 10.0.0.5 eq www any 
access-list policy_nat_http_site2 extended permit tcp host 10.0.0.5 eq www any 
access-list policy_nat_http_site3 extended permit tcp host 10.0.0.5 eq www any 
access-list acl_outside extended permit tcp any object-group webapp_hosts object-group webapp_ports
static (inside,outside) tcp 1.2.3.1 www access-list policy_nat_http_site1 
static (inside,outside) tcp 1.2.3.2 www access-list policy_nat_http_site2 
static (inside,outside) tcp 1.2.3.3 www access-list policy_nat_http_site3 
static (inside,outside) tcp 1.2.3.1 https 10.0.0.5 20001 netmask 255.255.255.255
static (inside,outside) tcp 1.2.3.2 https 10.0.0.5 20002 netmask 255.255.255.255
static (inside,outside) tcp 1.2.3.3 https 10.0.0.5 20003 netmask 255.255.255.255
access-group acl_outside in interface outside

Хотя это работает, я недоволен настройкой, потому что она требует слишком много возни каждый раз, когда мне нужно добавить нового клиента - добавление нового IP-адреса в объектную группу, новый список доступа и еще две записи в статические отображения. Есть ли лучший способ справиться с этим? Я контролирую весь сетевой стек, поэтому возможны изменения в дизайне сети, если это наиболее целесообразно.

Мне кажется, я не могу придумать лучшего способа, кроме как поместить их всех в DMZ за ASA с общедоступными IP-адресами, назначенными каждому из них (или сделать одно или одно сопоставление, если вы предпочитаете это). Попробуйте попросить вашего интернет-провайдера предоставить больше общедоступных IP-адресов. Сожалею.