Полезные советы – Bacula

17 Янв
2008

Несколько советов напечатанных в журнале Системный Администратор (www.samag.ru)

Настройка безопасной передачи данных TLS

По умолчанию при аутентификации Службы файлов (File Daemon), Центра управления (Director) и консоли (Bacula Console) используется пара логин и пароль. Пароль по сети передается в зашифрованном CRAM-MD5 виде, который не обеспечивает достаточной защищенности, так как уязвим к plaintext-атаке. Данные по сети передаются в открытом виде, что позволяет их перехватить. Между тем начиная с версии 1.37 в Bacula интегрирована поддержка TLS, что позволяет использовать этот криптографический протокол, для обеспечения безопасной аутентификации и передачи информации в сети. Для этого необходимо выполнить всего несколько действий. Для начала необходимо собрать Bacula, задав при конфигурировании опцию –enable-openssl. После установки генерируем сертификаты.

$ mkdir /etc/ssl/bacula

$ cd /etc/ssl/bacula

# openssl req -new -x509 -config /opt/ssl/openssl.cnf -keyout bacula.pem -out bacula.pem -days 365

Рекомендуется подписать свой сертификат в организациях вроде http://cacert.org/ .Разделяем ключ и сертификат, убираем пароль с ключа.

# /opt/bin/openssl rsa -in bacula.pem -out bacula_server.key

# /opt/bin/openssl x509 -in bacula.pem -out bacula_server.crt

И добавляем в конфигурационные файлы всех компонентов Bacula следующее.

TLS Enable = yes # включение TLS

TLS Require = yes

TLS Verify Peer = yes # включение проверки сертификата клиента (используется только на сервере).

Использование этого параметра позволит проверять все клиентские сертификаты будут проверены на соответствие CN (Common Name, обычно это адрес электронной почты или веб-сайта организации). Все возможные CN прописываются в директиве TLS Allowed CN, которая может быть использована несколько раз, в этом случае будут проверены все варианты.

TLS Allowed CN = «bacula@example.com»

TLS Allowed CN = «administrator@example.com»

Следующей директивой указываем полный путь и имя файла TLS CA сертификата. Допускается наличие нескольких сертификатов в одном файле. Как вариант можно использовать директиву TLS CA Certificate Dir указывающую на каталог, в котором находятся СА сертификаты, которые использовались при подписании. Имена файлов сертификатов и ключей должны иметь pem формат.

TLS CA Certificate File = /etc/ssl/bacula/bacula_server.crt

Проще всего для создания ключей и сертификатов использовать скрипт CA.pl, прописав все необходимые параметры в файл openssl.cnf.

Сертификат и ключ сервера, используемые для шифрования исходящего соединения к клиенту, естественно ключ должен соответствовать сертификату.

TLS Certificate = /etc/ssl/bacula/bacula_server.crt

TLS Key = /etc/ssl/bacula/bacula_server.key

Другим вариантом защиты создания защищенного соединения использование stunnel или ssh туннеля. При создании последнего, вам поможет скрипт ssh-tunnel.sh лежащий в каталоге examples.

Используйте пользователя с минимальными правами

Если на клиентских компьютерах тяжело обойтись без прав root, иначе демон не сможет получить доступ ко всем файлам, то демоны на Director и Storage не обязательно должны запускаться с такими правами (хотя в некоторых случаях для доступа к стриммеру такие права необходимы). Чтобы после установки не мучиться с правами доступа на рабочие каталоги, задать пользователя или группу от имени, которых будет работать демон проще всего при конфигурировании опциями:

–with-dir-user=USER – пользователь для демона Director

–with-dir-group=GROUP – группа-владелец для демона Director

–with-sd-user=USER – пользователь для демона Storage

–with-sd-group=GROUP – группа-владелец для демона Storage

–with-fd-user=USER – пользователь для File Daemon

–with-fd-group=GROUP – группа-владелец для File Daemon

Демон будет стартовать как root, и после выполнения предварительных инициализаций сменит свой id. Аналогично и демон используемой базы данных MySQL или другой не обязательно должен быть запущен с правами root.

Используйте брандмауэр и TCP wrappers

Для большей защиты необходимо закрыть доступ к портам 9101, 9102, 9103 межсетевым экраном, разрешив соединение только с определенных адресов или сетей. При этом следует учитывать следующую схему работы демонов (при настройках по умолчанию):

- Консоль ожидает подключения Центра управления на 9101 порту

- Центр управления ожидает подключения Storage на 9103 порту

- Центр управления ожидает подключения Службы файлов на 9102 порту

- Служба файлов ожидает подключения Storage на 9103 порту

То есть в общем случае правило iptables для сети –s 192.168.0.0/24 выглядит так.

Для сервера.

-A INPUT -p tcp –dport 9101:9103 –s 192.168.0.0/24 -j ACCEPT

И для клиента.

-A INPUT -p tcp –dport 9102 –s 192.168.0.0/24 -j ACCEPT

Использование файлов /etc/hosts.allow или /etc/hosts.deny, также положительно скажется на безопасности. Для этого при конфигурировании Bacula необходимо задать опцию –with-tcp-wrappers. В качестве имени в записываемых правилах, следует использовать имена, записанные в файлах конфигурации в параметре Name, не имя процесса демона. Например, если в секции Name стоят названия main-fd, main-sd и main-dir, записи в этом файле могут быть такими.

main-fd : example.com : allow

main-sd : example.com : allow

main-dir : example.com : allow

main-fd : ALL : deny

main-sd : ALL : deny

main-dir : ALL : deny

После чего проверить правильность записей с помощью утилит tcpdchk и tcpdmatch.

$ tcpdmatch main-fd example.com

warning: main-fd : no such process name in /etc/inetd.conf

client: hostname example.com

client: address 192.168.1.58

server: process main-fd

matched: /etc/hosts.allow line 11

option: allow

access: granted

Кстати параметры signature и verify при определенной сноровке могут заменить утилиты вроде tripwire.

Комментировать

Наверх