Как можно безопасно передавать логи от rsyslog к syslog-ng?

У меня есть несколько серверов, на которых работает rsyslog, и данные собираются на сервере с syslog-ng. Однако некоторые из этих машин находятся за периметром, и мне нужно передавать логи через интернет, что вызывает опасения по поводу безопасности. Я знаю, что можно использовать TLS для шифрования связи между двумя экземплярами rsyslog или двумя экземплярами syslog-ng. Однако, могу ли я зашифровать передачу логов от rsyslog к syslog-ng без дополнительных сложных шагов? Я готов настроить принимающий rsyslog на сервере и затем передавать данные локально в syslog-ng, но хотелось бы минимизировать количество этапов в этом процессе.
  • 28 ноября 2024 г. 9:43
Ответы на вопрос 1
Да, вы можете безопасно передавать логи от rsyslog к syslog-ng через интернет, используя шифрование TLS. Для этого вам не обязательно использовать дополнительные сложные шаги; вы можете настроить rsyslog для шифрования данных с помощью TLS, а затем передать их на syslog-ng. Давайте рассмотрим, как это осуществить.

### Конфигурация rsyslog

1. **Установка необходимых пакетов**: Убедитесь, что у вас установлен rsyslog с поддержкой TLS. Проверить это можно с помощью команды:
   ```bash
   rsyslogd -N1
   ```
   Если поддержка TLS включена, вы увидите соответствующие сообщения.

2. **Создание сертификатов**: Вам нужно создать или получить SSL-сертификаты и ключи для вашего rsyslog-сервера и клиента. Вы можете использовать такие инструменты, как OpenSSL, для создания самоподписанных сертификатов.

   Пример команды для создания сертификата:
   ```bash
   openssl req -x509 -newkey rsa:2048 -keyout private.key -out cert.pem -days 365 -nodes
   ```

3. **Настройка rsyslog для использования TLS**: В конфигурационном файле `rsyslog.conf` или в отдельном файле `/etc/rsyslog.d/10-ssl.conf` добавьте следующие параметры:

   ```conf
   # Установите путь к сертификату и ключу
   global(
       DefaultNetstreamDriver="gtls" # Используйте gtls для Secure TCP
       DefaultNetstreamDriverMode="1"  # 1 - требуется шифрование
       DefaultNetstreamDriverAuthMode="x509/name"
   )

   # Настройка для отправки логов
   *.*     @@<адрес_сервера_syslog-ng>:514  # Используйте @@ для TCP
   ```

### Конфигурация syslog-ng

4. **Настройка syslog-ng для получения log через SSL**: На сервере с syslog-ng выполните следующие действия:

   1. Убедитесь, что вы установили необходимые модули для поддержки TLS.

   2. Настройте `syslog-ng.conf` для приема подключений по TLS:

   ```conf
   @version: 3.29

   source s_net {
       tcp(port(514)
           tls(
               key-file("/path/to/private.key")
               cert-file("/path/to/cert.pem")
               ca-dir("/path/to/ca/dir")
           )
       );
   };

   destination d_log {
       file("/var/log/remote/$HOST/$YEAR$MONTH$DAY.log");
   };

   log {
       source(s_net);
       destination(d_log);
   };
   ```

5. **Перезапустите обе службы** для применения настроек.

### Проверка соединения

6. **Тестирование**: Проверьте, что логи действительно передаются через зашифрованное соединение. Вы можете использовать инструменты мониторинга сети или журналы на обеих сторонах, чтобы убедиться, что логи отправляются и принимаются.

### Примечание

Если вы не хотите использовать дополнительные сложности или хотите избежать настройки TLS, альтернативой будет использование VPN для безопасной передачи логов. Но это требует дополнительных шагов, связанных с установкой и настройкой VPN-сервера и клиента.

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