Перенаправление журналов syslog-ng через TLS

Вопрос или проблема

Вот сценарий: у меня есть сервер, который прослушивает порт 6514 по TCP для логов. Я создал файлы .key и .crt на сервере, как описано здесь: https://www.logzilla.net/2014/10/17/configuring-tls-tunnels-in-syslog-ng.html:

   [root@server1 ~]$ openssl genrsa -des3 -out logserver.key 2048
   Генерация закрытого ключа RSA, длина 2048 бит
   .................................................+++
   .+++
   e равно 65537 (0x10001)
   Введите пароль для logserver.key:
   Подтверждение - Введите пароль для logserver.key:
   [root@server1 ~]$ openssl req -new -key logserver.key -out logserver.csr
   Введите пароль для logserver.key:
   Вам будет предложено ввести информацию, которая будет включена
   в ваш запрос на сертификат.
   То, что вы собираетесь ввести, называется Отличительным именем или 
   DN.
   Есть довольно много полей, но вы можете оставить некоторые пустыми.
   Для некоторых полей будет значение по умолчанию,
   Если вы введете '.', поле останется пустым.
   -----
   Название страны (код из 2 букв) [XX]:
   Название штата или провинции (полное название) []:
   Название местности (например, город) [Default City]:
   Название организации (например, компания) [Default Company Ltd]:
   Название организационного подразделения (например, отдел) []:
   Общее имя (например, ваше имя или имя вашего сервера) []:
   Адрес электронной почты []:

   Пожалуйста, введите следующие 'дополнительные' атрибуты
   которые будут отправлены с вашим запросом на сертификат
   Пароль для проверки []:
   Необязательно название компании []:
   [root@server1 ~]$ cp logserver.key logserver.key.org
   [root@server1 ~]$ openssl rsa -in logserver.key.org -out logserver.key
   Введите пароль для logserver.key.org:
   запись ключа RSA
   [root@server1 ~]$ openssl x509 -req -days 365 -in logserver.csr -signkey 
   logserver.key -out logserver.crt
   Подпись выполнена успешно
   subject=/C=XX/L=Default City/O=Default Company Ltd
   Получение закрытого ключа

и разместил настройки в созданном файле с именем tls.conf в /etc/syslog-ng/conf.d

Я следовал следующим инструкциям.
Подключитесь к клиенту и выполните mkdir -p /etc/syslog-ng/ssl. Загрузите/скачайте файл /etc/syslog-ng/ssl/logserver.crt (который был создан ранее на сервере) на систему клиента и поместите файл в /etc/syslog-ng/ssl на клиенте.

Найдите хэш для вашего ключа, выполнив openssl x509 -noout -hash -in /etc/syslog-ng/ssl/logserver.crt

Затем создайте символическую ссылку на сертификат, используя хэш, возвращенный предыдущей командой, с добавленным суффиксом .0.

ln -s /etc/syslog-ng/ssl/logserver.crt /etc/syslog-ng/ssl/84d92a45.0

Как только я добавляю client-to-server.conf под /etc/syslog-ng/conf.d/client-to-server.conf, в котором указано следующее

@version:3.14
@define allow-config-dups 1
@include "scl.conf"
destination d_tls {
      tcp("192.168.1.7" port(6514)
      tls( ca_dir("/etc/syslog-ng/ssl/")) );
  };

  log {
      source(s_sys);
      destination(d_tls);
  };

сервис syslog-ng не запускается на клиенте.

  systemctl restart syslog-ng.service
  Задание для syslog-ng.service не удалось, потому что контрольный процесс завершился с 
  кодом ошибки. См. "systemctl status syslog-ng.service" и "journalctl -xe" 
  для получения подробной информации.



    [root@localhost conf.d]# systemctl status syslog-ng.service -l
● syslog-ng.service - Демон системного журнала
   Загрузили: загружен (/usr/lib/systemd/system/syslog-ng.service; включено; предустановленный поставщиком: включено)
   Активно: не удалось (Результат: лимит запуска) с Чт 2018-06-07 22:50:30 EEST; 7 мин. назад
     Документы: man:syslog-ng(8)
  Процесс: 18196 ExecStart=/usr/sbin/syslog-ng -F $SYSLOGNG_OPTS -p /var/run/syslogd.pid (код=вышел, статус=2)
 Основной PID: 18196 (код=вышел, статус=2)
   Статус: "Запуск... (Чт Июн  7 22:50:30 2018"

Июн 07 22:50:30 localhost.localdomain systemd[1]: syslog-ng.service: главный процесс вышел, код=вышел, статус=2/INVALIDARGUMENT
Июн 07 22:50:30 localhost.localdomain systemd[1]: Не удалось запустить демон системного журнала.
Июн 07 22:50:30 localhost.localdomain systemd[1]: Юнит syslog-ng.service вошел в состояние неудачи.
Июн 07 22:50:30 localhost.localdomain systemd[1]: syslog-ng.service не удался.
Июн 07 22:50:30 localhost.localdomain systemd[1]: время ожидания syslog-ng.service истекло, планирование перезапуска.
Июн 07 22:50:30 localhost.localdomain systemd[1]: запрос на запуск повторяется слишком быстро для syslog-ng.service
Июн 07 22:50:30 localhost.localdomain systemd[1]: Не удалось запустить демон системного журнала.
Июн 07 22:50:30 localhost.localdomain systemd[1]: Юнит syslog-ng.service вошел в состояние неудачи.
Июн 07 22:50:30 localhost.localdomain systemd[1]: syslog-ng.service не удался.

