Задача: Нужно настроить доступ через браузер к опубликованным базам данных 1С
на CentOS 7
Вот такая вот задача поступила мне от моего непосредственного руководителя в пятницу 01.11.2019
почти в конце рабочего дня. А срок вторник 05.11.2019
. Для меня это соответственно новая задача с которой я никогда до этого не сталкивался. Опрос знакомых показал, что ни такое делали, но только в роли Web
-сервиса у них использовался IIS
, а меня задача организовать на базе CentOS 7 + httpd
. Жаль, что не на Ubuntu
с которой я работаю легко. Ну да ладно. За выходные я на своем тестовом полигоне разобрался как опубликовываются базы в 1С
и как осуществляется доступ к ним через IIS
. Об это будет заметка чуть позже. Это же усовершенствованная и реальная рабочая применяема в компании.
Шаг №1: От сетевых администраторов (точнее из списка в файла учета) получаю внешний свободный IP
из DMZ
—зоны который можно взять дабы можно было из вне подключаться.
Шаг №2: В локальной сети (polygon.ru
) на сервере с ролью DNS
создаю A
запись на VM
с CentOS 7
на борту ответственной на доступ к базам 1С
через браузер
C:\Users\olloa>nslookup > set type=any > module.cse.ru Ответ: srv-dc.polygon.ru Address: 10.90.90.5 module.polygon.ru internet address = 185.65.220.50
Шаг №3: Т.к. у меня в роли шлюза выступает FortiGate
то создаю правило разрешающее трафик из вне на VM
в DMZ
—зоне:
https://10.100.200.252:222 – user&pass – Policy & Objects – Ipv4 Policy
, т.к. я все создаю не с нуля, а применяю к уже существующей инфраструктуре, то в группе DMZ Group
создаю правило:
Name: WAN to DMZ (module)
From: CSE-AS.20 (port3)
To: CSE-AS.22 (port4)
Source: all
Destination: _MODULE 185.65.220.50
Schedule: always
Service: ALL_ICMP, HTTPS
Action: ACCEPT
Также нужно правило разрешающее доступ из DMZ
(для этой машины) к серверам локальной сети (в частности, к кластеру 1С
)
https://10.10.200.252:222 – user&pass – Policy & Objects – Ipv4 Policy
Name: DMZ to LAN 220.50
From: CSE-AS.22 (port4)
To: LAN (port1)
Source: _MODULE 185.65
Destination: 10.0.X.X 172.17.200.X
Service: ALL
Action: ACCEPT
Шаг №4: Поднимаю на хосте через vSphere Client
виртуальную машину на базе CentOS 7
CPU: 1
RAM: 4Gb
HDD: 40Gb
Eth: cse-as-22 (смотрит в DMZ сеть)
Настраиваю:
[root@localhost ~]# rm -Rf /var/cache/yum [root@localhost ~]# yum -y update && yum -y upgrade [root@localhost ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config [root@localhost ~]# rm -f /etc/localtime [root@localhost ~]# ln -s /usr/share/zoneinfo/Europe/Moscow /etc/localtime [root@localhost ~]# firewall-cmd --state running [root@localhost ~]# systemctl stop firewalld [root@localhost ~]# systemctl disable firewalld Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service. Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service. [root@localhost ~]# systemctl mask firewalld Created symlink from /etc/systemd/system/firewalld.service to /dev/null. [root@localhost ~]# firewall-cmd --state not running [root@localhost ~]# [root@localhost ~]# localectl set-locale LANG=en_US.UTF_8 [root@localhost ~]# yum install -y mc nano htop [root@localhost ~]# nano /etc/environment LC_ALL="en_US.UTF-8" [root@localhost ~]# nano /etc/ssh/sshd_config #PermitRootLogin yes PermitRootLogin yes PasswordAuthentication yes [root@localhost ~]# systemctl restart sshd [root@localhost ~]# reboot
На заметку: По сути за основу настройки брал заметку “Подготовка CentOS 7 для работы в DMZ”
Шаг №5: Прописываю настройки /etc/hosts & /etc/hostname
[root@localhost ~]# nano /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 10.0.0.43 sp1.polygon.ru sp1 → Кластер 1С 10.0.1.47 u2-sp5.polygon.ru u2-sp5 → Кластер 1С 185.65.220.50 module.polygon.ru module [root@localhost ~]# nano /etc/hostname module.polygon.ru [root@localhost ~]# [root@localhost ~]# reboot
Шаг №6: Устанавливаю Web
—сервис httpd
:
[root@module ~]# yum install -y httpd [root@module ~]# yum install httpd -y [root@module ~]# httpd -v Server version: Apache/2.4.6 (CentOS) Server built: Aug 8 2019 11:41:18 systemctl status httpd systemctl start httpd [root@module ~]#
Отключаем тестовую дефолтную страницу:
[root@module ~]# [root@module ~]# mv /etc/httpd/conf.d/welcome.conf /etc/httpd/conf.d/welcome.conf.backup [root@module ~]# systemctl restart httpd
Итого порты которые случает система:
[root@module ~]# netstat -tulpn | grep LISTEN tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 10049/httpd tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 15194/sshd tcp6 0 0 :::22 :::* LISTEN 15194/sshd [root@module ~]#
Шаг №7: Уточняю у ответственных за 1С
какая версия платформы у нас используется
У нас версия пакета 1С
использующаяся 8.3.13.1690
Шаг №8: С сайта 1C
скачиваю «Сервер 1С:Предприятия
»:
Т.к. я обращаюсь к сайту 1С
с рабочей системы под управлением Windows 7 x64 Pro
и Скачиваю «Cервер 1С:Предприятия (64-bit) для RPM-based Linux-систем
»
«https://releases.1c.ru/version_file?nick=Platform83&ver=8.3.13.1690&path=Platform\8_3_13_1690\rpm64_8_3_13_1690.tar.gz»
Скачанный архив располагаю в папке C:\Soft\1C
Шаг №9: Подключаюсь через ssh
клиент (MTPutty + putty.exe
) к CentOS 7
, затем устанавливаю утилиты посредством которых смогу подключить ресурс Windows
и скопировать пакет 1С
и файл (default.vrd
) опубликованной базы или баз данных чтобы с ней(ними) можно было работать через Web
—интерфейс.
[root@module ~]# yum install -y cifs-utils [root@module ~]# mount.cifs //10.90.90.5/c$ /media -o username=Administrator,password=712mbddr@,domain=WORKGROUP [root@module ~]# cp /media/Soft/1C/ rpm64_8_3_13_1690.tar.gz ~/ [root@module ~]# cp /media/inetpub/wwwroot/polygon/default.vrd /var/www/html/polygon/ [root@module ~]# umount /media
После по команде history
посмотреть номер строки команды mount
History -d <номер_строки> дабы не святить пароль в консоли
Шаг №10: Распаковываю скачанный пакет 1С
[root@module ~]# tar zxf rpm64_8_3_13_1690.tar.gz
Устанавливаю пакеты 1С
(в частности, пакет 1c-enterprise83-ws
) на текущую систему CentOS 7
в определенном порядке:
[root@module ~]# rpm -i 1C_Enterprise83-common-8.3.13-1690.x86_64.rpm [root@module ~]# rpm -i 1C_Enterprise83-server-8.3.13-1690.x86_64.rpm [root@module ~]# rpm -i 1C_Enterprise83-ws-8.3.13-1690.x86_64.rpm [root@module ~]# find / -name wsap22.so /opt/1C/v8.3/x86_64/wsap22.so [root@module ~]# systemctl status srv1cv83 ● srv1cv83.service - SYSV: Starts and stops the 1C:Enterprise daemons Loaded: loaded (/etc/rc.d/init.d/srv1cv83; bad; vendor preset: disabled) Active: inactive (dead) Docs: man:systemd-sysv-generator(8) [root@module ~]# [root@module ~]# systemctl stop srv1cv83 [root@module ~]# systemctl daemon-reload
Получаю справку по использованию утилиты webinst:
[root@module ~]# /opt/1C/v8.3/x86_64/webinst
1C:Предприятие 8. Утилита публикации веб-клиента Публикация: webinst [-publish] websrv -wsdir VirtualDir -dir Dir -connstr connStr [-confPath confPath] Публикация на основе существующего vrd файла: webinst [-publish] websrv [-wsdir VirtualDir] -descriptor vrdPath -dir Dir [-connstr connStr] [-confPath confPath] Удаление публикации: webinst -delete websrv -wsdir VirtualDir [-dir Dir] [-connstr connStr] [-confPath confPath] Удаление публикации по существующему vrd файлу: webinst -delete websrv [-wsdir VirtualDir] -descriptor vrdPath [-dir Dir] [-connstr connStr] [-confPath confPath] Ключи: -publish: опубликовать, ключ по умолчанию -delete: удалить публикацию websrv -apache2: публикация Веб-клиента для Apache 2.0 -apache22: публикация Веб-клиента для Apache 2.2 -apache24: публикация Веб-клиента для Apache 2.4 -wsdir VirtualDir: виртуальный каталог -dir Dir: физический каталог, в который будет отображен виртуальный -descriptor vrdPath: путь к существующему vrd файлу -connstr connStr: строка соединения ИБ -confPath confPath: полный путь к конфигурационному файлу Apache [root@module ~]#
Шаг №11: Добиваюсь чтобы при обращении через браузер к этой системе я могу получить окно авторизации через браузер в базе 1С:
/opt/1C/v8.3/x86_64/webinst -publish -apache24 -wsdir polygon -dir /var/www/html/polygon -connstr "Srvr=10.0.0.43;Ref=polygon;" -confPath /etc/httpd/conf/httpd.conf
Обзор используемых параметров:
./webinst -> утилита ответственная за публикацию доступ к базе 1С
"-apache24" - публикуем на апаче
"-wsdir polygon" - имя, по которому будет доступна ваша база из-вне, в данном случае адрес будет выглядеть http://ВашИПАдрес/test
"-dir /var/www/html/polygon" - пусть к папке, где будет располагаться файл default.vrd
"-connstr "Srvr=10.0.0.43;Ref=polygon;" – строка подключения к информационной базе, где 10.0.0.43 – это IP адрес кластера 1С, а polygon – это наименование информационной базы
"-confPath /etc/httpd/conf/httpd.conf" - путь к конфигурационному файлу апача
[root@module ~]# systemctl restart httpd
Авторизуюсь:
Пользователь: web
Пароль: web
И нажимаю ОК
, в моем случае база 1С
выглядит так:
Если Вы подключились переходим к следующему шагу
Шаг №12: Следующий шаг настроить автоматический запуск Web
—сервисе с настройками доступа к базе, а не ручной способ:
[root@module ~]# nano /etc/httpd/conf/httpd.conf ServerRoot "/etc/httpd" Listen 80 Include conf.modules.d/*.conf User apache Group apache ServerAdmin root@localhost ServerName module.polygon.ru <Directory /> AllowOverride none Require all denied </Directory> DocumentRoot "/var/www/html" <Directory "/var/www"> AllowOverride None Require all granted </Directory> <Directory "/var/www/html"> Options Indexes FollowSymLinks AllowOverride None Require all granted </Directory> <IfModule dir_module> DirectoryIndex index.html </IfModule> <Files ".ht*"> Require all denied </Files> ErrorLog "logs/error_log" LogLevel warn <IfModule log_config_module> LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%h %l %u %t \"%r\" %>s %b" common <IfModule logio_module> LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio </IfModule> CustomLog "logs/access_log" combined </IfModule> <IfModule alias_module> ScriptAlias /cgi-bin/ "/var/www/cgi-bin/" </IfModule> <Directory "/var/www/cgi-bin"> AllowOverride None Options None Require all granted </Directory> <IfModule mime_module> TypesConfig /etc/mime.types AddType application/x-compress .Z AddType application/x-gzip .gz .tgz AddType text/html .shtml AddOutputFilter INCLUDES .shtml </IfModule> AddDefaultCharset UTF-8 <IfModule mime_magic_module> MIMEMagicFile conf/magic </IfModule> EnableSendfile on IncludeOptional conf.d/*.conf LoadModule _1cws_module "/opt/1C/v8.3/x86_64/wsap24.so" Alias "/tablet" "/var/www/html/tablet/" <Directory "/var/www/html/tablet/"> AllowOverride None Options None Order allow,deny Allow from all SetHandler 1c-application ManagedApplicationDescriptor "/var/www/html/tablet/default.vrd" </Directory> Alias "/polygon_copy" "/var/www/html/polygon_copy/" <Directory "/var/www/html/polygon_copy/"> AllowOverride None Options None Order allow,deny Allow from all SetHandler 1c-application ManagedApplicationDescriptor "/var/www/html/polygon_copy/default.vrd" </Directory> Alias "/bitrix" "/var/www/html/bitrix/" <Directory "/var/www/html/bitrix/"> AllowOverride None Options None Order allow,deny Allow from all SetHandler 1c-application ManagedApplicationDescriptor "/var/www/html/bitrix/default.vrd" </Directory> Alias "/polygon" "/var/www/html/polygon/" <Directory "/var/www/html/polygon/"> AllowOverride None Options None Order allow,deny Allow from all SetHandler 1c-application ManagedApplicationDescriptor "/var/www/html/polygon/default.vrd" </Directory> [root@module ~]# chown -R root:apache /var/www/html/* [root@module ~]# httpd -t Syntax OK [root@module ~]# systemctl restart httpd
Отправляю систему в перезагрузку и проверяю что при обращении через браузер по URL
вида http://module.polygon.ru/polygon
или http://IP/polygon
получаю окно авторизации в опубликованной базе 1С
.
Отлично. Работает.
Шаг №13: Активирую работу через https
, т.к. доступ и вне следует ограничивать все чем можно + в компании есть сертификат на wildcard name.
[root@module ~]# rpm -qa | grep mod_ssl [root@module ~]# yum install mod_ssl openssl [root@module ~]# nano /etc/httpd/conf.d/ssl.conf Listen 443 https SSLPassPhraseDialog exec:/usr/libexec/httpd-ssl-pass-dialog SSLSessionCache shmcb:/run/httpd/sslcache(512000) SSLSessionCacheTimeout 300 SSLRandomSeed startup file:/dev/urandom 256 SSLRandomSeed connect builtin SSLCryptoDevice builtin <VirtualHost *:443> DocumentRoot "/var/www/html" ServerName module.polygon.ru ErrorLog logs/ssl_error_log TransferLog logs/ssl_access_log LogLevel warn SSLEngine on SSLProtocol all -SSLv2 -SSLv3 SSLCipherSuite HIGH:3DES:!aNULL:!MD5:!SEED:!IDEA SSLCertificateFile /etc/ssl/certs/STAR_cse_ru.crt SSLCertificateKeyFile /etc/ssl/private/STAR_cse_ru.key <Files ~ "\.(cgi|shtml|phtml|php3?)$"> SSLOptions +StdEnvVars </Files> <Directory "/var/www/cgi-bin"> SSLOptions +StdEnvVars </Directory> BrowserMatch "MSIE [2-5]" \ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0 CustomLog logs/ssl_request_log \ "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b" </VirtualHost> [root@module ~]# [root@module ~]# systemctl restart httpd [root@module ~]# netstat -tulpn | grep LISTEN tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 10049/httpd tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 10049/httpd tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1226/sshd tcp6 0 0 :::22 :::* LISTEN 1226/sshd
Вот собственно и всё, работает. Доступ из вне идет по https://<DMZ_WAN_DNS&IP>:443 -> IP:443
Доработка от 06.11.2019
Нужно отключить листинг каталогов корня и настроить редирект с http на https
[root@module ~]# nano /etc/httpd/conf/httpd.conf #в ключе <Directory "/var/www/html"> Options -Indexes -FollowSymLinks </Directory> #и в ключах доступа к опубликованным базам созданных соответствующий каталогов: <Directory "/var/www/html/tablet/"> #привести к виду Options -Indexes -FollowSymLinks </Directory> <Directory "/var/www/html/polygon_copy/"> #привести к виду Options -Indexes -FollowSymLinks </Directory> <Directory "/var/www/html/polygon/"> #привести к виду Options -Indexes -FollowSymLinks </Directory> <Directory "/var/www/html/bitrix/"> #привести к виду Options -Indexes -FollowSymLinks </Directory> [root@module ~]# httpd -t [root@module ~]# systemctl restart httpd [root@module ~]# nano /var/www/html/.htaccess RewriteEngine On RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [root@module ~]# chown root:apache /var/www/html/.htaccess [root@module ~]
Итого задача выполнена, настроен запрет листинга корня и настроен редирект.
Заметка реальна и документировалась по мере настройке боевой задачи. С уважением, Олло Александр aka ekzorchik.