Как отключить информацию HTTP-заголовка Apache в ответе балансировщика нагрузки AWS? - PullRequest
0 голосов
/ 13 ноября 2018

У меня есть среда node.js, развернутая с использованием AWS Elastic Beanstalk на сервере Apache. Я провел сканирование PCI в среде и получаю 2 ошибки:

  • Apache ServerTokens Раскрытие информации
  • Раскрытие информации HTTP-заголовка веб-сервера

Естественно, я думаю, что мне нужно обновить файл httpd.conf следующим образом:

ServerSignature Off
ServerTokens Prod

Однако, учитывая природу Elastic Beanstalk и Elastic Load Balancers, как только среда масштабируется, добавляет новые серверы, перезагружается и т. Д., Конфигурация экземпляра будет перезаписана.

Я также попытался поместить в файл .htaccess следующее:

RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteRule .* https://%{HTTP:Host}%{REQUEST_URI} [L,R=permanent]

# Security hardening for PCI
Options -Indexes
ServerSignature Off

# Dissallow iFrame usage outside of loylap.com for PCI Security Scan
Header set X-Frame-Options SAMEORIGIN

На стороне узла js я использую пакет "шлем", чтобы применить некоторые меры безопасности, я также использую пакет "express-force-https", чтобы обеспечить применение приложением https. Однако, похоже, что они вступают в силу только после запуска приложения Express и после перенаправления.

У меня есть прослушиватели Elastic Load Balancer, настроенные как для HTTP (порт 80), так и для HTTPS (порт 443), однако запросы HTTP сразу направляются на HTTPS.

Когда я запускаю следующую команду curl:

curl -I https://myenvironment.com --head

Я получаю приемлемый ответ со следующей строкой:

Server: Apache

Однако, когда я выполняю тот же запрос на конечной точке http (т.е. перед перенаправлениями и т. Д.):

curl -I http://myenvironment.com --head

Я получаю ответ, который раскрывает больше информации о моем сервере, чем следует, и, следовательно, сбой PCI:

Server: Apache/2.4.34 (Amazon)

Как я могу заставить свою среду ограничивать ответ заголовка http для HTTP, а также HTTPS?

Ответы [ 2 ]

0 голосов
/ 14 ноября 2018

Благодарим @stdunbar за то, что он привел меня к правильному решению с использованием расширений.

Решение сработало для меня следующим образом:

  1. Создать файл в корне проекта с именем .ebextensions/01_server_hardening.config
  2. Добавить следующее содержимое в файл:
files:
  "/etc/httpd/conf.d/03_server_hardening.conf":
    mode: "000644"
    owner: root
    group: root
    content: |
      ServerSignature Off
      ServerTokens Prod

container_commands:
  01_reload_httpd:
    command: "sudo service httpd reload"

(Примечание: в этом файле YAML важен отступ - 2 пробела, а не табуляция в приведенном выше коде).

Во время развертывания эластичного beanstalk это создаст новый файл conf в папке /etc/httpd/conf.d, который по умолчанию настроен на расширение параметров httpd.conf в ELB.

Контент вручную отключает ServerSignature и устанавливает для ServerTokens значение Prod, достигая стандарта PCI.

Выполнение команды container вызывает перезагрузку httpd (для этой конкретной версии Amazon linux - для ubuntu и других версий требуется собственный стандарт reload).

После развертывания новых команд в моей среде EB, мои команды curl работают как положено для HTTP и HTTPS.

0 голосов
/ 14 ноября 2018

В конечном итоге вам потребуется внедрить несколько расширений , чтобы применить это изменение к каждому из ваших экземпляров Beanstalk. Это механизм, который позволяет создавать один или несколько файлов, которые запускаются во время инициализации beanstalk. У меня есть старый, который я не проверял в вашей конкретной ситуации, но он переписывает HTTP-> HTTPS, как вы показываете. Он использовался в типе Tomcat Elastic Beanstalk - разные среды могут использовать разные конфигурации. Моя выглядит так:

files:
    "/tmp/00_application.conf":
        mode: "000644"
        owner: root
        group: root
        content: |
            <VirtualHost *:80>    
              RewriteEngine On
              RewriteCond %{HTTP:X-Forwarded-Proto} !https
              RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R,L]
            </VirtualHost>

container_commands:
    01_enable_rewrite:
        command: "echo 'LoadModule rewrite_module modules/mod_rewrite.so' >> /etc/httpd/conf/httpd.conf"

    02_cp_application_conf:
        command: "cp /tmp/00_application.conf /etc/httpd/conf.d/elasticbeanstalk/00_application.conf"

Опять же, он немного старше и не был протестирован для вашего конкретного случая использования, но, надеюсь, он поможет вам начать.

Это необходимо будет упаковать с вашим развертыванием, т. Е. В Java, .jar, .war или .zip в других средах. Взгляните на ссылку документации, чтобы узнать больше о развертываниях.

...