8. Встановлення та конфігурація серверу баз даниз та архівуваня
Дані журналу повідомлень зберігаються в базі даних ШБО під час обміну повідомленнями. Відповідно до схеми розгортання локальних компонентів промислового середовища, зазначена база даних має зберігатися окремо, на сервері баз даних та архівування в захищеному сегменті мережі. Встановлення та налаштування серверу баз даних та архівування виконується Адміністратором локальних компонентів (системним адміністратором).
- 8.1. Встановлення та конфігурація серверу баз даних та архівування
- 8.2.Налаштування підключення ШБО до серверу баз даних та архівування
- 8.3 Налаштування перенесення архівних файлів на сервер баз даних та архівування
8.1. Встановлення та конфігурація серверу баз даних та архівування
Перед початком встановлення віртуальна машина (або фізичний сервер) повинні бути попередньо налаштовані згідно розділів 5.1 та 5.2 даної інструкції.
Примітка. Додатково на зазначеному сервері може бути інстальовано засіб перевірки повідомлень згідно розділу 9 даної інструкції.
Примітка. Передбачається, що доступ до бази даних з шлюзу безпечного обміну попередньо сконфігуровано, в тому числі, на рівні мережі.
Сервер баз даних та архівування являє собою СКБД PostgreSQL. Для її встановлення на сервер баз даних та архівування необхідно:
1. Закрити доступ до сторонніх репозиторіїв за допомогою виконання наступної команди:
sudo sed -i 's/^[A-Za-z0-9]/#&/' /etc/apt/sources.list
2. Додати у операційну систему репозиторій з пакетами системи «Трембіта» за допомогою виконання наступної команди:
echo 'deb https://project-repo.trembita.gov.ua:8081/repository/ss-1.12.6/ bionic main' | sudo tee -a /etc/apt/sources.list
Перевірити результат виконання команд можна за допомогою текстового редактора nano, відкривши файл на редагування за допомогою виконання наступної команди:
sudo nano /etc/apt/sources.list
3. Додати GPG ключ репозиторію за допомогою виконання наступної команди:
sudo wget -O - https://project-repo.trembita.gov.ua:8081//public-keys/public.key.txt | sudo apt-key add -
Якщо команду виконано успішно, буде виведено повідомлення «ОК».
4. Встановити ПЗ СКБД PostgreSQL на сервері баз даних та архівування за допомогою послідовного виконання наступних команд:
sudo apt update
sudo apt install -y postgresql
5. Створити користувача бази даних на сервері баз даних та архівування за допомогою послідовного виконання наступних команд від імені користувача postgres:
sudo -s
su postgres
createuser -P <msglog_user>
де <msglog_user> – логін нового користувача СКБД.
6. Двічі ввести пароль для користувача <msglog_user>.
7. Створити базу даних за допомогою виконання наступної команди від імені користувача postgres:
createdb <msglog_db> -O <msglog_user> -E UTF-8
де <msglog_db> – назва бази даних.
<msglog_user> – логін нового користувача якого було створено на попередньому кроці.
8. Налаштувати дозволи на підключення до сервера баз даних та архівування з ШБО, для чого необхідно виконати наступні дії:
- Здійснити вихід із сесії користувача postgres на сервері баз даних та архівування за допомогою виконання наступної команди:
exit
- Здійснити вихід з привілейованого режиму командного рядка, так само за допомогою команди exit:
exit
- Відкрити на редагування файл /etc/postgresql/10/main/pg_hba.conf, який містить налаштування прав доступу, за допомогою команди:
sudo nano /etc/postgresql/10/main/pg_hba.conf
- Додати у кінець відкритого файлу наступний рядок:
host <msglog_db> <msglog_user> <IP_адреса_ШБО>/32 md5
де <msglog_db>- назва бази даних.
<msglog_user>- логін нового користувача якого було створено вище.
<IP_адреса_ШБО> - ІР-адреса ШБО, до якого буде підключений сервер баз даних та архівування згідно мережевої схеми.
- Закрити редактор, натиснувши комбінацію клавіш «Ctrl+X», далі буде показано повідомлення про підтвердження на збереження змін - необхідно натиснути «Y», а потім «Enter» для збереження.
- Відкрити на редагування файл /etc/postgresql/10/main/postgresql.conf за допомогою наступної команди:
sudo nano /etc/postgresql/10/main/postgresql.conf
- Знайти у файлі рядок з параметром «listen_addresses», розкоментувати його (видалити символ «#» на початку рядка) та замінити значення:
#listen_addresses = 'localhost' # what IP address(es) to listen on;
на:
listen_addresses = '*' # what IP address(es) to listen on;
Примітка. Зазначені зміни внесені для того, щоб дозволити СКБД PostgreSQL приймати мережеві підключення.
- Закрити редактор, натиснувши комбінацію клавіш «Ctrl+X», далі буде показано повідомлення про підтвердження на збереження змін - необхідно натиснути «Y», а потім «Enter» для збереження.
- Перезавантажити сервіс postgresql за допомогою наступної команди:
sudo service postgresql restart
Перевірити коректність налаштувань можна за допомогою команди:
sudo netstat -lnpt|grep 5432
На екрані буде відображено повідомлення, яке має містити два рядки, один з яких повинен мати значення: 0.0.0.0:5432
8.2.Налаштування підключення ШБО до серверу баз даних та архівування
Для перевірки підключення шлюзу безпечного обміну до віддаленої бази даних необхідно:
1. Увійти до командної консолі ШБО
2. Виконати команду:
psql -h <IP_адреса_сервера_баз_даних_та_архівування> -U <msglog_user> <msglog_db>
де <IP_адреса_сервера_баз_даних_та_архівування> - ІР-адреса сервера баз даних та архівування, до якого буде підключений ШБО згідно мережевої схеми;
<msglog_user>- логін користувача СКБД якого було створено раніше;
<msglog_db>- назва бази даних.
3. Ввести пароль користувача msglog_user. Якщо доступ налаштовано коректно, має бути відображено командний рядок СКБД:
psql (9.3.9)
SSL connection (cipher: DHE-RSA-AES256-GCM-SHA384, bits: 256)
Type "help" for help.
msglog_db=>
4. Вийти з командного рядка СКБД, ввівши наступну команду та натиснувши клавішу "Enter":
\q
5. Зупинити сервіс uxp-proxy на ШБО для переконфігурації за допомогою наступної команди:
sudo service uxp-proxy stop
6. Налаштувати параметри підключення бази даних для отримання зашифрованих з’єднань у файлі /etc/uxp/db.properties, відкривши його на редагування:
sudo nano /etc/uxp/db.properties
7. Внести зміни у блок параметрів, що починаються з uac-messagelog, вказавши значення параметрів <"IP_адреса_сервера_баз_даних_та_архівування"> та <"Пароль_користувача_msglog_user"> згідно мережевої схеми
uac-messagelog.hibernate.jdbc.use_streams_for_binary = true
uac-messagelog.hibernate.dialect = ee.ria.xroad.common.db.CustomPostgreSQLDialect
uac-messagelog.hibernate.connection.driver_class = org.postgresql.Driver
uac-messagelog.hibernate.connection.url = jdbc:postgresql://<IP_адреса_сервера_баз_даних_та_архівування>:5432/msglog_db?ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory&
uac-messagelog.hibernate.connection.username = msglog_user
uac-messagelog.hibernate.connection.password = <Пароль_користувача_msglog_user>
8. Заповнити схему бази даних, перевстановивши пакет uxp-addon-uac (він також запустить службу uxp-proxy) шляхом виконання наступної команди:
sudo apt-get install --reinstall uxp-addon-uac
8.3 Налаштування перенесення архівних файлів на сервер баз даних та архівування
Для забезпечення довгострокового збереження архівів повідомлень, прийнятих/переданих через ШБО, необхідно налаштувати процедуру архівування журналу повідомлень до сервера баз даних та архівування. Налаштування виконується Адміністратором локальних компонентів (системним адміністратором).
На ШБО архівні файли (ZIP-контейнери) знаходяться у директорії, що вказана параметром конфігурації archive-path.
Імена архівних файлів виражені у форматі mlog-XYZ.zip, де:
- X – часовий покажчик (час UTC у форматі YYYYMMDDHHmmss) першого запису журналу повідомлень,
- Y – позначка часу останнього запису журналу повідомлень (записи обробляються в хронологічному порядку),
- Z – довільна буквено-цифрова послідовність довжиною 10 символів.
Прикладом назви архівного файлу є:
mlog-20150504152559-20150504152559-a7JS05XAJC.zip
Інсталяційний пакет ШБО містить допоміжний скрипт /usr/share/uxp/scripts/archive-http-transporter.sh, призначений для передачі архівних файлів. Цей скрипт використовує протокол HTTP/HTTPS (метод POST, ім’я форми - файл) для передачі архівних файлів з ШБО на сервер баз даних та архівування.
Для налаштування перенесення архівних файлів на сервер баз даних та архівування необхідно:
1. Увійти до командної консолі ШБО.
2. Відкрити на редагування файл /etc/uxp/conf.d/local.ini за допомогою виконання наступної команди:
sudo nano /etc/uxp/conf.d/local.ini
3. Додати наступний рядок до файлу:
archive-transfer-command=/usr/share/uxp/scripts/archive-http-transporter.sh -r http://IP_адреса_сервера_баз_даних_та_архівування/cgi-bin/upload.pl
де <IP_адреса_сервера_баз_даних_та_архівування> - відповідна IP-адреса сервера баз даних та архівування.
4. Закрити редактор, натиснувши комбінацію клавіш «Ctrl+X», буде показано повідомлення про підтвердження на збереження змін - необхідно натиснути «Y», а потім «Enter» для збереження.
5. Увійти до командної консолі серверу баз даних та архівування
6. Послідовно виконати наступні команди:
sudo apt install apache2 libapache2-mod-perl2 libcgi-session-perl
sudo systemctl restart apache2
sudo a2enmod cgi
sudo mkdir /var/log/uxp_message_log_archive
sudo chown root:www-data /var/log/uxp_message_log_archive
sudo chmod 570 /var/log/uxp_message_log_archive
sudo mkdir /var/www/perl
7. Відкрити на редагування файл /etc/apache2/sites-enabled/000-default.conf за допомогою наступної команди:
sudo nano /etc/apache2/sites-enabled/000-default.conf
8. Додати наступний блок конфігурації перед тегом </VritualHost>:
ScriptAlias /cgi-bin/ /var/www/perl/
<Directory /var/www/perl/>
Options ExecCGI
AddHandler cgi-script cgi pl
</Directory>
9 Створити та відкрити на редагування файл /var/www/perl/upload.pl за допомогою наступної команди:
sudo nano /var/www/perl/upload.pl
10. Додати наступні рядки:
#!/usr/bin/perl -w
use CGI;
use Fcntl;
use strict;
use constant FILE_FIELD => "file";
my $q = new CGI;
# Error handling.
sub err {
# HTTP-header with error status.
print $q->header(-status => "500 @_");
die @_;
}
# Directory where to archive posted files.
my $FILESTORE = '/var/log/uxp_message_log_archive';
# Create archive directory if not exists.
(! -d $FILESTORE) &&
(mkdir $FILESTORE || err("Cannot create directory $FILESTORE"));
# Get file from request.
my $filename = $q->param(FILE_FIELD) || err("Invalid query: missing file name");
my $filehandle = $q->upload(FILE_FIELD);
# Write file from request.
my $buffer;
my $bytesread;
sysopen (OUT, "$FILESTORE/$filename", O_WRONLY | O_EXCL | O_CREAT) ||
err("Cannot open file '$FILESTORE/$filename': $!");
while ((defined($bytesread = read($filehandle, $buffer, 0xffff)) ||
err("Cannot read posted file: $!")) && $bytesread) {
print OUT $buffer;
}
close OUT;
unlink($filehandle);
close($filehandle);
# HTTP header with OK status.
print $q->header();
exit 0;
11. Закрити редактор, натиснувши комбінацію клавіш «Ctrl+X», далі буде показано повідомлення про підтвердження на збереження змін - необхідно натиснути «Y», а потім «Enter» для збереження.
12. Налаштувати права доступу до файлу /var/www/perl/upload.pl за допомогою наступної команди:
sudo chmod +x /var/www/perl/upload.pl
13. Перезавантажити службу apache2 за допомогою наступної команди:
sudo service apache2 restart
Примітка. Архівний файл успішно перенесений, коли сервер баз даних та архівування повертає код статусу HTTP 200.