2016-02-22 5 views
0

У нас есть приложение, развернутое на AWS. Впереди балансировщик нагрузки AWS принимает все входящие HTTP-запросы; Экземпляры EC2 находятся прямо за этим балансиром. В отдельном экземпляре HAproxy получает все запросы и делегаты, а затем на реальный сервер приложений на основе Java (В нашем специальном случае сервер haproxy и бизнес-приложений находится в одном экземпляре EC2, haproxy не играет роли баланса нагрузки только для ретрансляции http-запросы, другими словами, сервер haproxy и application - это сопоставление «один к одному»).В HTTP-ответе появляются нестандартные HTTP-заголовки X-Forwarded-Host и т. Д.

Когда мы пытались запустить HTTP-вызов этой системе:

Запрос

GET /token HTTP/1.1 
Host: xxx.xxx.xxx.xxx 

Response

HTTP/1.1 403 Forbidden 
X-Forwarded-Proto: https 
X-Forwarded-For: xxx.xxx.xxx.xxx 
X-Forwarded-Port: 443 
X-Forwarded-Host: xx.xx.xx.xxx 
Date: Wed, 09 Dec 2015 22:04:06 GMT 
Server: WSO2-PassThrough-HTTP 

В моем понимании, X-Forwarded- * должен отображаться только на стороне сервера, чтобы для серверов, чтобы определить, откуда поступают входящие запросы, когда между прокси-серверами есть прокси. Я не знаю, почему эти заголовки также появляются в ответе. Это вызвало у меня озабоченность по поводу утечки внутренних IP-адресов потенциальным вредоносным клиентам.

Ниже приводится фрагменты кода для HAproxy настройки:

frontend worker 
bind :443 ssl crt xxx crt xxx crt xx accept-proxy no-sslv3 no-tls-tickets 
mode http 
acl forwarded hdr_cnt(X-Forwarded-Host) gt 0 
acl trusted src 127.0.0.0/24 
capture request header X-Forwarded-For len 64 
default_backend worker 
http-request deny if METH_TRACE 
http-request set-header X-Forwarded-Host %[dst] unless forwarded trusted 
http-request set-header X-Forwarded-Port %[dst_port] 
http-request set-header X-Forwarded-Proto https if { ssl_fc } 
option forwardfor if-none 
reqidel ^X-Forwarded-For:.* unless trusted 
rspadd Strict-Transport-Security:\ max-age=63072000;\ includeSubdomains;\ preload 
use_backend xxx.xxx.xxx if { ssl_fc_sni -i xxx.xxx.xxx } 
use_backend xxx.xxx.xxx if { ssl_fc_sni -i xxx.xxx.xxx } 

Пожалуйста посоветуйте почему эти нестандартные заголовки появляются в ответах HTTP и если это рискованно для безопасности.

+0

Вы видите эти заголовки ответа «X-Forwarded- *» только при отправке запросов через ваш сервер «haproxy» или через AWS ELB или оба? – Castaglia

ответ

3

AWS ELBs автоматически добавляет X-Forwarded-For, X-Forwarded-Port и X-Forwarded-Proto заголовки запросов на AWS ELB docs; они не используют заголовок X-Forwarded-Host. Таким образом, это правило в вашем haproxy конфиги немного подозреваемый:

acl forwarded hdr_cnt(X-Forwarded-Host) gt 0 

Вместо этого, вы можете попробовать:

acl forwarded hdr_cnt(X-Forwarded-For) gt 0 

Заголовок запрос X-Forwarded-Host является более необычным; если ваш сервер backend (WS02, от его взглядов) нуждается в, этот заголовок, вы можете удалить это и другие X-Forwarded-* правила из вашей конфигурации haproxy, так как эти значения должны поступать от AWS ELB. То есть, вы можете удалить все эти:

http-request set-header X-Forwarded-Host %[dst] unless forwarded trusted 
http-request set-header X-Forwarded-Port %[dst_port] 
http-request set-header X-Forwarded-Proto https if { ssl_fc } 

Как для ли это проблема безопасности - только для HTTP-запросов, не HTTPS-запросы. И это только потому, что без SSL возможно, чтобы кто-то мог перехватить и перехватить эти заголовки ответа. Такой злоумышленник уже знал бы IP-адрес клиента (и, следовательно, значение для X-Forwarded-For), знал бы порт назначения TCP (и, следовательно, значение для X-Forwarded-Port), и знал бы, что это не SSL (и, следовательно, знал бы X-Forwarded-Proto: http) , В идеале, хотя, как вы отмечаете, эти заголовки вообще не появятся в ответе. (Для HTTP-серверов это необычно, так как в своих ответах такие заголовки заголовков, как и в их ответе, вызываются в HTTP-серверах, поэтому я пытался прочитать документы WS02, чтобы узнать, можно ли настроить что-то подобное.)

Таким образом, в то время как вы исследуете это, вы могли бы haproxy удалить эти заголовки ответа, используя что-то вроде:

rspdel ^X-Forwarded-.*:.* 

Надеется, что это помогает!

+0

Звучит очень полезно! Мне нужно отдать это, поймать позже. Огромное спасибо. –

+0

Что касается того, почему WS02 может обрабатывать заголовки запросов в качестве заголовков ответов, свойство ['RESPONSE' generic] (https://docs.wso2.com/display/ESB481/Generic+Properties#GenericProperties-RESPONSE), установленное _might_, имеет такой вид эффекта, если мои предположения о том, как ESB относится к «сообщению», верны. Какое значение конфигурации, если таковое имеется, есть у вас для этого? – Castaglia

+0

Мы используем свойство по умолчанию для wso2; потому что мне нужен X-Forwarded-Host для некоторых материалов для ведения журнала, удалите эту конфигурацию непрактично, мы сначала попытаемся изменить конфигурацию в wso2. –

 Смежные вопросы

  • Нет связанных вопросов^_^