Skip to content

Reopenldap+Kerberos+OpenVPN+PAM #1

@Archonr

Description

@Archonr

====ReOpenLdap====

Скачиваем последнюю версию [[https://github.com/leo-yuriev/ReOpenLDAP/|здесь]]

Для установки необходимо собрать пакет, но перед этим устанавливаем дополнительные пакеты:

  • apt-get install pkg-config
  • apt-get install uuid-dev
  • apt-get install groff groff-base
  • apt-get install gcc
  • apt-get install autoconf automake libtool autotools-dev dpkg-dev fakeroot
./bootstrap autoreconf -ivf# Выполняем скрипт в архиве, устанавливаем git и создаем репозиторий git init. ./configure # Выполняем конфигурацию make # Выполняем компиляцию make install # устанавливаем пакет

Все содержимое должно установиться в /opt/reopenldap/

Устанавливаем openldap

  • apt-get install slapd ldap-utils

Редактируем демон запуска, меняем строки:

nano /etc/init.d/slapd

  SLAPD=/opt/reopenldap/sbin/slapd
  
  ...
  # Load the default location of the slapd config file
  if [ -z "$SLAPD_CONF" ]; then
          if [ -e /etc/ldap/slapd.d ]; then
                  SLAPD_CONF=/etc/ldap/slapd.d
          else
                  SLAPD_CONF=/opt/reopenldap/etc/slapd.conf
          fi
  fi
  
  ...

А так же закоментируем

# Source the init script configuration
#if [ -f "/etc/default/slapd" ]; then
#       . /etc/default/slapd
#fi

Редактируем /opt/reopenldap/etc/slapd.conf меняем на свои значения:

#######################################################################
# MDB database definitions
#######################################################################
database        mdb
maxsize         1073741824
suffix          "dc=example,dc=com" # Суффикс базы
rootdn          "cn=admin,dc=example,dc=com" # Администратор базы
# Cleartext passwords, especially for the rootdn, should
# be avoid.  See slappasswd(8) and slapd.conf(5) for details.
# Use of strong authentication encouraged.
rootpw          password # Пароль от базы
# The database directory MUST exist prior to running slapd AND
# should only be accessible by the slapd and slap tools.
# Mode 700 recommended.
directory       /opt/reopenldap/var/reopenldap-data # Место хранения базы
# Indices to maintain
index   objectClass     eq
#########################################################################

Создаем папку для базы

  • mkdir /opt/reopenldap/var/reopenldap-data

Запускаем сервис

  • service slapd restart

ПОЛЕЗНЫЕ КОМАНДЫ ДЛЯ ОТЛАДКИ ПРОБЛЕМ:

  • service slapd status
  • ps axf | grep slapd
  • systemctl status slapd.service
  • slapd -d -4
  • /opt/reopenldap/sbin/slapd -d 4 -f /opt/reopenldap/etc/slapd.conf
  • systemctl daemon-reload
  • slappasswd
  • ldapsearch -H [[ldapi://|ldapi://]] -Y EXTERNAL -b "cn=config" -LLL -Q "olcDatabase=*" dn

Проверяем BDB, HDB or MDB

&atention!
После выполнения всех махинаций, на reopenldap сервере не будет добавлена область DN, необходимо создать новую область DN:

nano add.ldif

  dn: dc=example, dc=com
  dc: example
  o: example.com
  objectclass: organization
  objectclass: dcObject
  objectclass: top
  
  dn: cn=admin, dc=example, dc=com
  objectclass: organizationalRole
  objectclass: simpleSecurityObject
  cn: admin
  userPassword: password

ldapadd -x -D 'cn=admin,dc=example,dc=com' -W -f add.ldif

&atention! Необходимо в базу загрузить керберос схему: (Детальнее [[http://help.ubuntu.ru/wiki/%D1%80%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE_ubuntu_server/%D0%B0%D0%B2%D1%82%D0%BE%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%BF%D0%BE_%D1%81%D0%B5%D1%82%D0%B8/kerberos_and_ldap|Здесь]])

1. Для загрузки схемы в LDAP, на сервере LDAP установите пакет krb5-kdc-ldap. В терминале введите:

sudo apt-get install krb5-kdc-ldap

  1. Далее распакуйте файл kerberos.schema.gz:

sudo gzip -d /usr/share/doc/krb5-kdc-ldap/kerberos.schema.gz
sudo cp /usr/share/doc/krb5-kdc-ldap/kerberos.schema /etc/ldap/schema/

  1. Схема kerberos должна быть добавлена к дереву cn=config. Процедура добавления новой схемы к slapd детально описана в секции Изменение базы данных настройки slapd.
    Сначала создадим файл настроек с именем schema_convert.conf или другим значащим именем, содержащим следующие строки:

include /etc/ldap/schema/core.schema
include /etc/ldap/schema/collective.schema
include /etc/ldap/schema/corba.schema
include /etc/ldap/schema/cosine.schema
include /etc/ldap/schema/duaconf.schema
include /etc/ldap/schema/dyngroup.schema
include /etc/ldap/schema/inetorgperson.schema
include /etc/ldap/schema/java.schema
include /etc/ldap/schema/misc.schema
include /etc/ldap/schema/nis.schema
include /etc/ldap/schema/openldap.schema
include /etc/ldap/schema/ppolicy.schema
include /etc/ldap/schema/kerberos.schema

Создадим временный каталог для хранения LDIF файлов:

mkdir /tmp/ldif_output

Теперь используем slapcat для конвертирования файлов схемы:

slapcat -f schema_convert.conf -F /tmp/ldif_output -n0 -s
"cn={12}kerberos,cn=schema,cn=config" > /tmp/cn=kerberos.ldif

Измените имена файла и каталога выше для соответствия вашим именам, если они отличаются.
Отредактируйте созданный файл /tmp/cn=kerberos.ldif, изменив следующие атрибуты:

dn: cn=kerberos,cn=schema,cn=config
...
cn: kerberos

и удалите следующие строки в конце файла:

structuralObjectClass: olcSchemaConfig
entryUUID: 18ccd010-746b-102d-9fbe-3760cca765dc
creatorsName: cn=config
createTimestamp: 20090111203515Z
entryCSN: 20090111203515.326445Z#000000#000#000000
modifiersName: cn=config
modifyTimestamp: 20090111203515Z

Значения атрибутов могут отличаться, просто убедитесь, что атрибуты удалены.
Загрузите новую схему с помощью ldapadd:

ldapadd -x -D cn=admin,cn=config -W -f /tmp/cn=kerberos.ldif

Добавьте индекс для атрибута krb5principalname:

ldapmodify -x -D cn=admin,cn=config -W

Enter LDAP Password:
dn: olcDatabase={1}hdb,cn=config
add: olcDbIndex
olcDbIndex: krbPrincipalName eq,pres,sub
modifying entry "olcDatabase={1}hdb,cn=config"

РЕПЛИКАЦИЯ МАСТЕР-МАСТЕР (МУЛЬТИ-МАСТЕР)

1 Мастер:

nano /opt/reopenldap/etc/slapd.conf

# Generated from slapd.conf.in on 2017-09-11 11:53:10+00:00
#
ServerID 001
# See slapd.conf(5) for details on configuration options.
# This file should NOT be world readable.
#
include         /opt/reopenldap/etc/schema/core.schema
include         /opt/reopenldap/etc/schema/collective.schema
include         /opt/reopenldap/etc/schema/corba.schema
include         /opt/reopenldap/etc/schema/cosine.schema
include         /opt/reopenldap/etc/schema/duaconf.schema
include         /opt/reopenldap/etc/schema/dyngroup.schema
include         /opt/reopenldap/etc/schema/inetorgperson.schema
include         /opt/reopenldap/etc/schema/java.schema
include         /opt/reopenldap/etc/schema/misc.schema
include         /opt/reopenldap/etc/schema/nis.schema
include         /opt/reopenldap/etc/schema/openldap.schema
include         /opt/reopenldap/etc/schema/ppolicy.schema
include         /opt/reopenldap/etc/schema/kerberos.schema

# Define global ACLs to disable default read access.

# Do not enable referrals until AFTER you have a working directory
# service AND an understanding of referrals.
#referral       ldap://root.openldap.org

pidfile         /opt/reopenldap/var/run/slapd.pid
argsfile        /opt/reopenldap/var/run/slapd.args

# Load dynamic backend modules:
# modulepath    /opt/reopenldap/lib/reopenldap
# moduleload    back_mdb.la
# moduleload    back_ldap.la
moduleload syncprov.la

# Sample security restrictions
#       Require integrity protection (prevent hijacking)
#       Require 112-bit (3DES or better) encryption for updates
#       Require 63-bit encryption for simple bind
# security ssf=1 update_ssf=112 simple_bind=64

# Sample access control policy:
#       Root DSE: allow anyone to read it
#       Subschema (sub)entry DSE: allow anyone to read it
#       Other DSEs:
#               Allow self write access
#               Allow authenticated users read access
#               Allow anonymous users to authenticate
#       Directives needed to implement policy:
# access to dn.base="" by * read
# access to dn.base="cn=Subschema" by * read
# access to *
#       by self write
#       by users read
#       by anonymous auth
#
# if no access controls are present, the default policy
#######################################################################
# MDB database definitions
#######################################################################

database        mdb
maxsize         1073741824
suffix          "dc=example,dc=com"
rootdn          "cn=admin,dc=example,dc=com"
# Cleartext passwords, especially for the rootdn, should
# be avoid.  See slappasswd(8) and slapd.conf(5) for details.
# Use of strong authentication encouraged.
rootpw          battle94
# The database directory MUST exist prior to running slapd AND
# should only be accessible by the slapd and slap tools.
# Mode 700 recommended.
directory       /opt/reopenldap/var/reopenldap-data
# разрешаем доступ на чтение всем потребителям
# подразумевается, что на всех главных серверах будет использоваться binddn с этим значением
# может понадобиться слияние с другими ACL
#access to *
#     by dn.base="cn=admin,dc=example,dc=com" read
#     by * break
#
# Простой уровень безопасности с паролем в открытом виде
syncrepl rid=000
  provider=ldap://ldaps02.example.com
  type=refreshAndPersist
  retry="60 +"
  searchbase="dc=example,dc=com"
  scope=sub
  schemachecking=off
  bindmethod=simple
  binddn="cn=admin,dc=example,dc=com"
  credentials=battle94
# Indices to maintain
index objectclass,entryCSN,entryUUID eq
# зеркальный режим необходим для того, чтобы разрешить запись
# эта директива должна определяться после всех директив syncrepl
mirrormode TRUE
# указываем поставщику использовать наложение syncprov
# (заключительные директивы в разделе database)
overlay syncprov
# contextCSN сохраняется в базу данных
# через каждые 100 обновлений или 10 минут
syncprov-checkpoint 100 10

2 Мастер:

# Generated from slapd.conf.in on 2017-09-11 11:53:10+00:00
#
ServerID 002
# See slapd.conf(5) for details on configuration options.
# This file should NOT be world readable.
#
include         /opt/reopenldap/etc/schema/core.schema
include         /opt/reopenldap/etc/schema/collective.schema
include         /opt/reopenldap/etc/schema/corba.schema
include         /opt/reopenldap/etc/schema/cosine.schema
include         /opt/reopenldap/etc/schema/duaconf.schema
include         /opt/reopenldap/etc/schema/dyngroup.schema
include         /opt/reopenldap/etc/schema/inetorgperson.schema
include         /opt/reopenldap/etc/schema/java.schema
include         /opt/reopenldap/etc/schema/misc.schema
include         /opt/reopenldap/etc/schema/nis.schema
include         /opt/reopenldap/etc/schema/openldap.schema
include         /opt/reopenldap/etc/schema/ppolicy.schema
include         /opt/reopenldap/etc/schema/kerberos.schema

# Define global ACLs to disable default read access.

# Do not enable referrals until AFTER you have a working directory
# service AND an understanding of referrals.
#referral       ldap://root.openldap.org

pidfile         /opt/reopenldap/var/run/slapd.pid
argsfile        /opt/reopenldap/var/run/slapd.args

# Load dynamic backend modules:
# modulepath    /opt/reopenldap/lib/reopenldap
# moduleload    back_mdb.la
# moduleload    back_ldap.la
moduleload syncprov.la

# Sample security restrictions
#       Require integrity protection (prevent hijacking)
#       Require 112-bit (3DES or better) encryption for updates
#       Require 63-bit encryption for simple bind
# security ssf=1 update_ssf=112 simple_bind=64

# Sample access control policy:
#       Root DSE: allow anyone to read it
#       Subschema (sub)entry DSE: allow anyone to read it
#       Other DSEs:
#               Allow self write access
#               Allow authenticated users read access
#               Allow anonymous users to authenticate
#       Directives needed to implement policy:
# access to dn.base="" by * read
# access to dn.base="cn=Subschema" by * read
# access to *
#       by self write
#       by users read
#       by anonymous auth
#
# if no access controls are present, the default policy
#######################################################################
# MDB database definitions
#######################################################################

database        mdb
maxsize         1073741824
suffix          "dc=example,dc=com"
rootdn          "cn=admin,dc=example,dc=com"
# Cleartext passwords, especially for the rootdn, should
# be avoid.  See slappasswd(8) and slapd.conf(5) for details.
# Use of strong authentication encouraged.
rootpw          battle94
# The database directory MUST exist prior to running slapd AND
# should only be accessible by the slapd and slap tools.
# Mode 700 recommended.
directory       /opt/reopenldap/var/reopenldap-data
#
#
# может понадобиться слияние с другими ACL
#access to *
#     by dn.base="cn=admin,dc=example,dc=com" read
#     by * break
#
# простой уровень безопасности с паролем в открытом виде
syncrepl rid=000
  provider=ldap://ldaps01.example.com
  type=refreshAndPersist
  retry="60 +"
  searchbase="dc=example,dc=com"
  scope=sub
  bindmethod=simple
  schemachecking=off
  binddn="cn=admin,dc=example,dc=com"
  credentials=battle94
# Indices to maintain
index objectclass,entryCSN,entryUUID eq
#
# эта директива должна определяться после всех директив syncrepl
mirrormode TRUE
# (заключительные директивы в разделе database)
#
overlay syncprov
# contextCSN сохраняется в базу данных
# через каждые 100 обновлений или 10 минут
syncprov-checkpoint 100 10

ПОЛЕЗНЫЕ ССЫЛКИ:
https://habrahabr.ru/post/270635/
https://pro-ldap.ru/tr/zytrax/ch7/
http://wiki.enchtex.info/howto/openldap/syncrepl


====KERBEROS====

  1. Сначала установим необходимые пакеты, введя из терминала:

sudo apt-get install krb5-kdc krb5-admin-server krb5-kdc-ldap

  1. Теперь редактируем /etc/krb5.conf добавив следующие опции в соответствующие секции:
[libdefaults]
        default_realm = EXAMPLE.COM

...

[realms]
        EXAMPLE.COM = {
                kdc = kdc01.example.com
                kdc = kdc02.example.com
                admin_server = kdc01.example.com
                admin_server = kdc02.example.com
                default_domain = example.com
                database_module = openldap_ldapconf
        }

...

[domain_realm]
        .example.com = EXAMPLE.COM


...

[dbdefaults]
        ldap_kerberos_container_dn = cn=admin,dc=example,dc=com

[dbmodules]
        openldap_ldapconf = {
                db_library = kldap
                ldap_kdc_dn = "cn=admin,dc=example,dc=com"

                # this object needs to have read rights on
                # the realm container, principal container and realm sub-trees
                ldap_kadmind_dn = "cn=admin,dc=example,dc=com"

                # this object needs to have read and write rights on
                # the realm container, principal container and realm sub-trees
                ldap_service_password_file = /etc/krb5kdc/service.keyfile
                ldap_servers = ldap://ldap01.example.com ldaps://ldap02.example.com
                ldap_conns_per_server = 5
        }
        
  1. Далее используем утилиту kdb5_ldap_util для создания области:

sudo kdb5_ldap_util -D cn=admin,dc=example,dc=com create -subtrees
dc=example,dc=com -r EXAMPLE.COM -s -H ldap://ldap01.example.com

  1. Создаем тайник для пароля, используемого для подключения к LDAP серверу. Этот пароль используется опциями ldap_kdc_dn и ldap_kadmin_dn в /etc/krb5.conf:

sudo kdb5_ldap_util -D cn=admin,dc=example,dc=com stashsrvpw -f
/etc/krb5kdc/service.keyfile cn=admin,dc=example,dc=com

Вы можете добавить учетные записи Kerberos в LDAP базу и они будут скопированы на все LDAP сервера, настроенные на репликацию. Для добавления учетной записи с использованием утилиты kadmin.local введите:

sudo kadmin.local

Authenticating as principal root/admin@EXAMPLE.COM with password.
kadmin.local:  addprinc -x dn="uid=steve,ou=people,dc=example,dc=com" steve
WARNING: no policy specified for steve@EXAMPLE.COM; defaulting to no policy
Enter password for principal "steve@EXAMPLE.COM": 
Re-enter password for principal "steve@EXAMPLE.COM": 
Principal "steve@EXAMPLE.COM" created.

Теперь будут добавлены атрибуты krbPrincipalName, krbPrincipalKey, krbLastPwdChange и krbExtraData к объекту пользователя uid=steve,ou=people,dc=example,dc=com. Используйте утилиты kinit и klist для проверки, что пользователю действительно выдали билет.

Настройку вторичного KDC делаем по [[http://help.ubuntu.ru/wiki/%D1%80%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE_ubuntu_server/%D0%B0%D0%B2%D1%82%D0%BE%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%BF%D0%BE_%D1%81%D0%B5%D1%82%D0%B8/kerberos_and_ldap|ссылке]]

СОЗДАНИЕ ДОПОЛНИТЕЛЬНЫХ ОБЛАСТЕЙ В KERBEROS

Редактируем /etc/krb5kdc/kdc.conf

  [kdcdefaults]
      kdc_ports = 750,88
      default_realm = EXAMPLE.COM
  [realms]
      EXAMPLE.COM = {
          database_name = /var/lib/krb5kdc/principal
          admin_keytab = FILE:/etc/krb5kdc/kadm5.keytab
          acl_file = /etc/krb5kdc/kadm5.acl
          key_stash_file = /etc/krb5kdc/.k5.EXAMPLE.COM
          kdc_ports = 750,88
          max_life = 10h 0m 0s
          max_renewable_life = 7d 0h 0m 0s
          master_key_type = des3-hmac-sha1
          supported_enctypes = aes256-cts:normal arcfour-hmac:normal des3-hmac-sha1:normal des-cbc-crc:normal des:normal des:v4 des:norealm des:onlyrealm des:afs3
          default_principal_flags = +preauth
      }
  
      TESTIK.COM = {
          database_name = /var/lib/krb5kdc/principal
          admin_keytab = FILE:/etc/krb5kdc/kadm5.keytab
          acl_file = /etc/krb5kdc/kadm5.acl
          key_stash_file = /etc/krb5kdc/.k5.TESTIK.COM
          kdc_ports = 750,88
          max_life = 10h 0m 0s
          max_renewable_life = 7d 0h 0m 0s
          master_key_type = des3-hmac-sha1
          supported_enctypes = aes256-cts:normal arcfour-hmac:normal des3-hmac-sha1:normal des-cbc-crc:normal des:normal des:v4 des:norealm des:onlyrealm des:afs3
          default_principal_flags = +preauth
      }
  
  
  [logging]
  
     kdc = FILE:/var/log/krb5logs/kdc.log
     admin_server = FILE:/var/log/krb5logs/kadmin.log

А так же /etc/krb5.conf


  ...
  
  [realms]
          EXAMPLE.COM = {
                  kdc = rekdc01.example.com
                  kdc = rekdc02.example.com
                  admin_server = rekdc01.example.com
                  admin_server = rekdc02.example.com
                  default_domain = example.com
                  database_module = openldap_ldapconf
          }
          TESTIK.COM = {
                  kdc = rekdc01.example.com
                  kdc = rekdc02.example.com
                  admin_server = rekdc01.example.com
                  admin_server = rekdc02.example.com
                  default_domain = testik.com
                  database_module = openldap_ldapconf
  
  ...
  
  [domain_realm]
          .example.com = EXAMPLE.COM
          example.com = EXAMPLE.COM
          .testik.com = TESTIK.COM
  ...
  
  [dbdefaults]
          ldap_kerberos_container_dn = cn=admin,dc=example,dc=com
  
  [dbmodules]
          openldap_ldapconf = {
                  db_library = kldap
                  ldap_kdc_dn = "cn=admin,dc=example,dc=com"
  
                  # this object needs to have read rights on
                  # the realm container, principal container and realm sub-trees
                  ldap_kadmind_dn = "cn=admin,dc=example,dc=com"
  
                  # this object needs to have read and write rights on
                  # the realm container, principal container and realm sub-trees
                  ldap_service_password_file = /etc/krb5kdc/service.keyfile
                  ldap_servers = ldap://ldap01.example.com ldaps://ldap02.example.com
                  ldap_conns_per_server = 5
          }

Для добавления принципалов в другой области:

kadmin.local -r TESTIK.COM

Настройка клиента kerberos:

sudo apt-get install krb5-user libpam-krb5 libpam-ccreds auth-client-config

nano /etc/krb5.conf

[libdefaults]
        default_realm = EXAMPLE.COM
...
[realms]
        EXAMPLE.COM = }                
                kdc = 192.168.0.1               
               admin_server = 192.168.0.1
        }         

Вы можете проверить настройки запросив билет с помощью утилиты kinit. Например:

kinit steve@EXAMPLE.COM

Password for steve@EXAMPLE.COM:
Когда билет будет предоставлен, детали можно увидеть с помощью klist:

klist

Ticket cache: FILE:/tmp/krb5cc_1000
 Default principal: steve@EXAMPLE.COM
 Valid starting     Expires            Service principal
 07/24/08 05:18:56  07/24/08 15:18:56  krbtgt/EXAMPLE.COM@EXAMPLE.COM
         renew until 07/25/08 05:18:57

/etc/init.d/krb5-admin-server restart
/etc/init.d/krb5-kdc restart

Схема подключения 1:

Создаем на KDC пользователя и приклепляем его билет уже существующему пользователю на другом сервере:
kinit ВАШ_ЛОГИН
Проверяем получил ли он билет:
klist
Добавляем запрос билета при входе пользователя:
sudo auth-client-config -a -p kerberos_example

Схема подключения 2:

Создаем на KDC пользователя, так же после поднятия kdc клиента на другом сервере, создаем там пользователя с аналогичным именем:
useradd -d /home/arch -m -s /bin/bash(shell) arch
Теперь можно зайти на сервер используя логин-arch и пароль из сервера KDC.

Соответсвенно если сервер KDC будет выключен то пользователь не сможет зайти.

В /etc/shadow должен быть пользователь с строкой такого типа:
123:!:17373:0:99999:7:::

Как добавить нового пользователя:

ank ЛОГИН_ЮЗВЕРЯ
useradd -d /home/arch -m -s /bin/bash arch

Как добавить локального пользователя:

useradd -r -d /home/user -m -s /bin/bash user

&atention! ЕСЛИ ВСТРЕЧАЕМ ОШИБКУ - kinit: Cannot contact any KDC for realm 'EXAMPLE.COM' while getting initial credentials

ТО ВКЛЮЧАЕМ СЕРВИС sudo /etc/init.d/krb5-kdc start


====OpenVPN + Kerberos (посредством PAM)====

Устанавливаем OpenVPN:

apt-get install openvpn
apt-get install easy-rsa

cp /usr/lib/openvpn/openvpn-plugin-auth-pam.so /etc/openvpn/

Редактируем конфигурационный файл:

nano /etc/openvpn/server.conf

  port 1194
  # Протокол может быть UDP или TCP, я выбрал 1-й вариант.
  proto udp
  # Если вы выберите протокол TCP, здесь должно быть устройство tap. Однако, это вариант я не проверял, поэтому ищите информацию отдельно. FIXME
  dev tun
  # Говорим openvpn использовать созданый нами файл openvpn(настройка ниже)
  plugin /etc/openvpn/openvpn-plugin-auth-pam.so openvpn
  client-cert-not-required # говорим не использовать сертификаты.
  #auth MD5
  #tmp-dir /etc/openvpn/tmp
  username-as-common-name
  management localhost 7505
  #push "redirect-gateway def1"
  #push "route-gateway 10.101.1.1"
  push "route 10.10.0.0 255.255.255.0" # прописываем роут ко второму опенвпн серверу на этом же хосте, что бы они видели друг друга
  
  
  # Указываем где искать ключи
  ca /etc/openvpn/keys/ca.crt
  cert /etc/openvpn/keys/server.crt
  key /etc/openvpn/keys/server.key  # This file should be kept secret
  dh /etc/openvpn/keys/dh2048.pem
  # Для 12.04 dh1024.pem
  
  # Задаем IP и маску виртуальной сети. Произвольно, но если не уверены лучше делайте как показано здесь
  server 10.8.0.0 255.255.255.0
  
  # Указыем, где хранятся файлы с настройками IP-адресов клиентов (создадим ниже)
  #client-config-dir ccd
  
  # Запоминать динамически выданные адреса для VPN-клиентов и при последующих подключениях назначать те же значения.
  ifconfig-pool-persist ipp.txt
  
  # Указываем сети, в которые нужно идти через туннель (сеть-клиента).
  route 10.101.1.0 255.255.255.0
  
  
  # Включаем TLS
  #tls-server
  #tls-auth /etc/openvpn/keys/ta.key 0
  #tls-timeout 120
  #auth SHA1
  #cipher BF-CBC
  
  # разрешение подключения нескольких клиентов под одним логином
  duplicate-cn
  
  # Если нужно, чтобы клиенты видели друг друга раскомментируйте
  ;client-to-client
  
  
  keepalive 10 120
  
  # Сжатие трафика
  comp-lzo
  
  # Максимум клиентов
  max-clients 10
  
  user nobody
  group nogroup
  
  # Не перечитывать ключи, не закрывать и переоткрывать TUN\TAP устройство, после получения SIGUSR1 или ping-restart
  persist-key
  persist-tun
  
  status openvpn-status.log
  log /var/log/openvpn.log
  # Детальность логирования
  verb 3
  # Защита от повторов (максимум 20 одинаковых сообщений подряд)
  mute 20
  
  # Файл отозванных сертификатов. Разремить, когда такие сертификаты появятся.
  # crl-verify /etc/openvpn/crl.pem

&atention! При такой конфигурации аутентификация в OpenVPN будет происходить только с помощью логина и пароля учетной записи в керберос. Из минусов можно выделить то чтобы закрыть доступ к openvpn определенной учетной записи необходимо ее полностью удалить из кербероса. Что бы избежать эту проблемы необходимо так же сделать аутентификация с ключами.

Подключаем наш OpenVPN к керберос посредством PAM: (Детальнее [[http://help.ubuntu.ru/wiki/%D1%80%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE_ubuntu_server/%D0%B0%D0%B2%D1%82%D0%BE%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%BF%D0%BE_%D1%81%D0%B5%D1%82%D0%B8/kerberos|здесь]])

sudo apt-get install krb5-user libpam-krb5 libpam-ccreds auth-client-config

Создаем файл конфигурации для openvpn и говорим ему использовать только керберос для аунтификации.

nano /etc/pam.d/openvpn

  #%PAM-1.0
  auth            sufficient              pam_krb5.so minimum_uid=1000
  account         sufficient              pam_permit.so
  session         sufficient              pam_permit.so

#Внимание! Если Openvpn настроен на LXC то необходимо пробросить tun интерфейс:
Добавляем в /etc/pve/lxc/105.conf (для проксмокса) nano /var/lib/lxc/105/ (для lxc) самый низ строку:
lxc.cgroup.devices.allow = c 10:200 rwm

Создаем скрипт

nano /etc/init.d/tun.sh

#!/bin/bash
mkdir /dev/net
mknod /dev/net/tun c 10 200
chmod 0666 /dev/net/tun
systemctl restart openvpn@server1.service # после собаки конфиг сервера указан

Добавляем его в автозагрузку

systemctl enable tun.service

OpenVPN client:

apt-get install openvpn

Копируем ca.crt из сервера.

nano /etc/openvpn/client.conf

client
 auth-user-pass
 #auth MD5
 dev tun
 dev-type tun
 proto udp
 remote 10.0.3.160 1194
 resolv-retry infinite
 nobind
 persist-key
 persist-tun
 ca /etc/openvpn/keys/ca.crt
 comp-lzo
 verb 3
 log /var/log/openvpn.log

Что бы закрыть сеанс пользователя нужно подключиться по телнету и кильнуть его по имени (user1) в конфиге обязательно добавить управляющий порт management localhost 7505.
Смотрим активные сеансы:

cat /var/log/openvpn-status.log

Подключаемся по телнету:

telnet localhost 7505
kill user1

Добавляем второй openvpn сервер на том же хосте:
Создаем аналогичный конфиг файл server1.conf, server2.conf, меняем порты, сети и прописываем роуты.


====Ejabberd + Kerberos (посредством PAM)====

Установка ejabberd: (необходимо собрать из исходников с включением PAM)

Качаем архив по [[https://www.process-one.net/en/ejabberd/downloads/|ссылке]]

Устанавливаем дополнительные пакеты для сборки ejabberd из исходников:

apt-get install dh-autoreconf
apt-get install uuid-dev -y
apt-get install groff groff-base -y
apt-get install gcc -y
apt-get install erl -y
apt-get install erlang -y
apt-get install libssl-dev -y
apt-get install openssl -y
apt-get install libexpat1-dev -y
apt-get install expat -y
apt-get install yaml.h -y
apt-get install libyaml-dev -y
apt-get install yum-devel -y
apt-get install pam -y
apt-get install libpam0g-dev -y
apt-get install gd.h -y
apt-get install libgd2-noxpm-dev -y
apt-get install libwebp-dev -y
apt-get install git

tar -xvzf downloads-action.php?file=%2Fejabberd%2F17.11%2Fejabberd-17.11.tgz
cd ejabberd-17.11/

./configure --enable-pam && make install

Установленный ejabberd будет находиться в: /usr/local/etc/ejabberd/ejabberd.yml
Редактируем его.

...
 hosts:
   - "localhost"
   - "10.0.3.226"
 
 ...
 auth_password_format: plain
 auth_method: pam
 pam_service: "ejabberd"

Проверяем пытаясь зайти на вэб морду под локальным пользователем: http://10.0.3.226:5280/admin/

Приступаем к редактированию PAM /etc/pam.d/common-auth
Добавляем строку выше всех остальных
auth sufficient pam_krb5.so minimum_uid=1000

Команды:

  • Запуск сервиса - ejabberdctl start
  • Остановка сервиса - ejabberdctl stop
  • Статус - ejabberdctl status

Перед этим устанавливаем пакеты

sudo apt-get install krb5-user libpam-krb5 libpam-ccreds auth-client-config

И подключаемся к нашему керберосу

Вообще в теории PAM нужно настроить в отдельный конфигурационный файл так же как и OpenVPN, но на практике он почему то не захотел через него работать.

Качаем Gajim либо PSI(нужно править настройки)

И подключаемся принципалом user3@10.0.3.226

ПОЛЕЗНЫЕ ССЫЛКИ :

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions