Несколько советов напечатанных в журнале Системный Администратор (www.samag.ru)
По умолчанию при аутентификации Службы файлов (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.
Для большей защиты необходимо закрыть доступ к портам 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.