Рубрика:
Безопасность /
Угрозы
|
Facebook
Мой мир
Вконтакте
Одноклассники
Google+
|
Полезные советы по Bacula
Настройка безопасной передачи данных 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.
Используйте брандмауэр и 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.
Сергей Яремчук
Facebook
Мой мир
Вконтакте
Одноклассники
Google+
|