[root@localhost conf.d]# journalctl -xe
-- Тема: Юнит syslog-ng.service начал запуск
-- Определено: systemd
-- Поддержка: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- 
-- Юнит syslog-ng.service начал запуск.
Июн 07 22:50:30 localhost.localdomain syslog-ng[18190]: [2018-06-07T22:50:30.022361] Ошибка настройки контекста TLS-сессии; tls_error="(null):(null):(null)"
Июн 07 22:50:30 localhost.localdomain syslog-ng[18190]: [2018-06-07T22:50:30.022410] Ошибка инициализации конвейера сообщений; название плагина="tcp", местоположение='/etc/syslog-ng/conf.d/client-to-server.conf:5:7'
Июн 07 22:50:30 localhost.localdomain systemd[1]: syslog-ng.service: главный процесс вышел, код=вышел, статус=2/INVALIDARGUMENT
Июн 07 22:50:30 localhost.localdomain systemd[1]: Не удалось запустить демон системного журнала.
-- Тема: Юнит syslog-ng.service завершил работу
-- Определено: systemd
-- Поддержка: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- 
-- Юнит syslog-ng.service завершил работу.
-- 
-- Результат неудачный.
Июн 07 22:50:30 localhost.localdomain systemd[1]: Юнит syslog-ng.service вошел в состояние неудачи.
Июн 07 22:50:30 localhost.localdomain systemd[1]: syslog-ng.service не удался.
Июн 07 22:50:30 localhost.localdomain systemd[1]: время ожидания syslog-ng.service истекло, планирование перезапуска.
Июн 07 22:50:30 localhost.localdomain systemd[1]: Запуск демона системного журнала...
-- Тема: Юнит syslog-ng.service начал запуск
-- Определено: systemd
-- Поддержка: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- 
-- Юнит syslog-ng.service начал запуск.
Июн 07 22:50:30 localhost.localdomain syslog-ng[18193]: [2018-06-07T22:50:30.281966] Ошибка настройки контекста TLS-сессии; tls_error="(null):(null):(null)"
Июн 07 22:50:30 localhost.localdomain syslog-ng[18193]: [2018-06-07T22:50:30.282017] Ошибка инициализации конвейера сообщений; название плагина="tcp", местоположение='/etc/syslog-ng/conf.d/client-to-server.conf:5:7'
Июн 07 22:50:30 localhost.localdomain systemd[1]: syslog-ng.service: главный процесс вышел, код=вышел, статус=2/INVALIDARGUMENT
Июн 07 22:50:30 localhost.localdomain systemd[1]: Не удалось запустить демон системного журнала.
-- Тема: Юнит syslog-ng.service завершил работу
-- Определено: systemd
-- Поддержка: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- 
-- Юнит syslog-ng.service завершил работу.
-- 
-- Результат неудачный.
Июн 07 22:50:30 localhost.localdomain systemd[1]: Юнит syslog-ng.service вошел в состояние неудачи.
Июн 07 22:50:30 localhost.localdomain systemd[1]: syslog-ng.service не удался.
Июн 07 22:50:30 localhost.localdomain systemd[1]: время ожидания syslog-ng.service истекло, планирование перезапуска.
Июн 07 22:50:30 localhost.localdomain systemd[1]: Запуск демона системного журнала...
-- Тема: Юнит syslog-ng.service начал запуск
-- Определено: systemd
-- Поддержка: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- 
-- Юнит syslog-ng.service начал запуск.
Июн 07 22:50:30 localhost.localdomain syslog-ng[18196]: [2018-06-07T22:50:30.522580] Ошибка настройки контекста TLS-сессии; tls_error="(null):(null):(null)"
Июн 07 22:50:30 localhost.localdomain syslog-ng[18196]: [2018-06-07T22:50:30.522870] Ошибка инициализации конвейера сообщений; название плагина="tcp", местоположение='/etc/syslog-ng/conf.d/client-to-server.conf:5:7'
Июн 07 22:50:30 localhost.localdomain systemd[1]: syslog-ng.service: главный процесс вышел, код=вышел, статус=2/INVALIDARGUMENT
Июн 07 22:50:30 localhost.localdomain systemd[1]: Не удалось запустить демон системного журнала.
-- Тема: Юнит syslog-ng.service завершил работу
-- Определено: systemd
-- Поддержка: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- 
-- Юнит syslog-ng.service завершил работу.
-- 
-- Результат неудачный.
Июн 07 22:50:30 localhost.localdomain systemd[1]: Юнит syslog-ng.service вошел в состояние неудачи.
Июн 07 22:50:30 localhost.localdomain systemd[1]: syslog-ng.service не удался.
Июн 07 22:50:30 localhost.localdomain systemd[1]: время ожидания syslog-ng.service истекло, планирование перезапуска.
Июн 07 22:50:30 localhost.localdomain systemd[1]: запрос на запуск повторяется слишком быстро для syslog-ng.service
Июн 07 22:50:30 localhost.localdomain systemd[1]: Не удалось запустить демон системного журнала.
-- Тема: Юнит syslog-ng.service завершил работу
-- Определено: systemd
-- Поддержка: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- 
-- Юнит syslog-ng.service завершил работу.
-- 
-- Результат неудачный.
Июн 07 22:50:30 localhost.localdomain systemd[1]: Юнит syslog-ng.service вошел в состояние неудачи.
Июн 07 22:50:30 localhost.localdomain systemd[1]: syslog-ng.service не удался.

