ALTSOGO: различия между версиями
Vovan (обсуждение | вклад) (→Файл 10-auth.conf) |
Vovan (обсуждение | вклад) (→Файл 10-mail.conf) |
||
Строка 681: | Строка 681: | ||
<pre> | <pre> | ||
cat << 'EOF' > 10-mail.conf | cat << 'EOF' > 10-mail.conf | ||
− | + | mail_location = maildir:/var/mail/%d/%n:UTF-8:INBOX=/var/mail/%d/%n/Inbox | |
+ | mail_uid = mail | ||
+ | mail_gid = mail | ||
+ | first_valid_uid = 5 | ||
+ | first_valid_gid = 5 | ||
EOF | EOF | ||
</pre> | </pre> |
Версия 21:35, 5 августа 2025
Содержание
План
1. Ставим ALT DC
2. Ставим PostgreSQL сервер
3. Ставим SOGO и настраиваем его на ALT DC и PostgreSQL
4. Настраиваем Postfix и Dovecot на работу с ALT DC
5. Радуемся (наверное)...
Делаем всё на Alt Starterkit GNOME P11, опираясь на документацию от P10 (на момент создания этой статьи для P11 официальной документации не было):
Ставим ALT DC
После обновления системы и ядра...
Выставляем часовой пояс и синхронизируем время
timedatectl set-timezone Europe/Moscow ntpdate pool.ntp.org
Отключаем сервисы и устанавливаем необходимые пакеты
for service in smb nmb; do systemctl disable $service; systemctl stop $service; done apt-get install -y task-samba-dc admc
Подготовка конфигурационных файлов ситемы
Задаём имя хоста
hostnamectl set-hostname dc.domain.alt
Также проверить и при необходимости поправить имя хоста в файле
/etc/sysconfig/network
Перезагрузиться для проверки
reboot
Далее настраиваем 127.0.0.1 в качестве DNS сервера системы (далее в команде создания домена мы добавим возможность для этого DNS сервера делать запросы к внешним DNS серверам)
cat << EOF > /etc/resolv.conf search alt nameserver 127.0.0.1 EOF
Здесь приведена команда конфигурирования файла /etc/hosts, исходя из того, что у настраиваемого сервера локальный IP-адрес: 192.168.1.246
cat << EOF > /etc/hosts 192.168.1.246 dc.domain.alt domain.alt 127.0.0.1 localhost EOF
Создание домена одной командой
Перед выполнением команды создания домена нужно удалить конфигурационный файл:
/bin/rm -rf /etc/samba/smb.conf /var/lib/samba /var/cache/samba mkdir -p /var/lib/samba/sysvol
Для домена
domain.alt
с паролем
Pa$$word
и адресом внешнего DNS сервера
8.8.8.8
команда создания домена будет такой:
samba-tool domain provision --realm=domain.alt --domain domain --adminpass='Pa$$word' --dns-backend=SAMBA_INTERNAL --server-role=dc --option="dns forwarder=8.8.8.8"
Включение сервиса и проверка работы домена
Включение
systemctl enable --now samba
Проверка
samba-tool domain info 127.0.0.1
В ответ должно прилететь что-то типа этого:
Forest : domain.alt Domain : domain.alt Netbios domain : DOMAIN DC name : dc.domain.alt DC netbios name : DC Server site : Default-First-Site-Name Client site : Default-First-Site-Name
Настройка Kerberos
/bin/cp /var/lib/samba/private/krb5.conf /etc/krb5.conf
Запуск ADMC
ADMC -- графическая утилита. Поэтому желательно на сервере иметь графику.
В этой статье контроллер домена развёртывается на базе Alt Starterkit GNOME P11, поэтому с наличием графики проблем нет (да и кого волнует в 21 веке лишние пару сотен мегабайт на диске виртуальной машины).
Для корректной работы приложения ADMC необходимо получить билет Kerberos командой
kinit Administrator
В ответ необходимо ввести пароль от доменного администратора.
ВАЖНО! Иногда стоит эту команду вводить вручную, а не полагаться на написанный скрипт (про скрипт буквально ченез несколько строчек ниже будет), поскольку
иногда утилита
kinit
предупреждает об устаревании пароля и необходимости его поменять. Также не забываем после смены пароля изменять его в скрипте...
Собственно, про скрипт: Чтобы это автоматизировать, можно, например, сделать скрипт автоматического запуска ADMC.
В примере создаётся скрипт в файле
/opt/admc.sh
для запуска ADMC с получением билета для пользователя
Administrator с паролем
Pa$$word
Пример heredoc-команды:
cat << 'EOF' > /opt/admc.sh #!/bin/bash echo 'Pa$$word' | kinit Administrator admc EOF
chmod +x /opt/admc.sh
Ставим PostgreSQL сервер
Установка
apt-get install -y postgresql17-server postgresql17-contrib
Первоначальный запуск
/etc/init.d/postgresql initdb
ВНИМАНИЕ!
Два последующих конфигурационных файла будут созданы без лишних комментариев внутри только для ускорения процесса демонстрации. Поэтому предварительно для них будут созданы резервные копии, в которые настоятельно рекомендуется хотя-бы один раз заглянуть, чтобы понять, что параметров значительно больше чем необходимых и достаточных для работы!
Делаем резервные копии
cp /var/lib/pgsql/data/pg_hba.conf /var/lib/pgsql/data/pg_hba.conf.backup cp /var/lib/pgsql/data/postgresql.conf /var/lib/pgsql/data/postgresql.conf.backup
Далее используем heredoc-синтаксис, потому что мы ленивы и прагматичны...
cat << 'EOF' > /var/lib/pgsql/data/pg_hba.conf # TYPE DATABASE USER ADDRESS METHOD # "local" is for Unix domain socket connections only local all all trust # IPv4 local connections: host all all 127.0.0.1/32 trust host all all 0.0.0.0/0 md5 # Allow replication connections from localhost, by a user with the # replication privilege. local replication all trust host replication all 127.0.0.1/32 trust EOF
cat << 'EOF' > /var/lib/pgsql/data/postgresql.conf listen_addresses = '*' # what IP address(es) to listen on; max_connections = 100 # (change requires restart) shared_buffers = 128MB # min 128kB dynamic_shared_memory_type = posix # the default is usually the first option max_wal_size = 1GB min_wal_size = 80MB log_destination = 'stderr' # Valid values are combinations of logging_collector = on # Enable capturing of stderr, jsonlog, log_directory = 'log' # directory where log files are written, log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log' # log file name pattern, log_file_mode = 0600 # creation mode for log files, log_rotation_size = 10MB # Automatic rotation of logfiles will log_min_messages = warning # values in order of decreasing detail: log_checkpoints = off log_connections = off log_disconnections = off log_timezone = UTC datestyle = 'iso, mdy' timezone = UTC default_text_search_config = 'pg_catalog.english' EOF
systemctl enable --now postgresql
Создаём пользователя и базу данных для SOGO:
su - postgres -s /bin/sh -c 'createuser --no-superuser --no-createdb --no-createrole sogo' su - postgres -s /bin/sh -c 'createdb -O sogo sogo'
Перезапускаем сервис
systemctl restart postgresql
Проверяем
psql -U sogo sogo -c "\l"
Ставим SOGO и настраиваем его на ALT DC и PostgreSQL
Ставим SOGO
apt-get install -y task-sogo
Настройка Samba DC
Для этого места была настройка контроллера домена, описанная в разделе 1.1 этой статьи.
Итак, создаём в домене пользователя sogo с паролем
Pa$$word
(при запросе дважды ввести пароль):
samba-tool user create sogo samba-tool user setexpiry --noexpiry sogo
Создание конфигурационного файла для SOGO
Сделаем резервную копию старого конфига:
cp /etc/sogo/sogo.conf /etc/sogo/sogo.conf.backup
Здесь конфигурационный файл приведён для домена
domain.alt
Для другого домена рекомендуется в тексте содержимого файла предварительно заменить поочерёдно слова
domain
и
alt
на части необходимого доменного имени.
Также, конфигурационный файл предполагает подключение к домену, работающему на
127.0.0.1
под пользователем
sogo
с паролем
Pa$$word
Исходя из этого, можно скорректировать текст конфигурационного файла при необходимости!
Создать файл одной heredoc-командой:
cat << 'EOF' > /etc/sogo/sogo.conf { SOGoProfileURL = "postgresql://sogo@/sogo/sogo_user_profile"; OCSFolderInfoURL = "postgresql://sogo@/sogo/sogo_folder_info"; OCSSessionsFolderURL = "postgresql://sogo@/sogo/sogo_sessions_folder"; OCSEMailAlarmsFolderURL = "postgresql://sogo@/sogo/sogo_alarms_folder"; SOGoEnableEMailAlarms = YES; SOGoDraftsFolderName = Drafts; SOGoSentFolderName = Sent; SOGoTrashFolderName = Trash; SOGoIMAPServer = "imaps://localhost:993/?tlsVerifyMode=allowInsecureLocalhost"; SOGoMailingMechanism = sendmail; SOGoForceExternalLoginWithEmail = NO; NGImap4ConnectionStringSeparator = "/"; SOGoUserSources = ( { id = sambaLogin; displayName = "SambaLogin"; canAuthenticate = YES; type = ldap; CNFieldName = cn; IDFieldName = cn; UIDFieldName = sAMAccountName; hostname = "ldaps://127.0.0.1"; baseDN = "CN=Users,DC=domain,DC=alt"; bindDN = "CN=sogo,CN=Users,DC=domain,DC=alt"; bindPassword = "Pa$$word"; bindFields = (sAMAccountName); }, { id = sambaShared; displayName = "Shared Addressbook"; canAuthenticate = NO; isAddressBook = YES; type = ldap; CNFieldName = cn; IDFieldName = mail; UIDFieldName = mail; hostname = "ldaps://127.0.0.1"; baseDN = "CN=Users,DC=domain,DC=alt"; bindDN = "CN=sogo,CN=Users,DC=domain,DC=alt"; bindPassword = "Pa$$word"; filter = "((NOT isCriticalSystemObject='TRUE') AND (mail='*') AND (NOT objectClass=contact))"; }, { id = sambaContacts; displayName = "Shared Contacts"; canAuthenticate = NO; isAddressBook = YES; type = ldap; CNFieldName = cn; IDFieldName = mail; UIDFieldName = mail; hostname = "ldaps://127.0.0.1"; baseDN = "CN=Users,DC=domain,DC=alt"; bindDN = "CN=sogo,CN=Users,DC=domain,DC=alt"; bindPassword = "Pa$$word"; filter = "((((objectClass=person) AND (objectClass=contact) AND ((uidNumber>=2000) OR (mail='*'))) AND (NOT isCriticalSystemObject='TRUE') AND (NOT showInAdvancedViewOnly='TRUE') AND (NOT uid=Guest)) OR (((objectClass=group) AND (gidNumber>=2000)) AND (NOT isCriticalSystemObject='TRUE') AND (NOT showInAdvancedViewOnly='TRUE')))"; mapping = { displayname = ("cn"); }; } ); SOGoSieveScriptsEnabled = YES; SOGoLanguage = Russian; SOGoTimeZone = Europe/Moscow; SOGoFirstDayOfWeek = 1; } EOF
Включение и перезапуск служб
for service in samba postgresql memcached sogo httpd2; do systemctl enable $service; systemctl restart $service; done
Где смотреть ошибки?
Возможные ошибки будут записаны в файл журнала
/var/log/sogo/sogo.log
Включение веб-интерфейса
a2enmod proxy a2enmod proxy_http a2enmod authn_core a2enmod authn_file a2enmod auth_basic a2enmod authz_user a2enmod env a2enmod dav a2enmod headers a2enmod rewrite a2enmod version a2enmod setenvif a2ensite SOGo service httpd2 restart service sogo restart
Проверка доступности веб-интерфейса: http://адрес_сервера/SOGo/
Каким пользователем заходить в веб-интерфейс?
Входить пользователями домена. Добавлять через ADMC или через консольную утилиту.
Настройка электронной почты
Донастройка SambaDC
Доступ к серверу LDAP осуществляется по протоколу ldap без шифрования.
Для SambaDC отключаем обязательный ldaps. Для этого в файле
/etc/samba/smb.conf
в секцию
[global]
добавляем параметр
ldap server require strong auth = no
Рестартуем сервис
systemctl restart samba
Создание пользователя в Active Directory
Создаём пользователя vmail с не истекающей учётной записью и паролем
Pa$$word
(пароль нужно будет два раза ввести после выполнения первой команды):
samba-tool user create -W Users vmail samba-tool user setexpiry vmail --noexpiry
Настройка Postfix
Устанавливаем пакет
apt-get install -y postfix-ldap
Делаем резервные копии конфигурационных файлов
cd /etc/postfix
cp main.cf main.cf.backup cp master.cf master.cf.backup
Настраиваем конфигурационные файлы heredoc-командами, исходя из названия домена
domain.alt
Файл main.cf
cat << 'EOF' > main.cf # Global Postfix configuration file. This file lists only a small subset # of all parameters. For the syntax, and for a complete parameter list, # see the postconf(5) manual page. For a commented and more complete # version of this file see /etc/postfix/main.cf.dist mailbox_command = /usr/bin/procmail -a $DOMAIN -d $LOGNAME inet_protocols = ipv4 # Mappings virtual_mailbox_base = /var/mail virtual_mailbox_domains = domain.alt virtual_mailbox_maps = ldap:/etc/postfix/ad_local_recipients.cf virtual_alias_maps = ldap:/etc/postfix/ad_mail_groups.cf virtual_transport = dovecot local_transport = virtual local_recipient_maps = $virtual_mailbox_maps # SSL/TLS smtpd_use_tls = yes smtpd_tls_security_level = encrypt #smtpd_tls_security_level = may smtpd_sasl_auth_enable = yes smtpd_sasl_local_domain = domain.alt smtpd_sasl_path = private/auth smtpd_sasl_type = dovecot smtpd_sender_login_maps = ldap:/etc/postfix/ad_sender_login.cf smtpd_tls_auth_only = yes smtpd_tls_cert_file = /var/lib/ssl/certs/dovecot.cert smtpd_tls_key_file = /var/lib/ssl/private/dovecot.key smtpd_tls_CAfile = /var/lib/ssl/certs/dovecot.pem smtpd_recipient_restrictions = permit_mynetworks, reject_unauth_destination, permit_sasl_authenticated, reject smtpd_sender_restrictions = reject_authenticated_sender_login_mismatch default_destination_recipient_limit = 1 EOF
Файл master.cf
cat << 'EOF' > master.cf # # Postfix master process configuration file. For details on the format # of the file, see the master(5) manual page (command: "man 5 master" or # on-line: http://www.postfix.org/master.5.html). # # Do not forget to execute "service postfix reload" after editing this file. # # ========================================================================== # service type private unpriv chroot wakeup maxproc command + args # (yes) (yes) (yes) (never) (100) # ========================================================================== pickup fifo n - y 60 1 pickup cleanup unix n - y - 0 cleanup qmgr fifo n - y 300 1 qmgr tlsmgr unix - - y 1000? 1 tlsmgr rewrite unix - - y - - trivial-rewrite bounce unix - - y - 0 bounce defer unix - - y - 0 bounce trace unix - - y - 0 bounce verify unix - - y - 1 verify flush unix n - y 1000? 0 flush proxymap unix - - n - - proxymap proxywrite unix - - n - 1 proxymap smtp unix - - y - - smtp relay unix - - y - - smtp -o syslog_name=postfix/$service_name showq unix n - y - - showq error unix - - y - - error retry unix - - y - - error discard unix - - y - - discard local unix - n n - - local virtual unix - n n - - virtual lmtp unix - - y - - lmtp anvil unix - - y - 1 anvil scache unix - - y - 1 scache postlog unix-dgram n - y - 1 postlogd # ==================================================================== # Interfaces to non-Postfix software. Be sure to examine the manual # pages of the non-Postfix software to find out what options it wants. # # Many of the following services use the Postfix pipe(8) delivery # agent. See the pipe(8) man page for information about ${recipient} # and other message envelope options. # ==================================================================== filter unix - n n - 10 pipe flags=Rq user=_filter argv=content-filter -f ${sender} -- ${recipient} dovecot unix - n n - - pipe flags=DRhu user=mail:mail argv=/usr/libexec/dovecot/deliver -d ${recipient} smtps inet n - n - - smtpd -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes -o smtpd_client_restrictions=permit_sasl_authenticated,reject EOF
Файл ad_local_recipients.cf
cat << 'EOF' > ad_local_recipients.cf version = 3 server_host = domain.alt:389 search_base = dc=domain,dc=alt scope = sub query_filter = (&(|(mail=%s)(otherMailbox=%u@%d))(sAMAccountType=805306368)) result_filter = %s result_attribute = mail special_result_attribute = member bind = yes bind_dn = cn=vmail,cn=users,dc=domain,dc=alt bind_pw = Pa$$word EOF
Файл ad_mail_groups.cf
cat << 'EOF' > ad_mail_groups.cf version = 3 server_host = domain.alt:389 search_base = dc=domain,dc=alt timeout = 3 scope = sub query_filter = (&(mail=%s)(sAMAccountType=268435456)) result_filter = %s leaf_result_attribute = mail special_result_attribute = member bind = yes bind_dn = cn=vmail,cn=users,dc=domain,dc=alt bind_pw = Pa$$word EOF
Файл ad_sender_login.cf
cat << 'EOF' > ad_sender_login.cf version = 3 server_host = domain.alt:389 search_base = dc=domain,dc=alt scope = sub query_filter = (&(objectClass=user)(|(sAMAccountName=%s)(mail=%s))) result_attribute = mail bind = yes bind_dn = cn=vmail,cn=users,dc=domain,dc=alt bind_pw = Pa$$word EOF
Включаем и перезагружаем сервис
systemctl enable --now postfix service postfix reload
Тестируем работу
Проверка конфигурации Postfix (не должно быть никаких сообщений:
postconf >/dev/null
Настройка Dovecot
Устанавливаем пакет
apt-get install -y dovecot
Делаем резервные копии конфигурационных файлов
cd /etc/dovecot/conf.d cp 10-auth.conf 10-auth.conf.backup cp 10-mail.conf 10-mail.conf.backup cp 10-master.conf 10-master.conf.backup cp 15-lda.conf 15-lda.conf.backup cp 15-mailboxes.conf 15-mailboxes.conf.backup
Настраиваем конфиги посредством heredoc-команд
cd /etc/dovecot
Файл dovecot-ldap.conf.ext
cat << 'EOF' > dovecot-ldap.conf.ext hosts = domain.alt:3268 ldap_version = 3 auth_bind = yes dn = cn=vmail,cn=Users,dc=domain,dc=alt dnpass = Pa$$word base = cn=Users,dc=domain,dc=alt scope = subtree deref = never user_filter = (&(objectClass=user)(|(mail=%Lu)(sAMAccountName=%Lu))) user_attrs = =uid=8,gid=12,mail=user pass_filter = (&(objectClass=user)(|(mail=%Lu)(sAMAccountName=%Lu))) pass_attrs = mail=user EOF
cd /etc/dovecot/conf.d
Файл 10-auth.conf
cat << 'EOF' > 10-auth.conf #auth_username_format = %Lu #auth_gssapi_hostname = "$ALL" #auth_krb5_keytab = /etc/dovecot/dovecot.keytab #auth_use_winbind = no #auth_winbind_helper_path = /usr/bin/ntlm_auth #auth_failure_delay = 2 secs auth_mechanisms = plain !include auth-ldap.conf.ext EOF
Файл 10-mail.conf
cat << 'EOF' > 10-mail.conf mail_location = maildir:/var/mail/%d/%n:UTF-8:INBOX=/var/mail/%d/%n/Inbox mail_uid = mail mail_gid = mail first_valid_uid = 5 first_valid_gid = 5 EOF
Файл 10-master.conf
cat << 'EOF' > 10-master.conf fixme EOF
Файл 15-lda.conf
cat << 'EOF' > 15-lda.conf fixme EOF
Файл 15-mailboxes.conf
cat << 'EOF' > 15-mailboxes.conf fixme EOF
Включаем и перезагружаем сервис
systemctl enable --now dovecot service dovecot reload
Тестируем работу
Проверка конфигурации Dovecot (не должно быть никаких сообщений):
doveconf >/dev/null
Безопасность
В связи с тем, что конфигурационные файлы содержат пароль пользователя LDAP, их необходимо сделать недоступным для чтения прочим пользователям:
chown dovecot:root /etc/dovecot/dovecot-ldap.conf.ext chmod 0640 /etc/dovecot/dovecot-ldap.conf.ext chown root:postfix /etc/postfix/ad_local_recipients.cf /etc/postfix/ad_mail_groups.cf /etc/postfix/ad_sender_login.cf chmod 0640 /etc/postfix/ad_local_recipients.cf /etc/postfix/ad_mail_groups.cf /etc/postfix/ad_sender_login.cf
Перезапускаем службы:
service dovecot restart service postfix restart
или
systemctl restart dovecot systemctl restart postfix
Источники
Для использования электронной почты в SOGo необходимо настроить аутентификацию в Active Directory для Postfix и Dovecot.
Это предстоит здесь описать, опираясь на документацию здесь