Расширенная настройка GitLab

Расширенная настройка GitLab 01Расширенная настройка GitLab подразумевает конфигурирование множества дополнительных компонентов, среди которых я планирую рассмотреть настройку почтовых уведомлений, интеграцию с LDAP, а также настройку Rack attack.


Если вам интересна тематика Debian и связанных с ним приложений, рекомендую обратиться к тегу Debian на моем блоге.


Расширенная настройка GitLab

Ранее я рассматривал установку GitLab с нуля (см. Установка GitLab), теперь же я планирую пролить свет на некоторые дополнительные настройки, о чем ниже.

Настройка почтовых уведомлений

Настройка рассылок по электронной почте крайне желательна, ведь иначе пользователи не смогут получать даже письма для восстановления/сброса пароля.

По умолчанию GitLab использует Postfix в качестве MTA и лично меня это полностью устраивает. Тем не менее, при стандартной установке GitLab 1 из репозиториев Postfix у меня нормально не поставился и выкидывал кучу ошибок при попытке что-либо настроить. В таких ситуациях лучшим вариантом будет переконфигурировать пакет:

dpkg-reconfigure postfix

В процессе работы команды вам будут заданы множество вопросов о конфигурации MTA. На все можете отвечать утвердительно, ответа при этом не меняя (итоговая конфигурация все равно будет задана вручную).

После завершения операции мой конфиг выглядел следующим образом (не рекомендую его слепо копировать, в зависимости от версий Postfix и окружения ваши настройки могут сильно отличаться):

smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no

append_dot_mydomain = no

readme_directory = no

smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
myhostname = gitlab
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = localhost.localdomain, localhost, $mydomain
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 192.168.0.0/23
mailbox_command = procmail -a "$EXTENSION"
mailbox_size_limit = 0
recipient_delimiter = +

inet_interfaces = loopback-only
inet_protocols = all

По умолчанию почта с GitLab на ваши корпоративные серверы доставляться скорее всего не будет, либо начнет попадать в спам. Чтобы избежать этого, добавьте адрес хоста GitLab в белые списки.

Примечание: для углубленного изучения настройки Postfix читайте официальную документацию. В данном примере вас должна интересовать настройка Postfix как null-клиента 2. Также вы можете воспользоваться моими статьями, которые доступны по тегу Unix Mail.

С базовой настройкой почты разобрались.

Расширенная настройка почты

Этот вариант настройки интеграции с почтовыми сервисами я рассматривать не планирую, но и не оставить на него ссылку я не могу 3.

Интеграция с LDAP

В GitLab доступна интеграция 4 с LDAP. Имея инфраструктуру Active Directory, вполне логично воспользоваться данным функционалом.

Открываем конфиг:

nano /etc/gitlab/gitlab.rb

Вставляем кусок кода:

gitlab_rails['ldap_servers'] = YAML.load <<-EOS
main:
 host: '172.16.2.1'
 port: 389
 uid: 'sAMAccountName'
 method: 'plain'
 bind_dn: 'username'
 password: 'Password'
 timeout: 10
 active_directory: true
 allow_username_or_email_login: true
 block_auto_created_users: false
 base: 'DC=corp,DC=bissquit,DC=com'
EOS

Сохраняем изменения и выходим.

Примечание: будьте внимательны, конфиг чувствителен к пробелам и знакам табуляции, которых там быть вообще не должно, иначе при компиляции будете стабильно получать ошибки. Дойти до этого мне помогли отдельные ресурсы 5 6.

Небольшие пояснения по некоторым параметрам секции:

  • host: — адрес хоста, то есть контроллера домена. Можно ввести только один адрес, отказоустойчивая конфигурация доступна в платных версиях GitLab;
  • port: — стандартный порт LDAP;
  • uid: — идентификатор пользователя, по умолчанию sAMAccountName. Это говорит о том, что пользователям нужно будет вводить свой логин AD без конструкций domain\ или @domain.tld. Если вам нужна аутентификация с учетками вида user@domain.tld, то используйте атрибут userPrincipalName;
  • bind_dn: — учетная запись, через которую GitLab будет получать данные из AD. Наделять эту учетку лишними правами не нужно;
  • password: — пароль от учетки, все просто;
  • base: — контейнер для поиска учетных записей. Задайте его в явном виде, если хотите ограничить круг поиска, например определив путь до контейнера с учетными записями отдела разработки ПО. Обратите внимание, что AD чувствителен к регистру букв, путь должен быть в точности как в свойствах контейнера в атрибуте msDS-parentdistname.

Про остальные параметры вы сможете прочитать из официальной документации 7 8, в том числе и других редакций GitLab.

Пересобираем GitLab:

gitlab-ctl reconfigure

Если все пройдет успешно, в конце получите сообщение:

Running handlers:
Running handlers complete
Chef Client finished, 2/301 resources updated in 05 seconds
gitlab Reconfigured!

При вводе неправильных данных будете получать ошибки на подобии этой:

Расширенная настройка GitLab 02

Остается проверить 9 работает ли интеграция:

gitlab-rake gitlab:ldap:check

В идеале вы должны увидеть перечисление всех учетных записей в указанном контейнере AD и в конце:

Checking LDAP ... Finished

Если видите что-то другое, разбирайтесь с конфигом.

Rack attack

Этот механизм 10 представляет из себя своеобразную защиту от DDOS-атак (от «надоедливых» клиентов, как это написано в руководстве). Скорее всего большинство админов и не собираются выставлять GitLab наружу, оставив ему судьбу исключительно внутреннего ресурса. Тем не менее, как минимум нужно указать надежные сети, клиентам из которых разрешено мучать GitLab сколько вздумается.

Для этого открываем конфиг:

nano /etc/gitlab/gitlab.rb

Редактируем секцию:

gitlab_rails['rack_attack_git_basic_auth'] = {
 'enabled' => true,
 'ip_whitelist' => ["127.0.0.1","192.168.0.0/16"],
 'maxretry' => 10,
 'findtime' => 60,
 'bantime' => 3600
 }

Жирным шрифтом выделена подсеть с результирующей маской, добавленная вручную.

Не забываем пересобрать:

gitlab-ctl reconfigure

На этом настройка завершена.

comments powered by HyperComments