Что я делаю не так?

Раздел конфигурации клиента syslog-ng с tls для вас должен выглядеть следующим образом:

destination d_tls {
    network("192.168.1.7" port(6514)
        transport("tls")
        tls( ca-dir("/etc/syslog-ng/ssl/ca.d")
             key-file("/etc/syslog-ng/ssl/mykey.key")
             cert-file("/etc/syslog-ng/ssl/mykey.pem")) );
};
log {
    source(s_sys);
    destination(d_tls);
};

Ответ или решение

Настройка передачи логов syslog-ng через TLS

В данной статье мы рассмотрим, как правильно настроить передачу логов syslog-ng через TLS (Transport Layer Security) на примере клиента и сервера. Глядя на вашу конфигурацию, давайте разберем, что может быть не так и как исправить проблемы.

Исходные данные

У вас есть сервер, который прослушивает порт 6514 по протоколу TCP для получения логов. Вы создали ключи и сертификаты, и разместили их на сервере, следуя указаниям. После этого вы настраивали клиент для отправки логов на сервер с использованием TLS, но служба syslog-ng на клиенте не запускается.

Потенциальные проблемы

  1. Ошибки в конфигурации: Прежде всего, необходимо убедиться, что содержание конфигурационных файлов корректно. Ошибка, с которой вы столкнулись, указывает на проблемы с настройками TLS.

  2. Кэш сертификатов: Убедитесь, что серверный сертификат добавлен в «hash» на клиентской машине и что папка для CA правильно настроена.

  3. Несоответствия в ключах и сертификатах: Убедитесь, что клиентский ключ и сертификат соответствуют загружаемым, а также что они расположены в правильных директориях.

Исправление конфигурации

Конфигурация сервера (server.conf):

На сервере должна быть секция TLS. Убедитесь, что она настроена аналогично следующему примеру:

destination d_tls {
    network(0.0.0.0 port(6514) 
        transport("tls") 
        tls(
            key-file("/etc/syslog-ng/ssl/logserver.key")
            cert-file("/etc/syslog-ng/ssl/logserver.crt")
            ca-dir("/etc/syslog-ng/ssl/")
        )
    );
};

Конфигурация клиента (client-to-server.conf):

Убедитесь, что конфигурация клиента выглядит так:

@version:3.14
@define allow-config-dups 1
@include "scl.conf"
destination d_tls {
    network("192.168.1.7" port(6514)
        transport("tls")
        tls(
            key-file("/etc/syslog-ng/ssl/mykey.key")
            cert-file("/etc/syslog-ng/ssl/mykey.pem")
            ca-dir("/etc/syslog-ng/ssl/")
        )
    );
};

log {
    source(s_sys);
    destination(d_tls);
};

Проверка сертификатов

Подтвердите, что сертификат был корректно скопирован на клиент и что символическая ссылка создана корректно:

openssl x509 -noout -hash -in /etc/syslog-ng/ssl/logserver.crt
ln -s /etc/syslog-ng/ssl/logserver.crt /etc/syslog-ng/ssl/<ваш_хэш>.0

Не забудьте также указать путь к файлу сертификата и ключа, используя соответствующие параметры в конфигурации.

Логи и диагностика

Запустите команду для просмотра логов syslog-ng:

journalctl -xe

Это даст вам возможность не только увидеть возможные ошибки, но и указывает, где именно в конфигурации произошла проблема. В случае, если ошибка Error setting up TLS session context продолжает появляться, проверьте, корректно ли настроены все пути к сертификатам и ключам.

Заключение

После внесения всех вышеперечисленных правок, попробуйте снова запустить службу syslog-ng на клиенте:

systemctl restart syslog-ng.service

Убедитесь, что сервис теперь успешно стартует. В случае новых проблем, снова проверяйте логи для выявления других потенциальных ошибок. Следуя этим шагам, вы сможете наладить безопасную передачу логов между вашим клиентом и сервером с использованием TLS.

Оцените материал
Добавить комментарий

Капча загружается...