Apache HTTP Server
Для работы серверных компонентов Indeed CM на ОС Linux настройте веб-сервер Apache в качестве обратного прокси-сервера:
- Установите веб-сервер.
- Установите SSL/TLS-сертификат.
- Настройте модули и конфигурацию.
- Настройте сайт Apache.
- RHEL-based
- Debian-based
Установка веб-сервера
Установите веб-сервер Apache с помощью следующих команд:
sudo yum install httpd
sudo systemctl enable httpd
sudo systemctl start httpd
Или установите веб-сервер Apache из исходного кода. Подробнее на портале Apache.
Установка TLS-сертификата
Установите TLS-сертификат на веб-сервер. Как создать TLS-сертификат для веб-сервера
- Скопируйте файлы сертификата и ключа в папку, которая указана в файле конфигурации Apache:
sudo mkdir /etc/ssl/private/
sudo cp ./SSL.crt /etc/httpd/ssl/certs
sudo cp ./SSL.key /etc/httpd/ssl/private - Добавьте сертификат корневого УЦ в доверенные на рабочей станции с установленным Apache.
sudo cp root-ca.crt /usr/local/share/ca-certificates/
sudo update-ca-certificates -f - Сделайте сертификат доверенным в домене, например, с помощью групповых политик.
Настройка модулей и конфигурации
Установите модуль mod_ssl:
sudo yum install -y mod_ssl
Добавьте в конфигурационный файл httpd.conf (расположение по умолчанию /etc/httpd/conf/httpd.conf) следующие директивы:
Listen 3003
LimitRequestLine 16384
LimitRequestFieldSize 16384
ServerName SERVER_FQDN
Header append X-FRAME-OPTIONS "SAMEORIGIN"
Header set X-Content-Type-Options "nosniff"В данном месте и далее замените SERVER_FQDN на имя используемого сервера.
Настройка сайта
Для работы Indeed CM создайте сайт в Apache, чтобы он обслуживал запросы и отправлял их на проксируемый адрес – сервис Indeed CM.
Создайте файл сайта /etc/httpd/conf.d/SERVER_FQDN.conf:
sudo touch /etc/httpd/conf.d/SERVER_FQDN.conf
Заполните файл рекомендуемым содержимым.
cautionВ параметрах
SSLCertificateFile
иSSLCertificateKeyFile
указаны пути к созданным/импортированным в предыдущих шагах файлам сертификата и закрытого ключа. Проверьте указанные пути и имена файлов.
Рекомендуемое содержимое файла SERVER_FQDN.conf
<VirtualHost *:80>
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI}/$1 [R=301,L]
</VirtualHost>
<VirtualHost *:443>
Protocols h2 http/1.1
SSLCertificateFile /etc/httpd/ssl/certs/SSL.crt
SSLCertificateKeyFile /etc/httpd/ssl/private/SSL.key
SSLCipherSuite @SECLEVEL=1: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
ErrorLog logs/error.log
CustomLog logs/access.log combined
SSLEngine on
SSLProtocol -all +TLSv1.2
SSLHonorCipherOrder off
SSLCompression off
SSLSessionTickets on
SSLUseStapling off
SSLProxyEngine on
SetEnv nokeepalive ssl-unclean-shutdown
RequestHeader set X-Forwarded-Proto https
Header always set Strict-Transport-Security "max-age=63072000"
ProxyPreserveHost On
ProxyPass /cm/mc http://localhost:5001/cm/mc
ProxyPassReverse /cm/mc http://localhost:5001/cm/mc
ProxyPass /cm/ss http://localhost:5002/cm/ss
ProxyPassReverse /cm/ss http://localhost:5002/cm/ss
ProxyPass /cm/rss http://localhost:5003/cm/rss
ProxyPassReverse /cm/rss http://localhost:5003/cm/rss
ProxyPass /cm/api http://localhost:5004/cm/api
ProxyPassReverse /cm/api http://localhost:5004/cm/api
ProxyPass /cm/credprovapi http://localhost:5005/cm/credprovapi
ProxyPassReverse /cm/credprovapi http://localhost:5005/cm/credprovapi
ProxyPass /cm/oidc http://localhost:5008/cm/oidc
ProxyPassReverse /cm/oidc http://localhost:5008/cm/oidc
ProxyPass /cm/wizard http://localhost:5009/cm/wizard
ProxyPassReverse /cm/wizard http://localhost:5009/cm/wizard
#ProxyPass /api http://localhost:5010/api
#ProxyPassReverse /api http://localhost:5010/api
</VirtualHost>
<VirtualHost *:3003>
protocols h2 http/1.1
SSLCertificateFile /etc/httpd/ssl/certs/SSL.crt
SSLCertificateKeyFile /etc/httpd/ssl/private/SSL.key
SSLCipherSuite @SECLEVEL=1: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
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLEngine on
SSLProtocol -all +TLSv1.2
SSLHonorCipherOrder off
SSLCompression off
SSLSessionTickets on
SSLUseStapling off
SSLProxyEngine on
RequestHeader set X-Forwarded-Proto https
Header always set Strict-Transport-Security "max-age=63072000"
ProxyPass /agentregistrationapi http://localhost:5006/agentregistrationapi
ProxyPassReverse /agentregistrationapi http://localhost:5006/agentregistrationapi
<Location "/agentserviceapi">
SSLVerifyClient optional_no_ca
SSLOptions +ExportCertData
RequestHeader unset x-ssl-client-cert
RequestHeader set x-ssl-client-cert "expr=%{escape:%{SSL_CLIENT_CERT}}"
#RequestHeader set x-ssl-client-cert "expr=%{escape:%{SSL_CLIENT_S_DN}}"
ProxyPass http://localhost:5007/agentserviceapi
ProxyPassReverse http://localhost:5007/agentserviceapi
</Location>
</VirtualHost>
Перечитайте файл конфигурации:
sudo httpd -t
sudo systemctl restart httpd
Установка веб-сервера
Установите веб-сервер Apache с помощью следующих команд:
sudo apt install apache2
sudo systemctl enable apache2
sudo service apache2 start
Или установите веб-сервер Apache из исходного кода. Подробнее на портале Apache.
Установка TLS-сертификата
Установите TLS-сертификат на веб-сервер. Как создать TLS-сертификат для веб-сервера
- Скопируйте файлы сертификата и ключа в папки для хранения сертификатов и закрытых ключей:
sudo cp ./SSL.crt /etc/ssl/certs
sudo cp ./SSL.key /etc/ssl/private - Добавьте сертификат корневого УЦ в доверенные на рабочей станции с установленным Apache.
sudo cp root-ca.crt /usr/local/share/ca-certificates/
sudo update-ca-certificates -f - Сделайте сертификат доверенным в домене, например, с помощью групповых политик.
Настройка модулей и конфигурации
Apache реализован в виде ядра и модулей, которые подключаются по необходимости использования дополнительной функциональности.
- Для работы системы включите модули:
sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2enmod ssl
sudo a2enmod headers
sudo a2enmod rewrite
sudo systemctl restart apache2 - Добавьте в конфигурационный файл apache2.conf (расположение по умолчанию /etc/apache2/apache2.conf) следующие директивы: В данном месте и далее замените SERVER_FQDN на имя используемого сервера.
Listen 3003
LimitRequestLine 16384
LimitRequestFieldSize 16384
ServerName SERVER_FQDN
Header append X-FRAME-OPTIONS "SAMEORIGIN"
Header set X-Content-Type-Options "nosniff"
При установке Apache в ОС Astra Linux в файле apache2.conf может потребоваться отключение параметра AstraMode, подробнее на портале Astra Linux.
Настройка сайта
Для работы Indeed CM создайте сайт в Apache, чтобы он обслуживал запросы и отправлял их на проксируемый адрес – сервис Indeed CM.
Создайте файл сайта /etc/apache2/sites-available/SERVER_FQDN.conf
sudo touch /etc/apache2/sites-available/SERVER_FQDN.conf
Заполните файл рекомендуемым содержимым.
cautionВ параметрах
SSLCertificateFile
иSSLCertificateKeyFile
указаны пути к созданным/импортированным в предыдущих шагах файлам сертификата и закрытого ключа. Проверьте указанные пути и имена файлов.
Рекомендуемое содержимое файла SERVER_FQDN.conf
<VirtualHost *:80>
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI}/$1 [R=301,L]
</VirtualHost>
<VirtualHost *:443>
Protocols h2 http/1.1
SSLCertificateFile /etc/ssl/certs/SSL.crt
SSLCertificateKeyFile /etc/ssl/private/SSL.key
SSLCipherSuite @SECLEVEL=1: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
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLEngine on
SSLProtocol -all +TLSv1.2
SSLHonorCipherOrder off
SSLCompression off
SSLSessionTickets on
SSLUseStapling off
SSLProxyEngine on
SetEnv nokeepalive ssl-unclean-shutdown
RequestHeader set X-Forwarded-Proto https
Header always set Strict-Transport-Security "max-age=63072000"
ProxyPreserveHost On
ProxyPass /cm/mc http://localhost:5001/cm/mc
ProxyPassReverse /cm/mc http://localhost:5001/cm/mc
ProxyPass /cm/ss http://localhost:5002/cm/ss
ProxyPassReverse /cm/ss http://localhost:5002/cm/ss
ProxyPass /cm/rss http://localhost:5003/cm/rss
ProxyPassReverse /cm/rss http://localhost:5003/cm/rss
ProxyPass /cm/api http://localhost:5004/cm/api
ProxyPassReverse /cm/api http://localhost:5004/cm/api
ProxyPass /cm/credprovapi http://localhost:5005/cm/credprovapi
ProxyPassReverse /cm/credprovapi http://localhost:5005/cm/credprovapi
ProxyPass /cm/oidc http://localhost:5008/cm/oidc
ProxyPassReverse /cm/oidc http://localhost:5008/cm/oidc
ProxyPass /cm/wizard http://localhost:5009/cm/wizard
ProxyPassReverse /cm/wizard http://localhost:5009/cm/wizard
#ProxyPass /api http://localhost:5010/api
#ProxyPassReverse /api http://localhost:5010/api
</VirtualHost>
<VirtualHost *:3003>
protocols h2 http/1.1
SSLCertificateFile /etc/ssl/certs/SSL.crt
SSLCertificateKeyFile /etc/ssl/private/SSL.key
SSLCipherSuite @SECLEVEL=1: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
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLEngine on
SSLProtocol -all +TLSv1.2
SSLHonorCipherOrder off
SSLCompression off
SSLSessionTickets on
SSLUseStapling off
SSLProxyEngine on
RequestHeader set X-Forwarded-Proto https
Header always set Strict-Transport-Security "max-age=63072000"
ProxyPass /agentregistrationapi http://localhost:5006/agentregistrationapi
ProxyPassReverse /agentregistrationapi http://localhost:5006/agentregistrationapi
<Location "/agentserviceapi">
SSLVerifyClient optional_no_ca
SSLOptions +ExportCertData
RequestHeader unset x-ssl-client-cert
RequestHeader set x-ssl-client-cert "expr=%{escape:%{SSL_CLIENT_CERT}}"
#RequestHeader set x-ssl-client-cert "expr=%{escape:%{SSL_CLIENT_S_DN}}"
ProxyPass http://localhost:5007/agentserviceapi
ProxyPassReverse http://localhost:5007/agentserviceapi
</Location>
</VirtualHost>
Перечитайте файл конфигурации и включите файл сайта:
sudo a2ensite SERVER_FQDN
sudo apachectl configtest
sudo systemctl restart apache2