Назад | Перейти на главную страницу

Как безопасно отправлять логи из вашего приложения?

В настоящее время я настраиваю ведение журнала с помощью Graylog для своей системы, и у меня возникла проблема, заключающаяся в том, что журналы потенциально могут содержать конфиденциальную информацию. Стандартным поведением является отправка журналов в незашифрованном виде через UDP, чтобы предотвратить блокировку приложения. Есть ли способ защитить его, сохранив UDP-соединение? Если Graylog не подходит для этого, я буду рад переключиться на тот, который предлагает эту функцию. Каков ваш опыт, как мне реализовать ведение журнала, если я хочу поддерживать безопасность своего приложения и не хочу вводить задержку при ведении журнала через https?

Есть много вариантов, которые можно сгруппировать вместе для большей конфиденциальности:

  • настроить сетевой регистратор на использование шифрования ... если greylog не поддерживает это, это будет означать использование чего-то другого. Например, rsyslog поддерживает шифрование с TLS.
  • туннелируйте его через VPN, например openvpn, например, с помощью статический ключ что тривиально настроить
  • туннелируйте его через ssh локальный порт вперед

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

Я полностью согласен с ответом Питера, но, чтобы немного расширить, я задаю еще один вопрос: имеете ли вы дело с простыми сообщениями системного журнала или ваше приложение уже отправляет структурированные сообщения в GELF?

Для простого системного журнала проверенной и надежной настройкой является центральный сервер журнала, использующий rsyslog или syslog-ng (оба реализуют транспорт TLS, используйте то, что ваш дистрибутив использует по умолчанию, или тот, который имеет более удобный синтаксис конфигурации). Попросите их собирать все сообщения системного журнала локально и пересылать через TLS на ваш центральный сервер журнала (может быть идентичен вашему серверу Graylog2). Попросите экземпляр на сервере журналов получать все сообщения, при необходимости заархивируйте их на диск (или решите избежать этого риска, если они содержат конфиденциальную информацию), наконец, перенаправьте их на ваш экземпляр Graylog2.

Для структурированных сообщений настройка не так проста. Я не уверен, есть ли надежная поддержка GELF / TCP. Если есть, то вы можете защитить TCP-транспорт с помощью ssh-туннеля или stunnel TLS-соединения. В противном случае вы останетесь с UDP, который несколько сложнее туннелировать, поэтому вам, возможно, придется настроить VPN (с openvpn) для защиты транспорта журнала.