tm

   Без утомительной теории зарисовка о настройке OpenVPN с доменной авторизацией по сертификатам на Ubuntu 18.04.

Устанавливаем необходимый инструментарий:

apt-get install openvpn easy-rsa

 

   Создаём центр сертификации.

Создаём директорию центра сертификации:

make-cadir ~/openvpn-ca

Переходим в рабочую директорию и правим файл с переменными:

cd ~/openvpn-ca
nano vars
export EASY_RSA="`pwd`"
export OPENSSL="openssl"
export PKCS11TOOL="pkcs11-tool"
export GREP="grep"
export KEY_CONFIG=`$EASY_RSA/whichopensslcnf $EASY_RSA`
export KEY_DIR="$EASY_RSA/keys"
echo NOTE: If you run ./clean-all, I will be doing a rm -rf on $KEY_DIR
export PKCS11_MODULE_PATH="dummy"
export PKCS11_PIN="dummy"
export KEY_SIZE=2048
export CA_EXPIRE=3650
export KEY_COUNTRY="RU"
export KEY_PROVINCE="NSO"
export KEY_CITY="City"
export KEY_ORG="Organization"
export KEY_EMAIL="Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра."
export KEY_OU="IT Dapartment"
export KEY_NAME="server"

Акцент на переменную KEY_NAME, значение будем использовать с будущем.

Дано:

Ubuntu 18.04.2 LTS

Squid Cache: Version 3.5.27

Вводим в домен.

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

apt-get install squid3

Сохраним конфигурацию:

cd /etc/squid/
mv squid.conf squid.conf.back

Создадим blacklist:

nano /etc/squid/blacklist
vk\.com
vk\.ru
ok\.ru
game
porn
teens
xxx
anonim
tube
cloud
disk
proxfree\.com
anonymouse\.org

 

Создадим whitelist:

nano /etc/squid/whitelist
(\.)?regions\.domain\.loc
(\.)?itsketch\.ru

 

nano /etc/default/squid
KRB5_KTNAME=/etc/squid/squid.keytab
export KRB5_KTNAME
KRB5RCACHETYPE=none
export KRB5RCACHETYPE

 

Создаём технологическую УЗ в домене с запретом смены пароля, неограниченным сроком действия и без предварительной провенрки подлиннисти Kerberos.

squid ubuntu

И в cmd создаём .keytab:

ktpass /princ HTTP/Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра. /mapuser Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра. /crypto RC4-HMAC-NT /ptype KRB5_NT_PRINCIPAL /pass i8wx6NzLssM4 /out C:\squid.keytab

Копируем полученный ketytab файл в /etc/squd/. Далее пробуем получить билетик по принципалу HTTP/Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.

kinit -kV -p HTTP/Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.

и если ошибок не было, то klist покажет что-то вроде этого:

klist
Ticket cache: FILE:/tmp/krb5cc_10001
Default principal: HTTP/Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.
Valid starting Expires Service principal
10.09.2019 10:31:06 10.09.2019 20:31:06 krbtgt/Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.
renew until 11.09.2019 10:31:06

Устанавливаем, возможно, необходимые либы:

apt-get install libsasl2-modules-gssapi-mit ldap-utils libsasl2-modules-ldap krb5-user krb5-config libpam-krb5 libpam-winbind libnss-winbind cyrus-sasl-gssapi libauthen-sasl-cyrus-perl libsasl2-2 libgsasl7 libsasl2-modules-gssapi-heimdal libgsasl7 sasl2-bin libsasl2-modules-ldap libsasl2-modules squid-helpers

И проверяем работоспособность хелпера:

/usr/lib/squid/ext_ldap_group_acl -R -d -b "dc=regions,dc=domain,dc=loc" -f "(&(objectclass=user)(sAMAccountName=%v)(memberOf=cn=%a,OU=Groups,OU=nsk,DC=regions,DC=domain,DC=loc))" -D Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра. -W /etc/squid/aduser regions.domain.loc

Вводимые параметры - это имя пользователя и группа, через пробел. Параметр -W содержит путь до файла с паролем пользователя ldap_user_ro.

Если всё работает и пользователь находится в группе, по вывод будет примерно таким:

/usr/lib/squid/ext_ldap_group_acl -R -d -b "dc=regions,dc=domain,dc=loc" -f "(&(objectclass=user)(sAMAccountName=%v)(memberOf=cn=%a,OU=Groups,OU=nsk,DC=regions,DC=domain,DC=loc))" -D Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра. -W /etc/squid/aduser regions.domain.loc
user mm
ext_ldap_group_acl.cc(584): pid=24794 :Connected OK
ext_ldap_group_acl.cc(727): pid=24794 :group filter '(&(objectclass=user)(sAMAccountName=user)(memberOf=cn=mm,OU=Groups,OU=nsk,DC=regions,DC=domain,DC=loc))', searchbase 'dc=regions,dc=domain,dc=ru'
OK

Далее правим конфигурационный файл (пример рабочего конфига):

nano /etc/default/squid
dns_v4_first on
auth_param negotiate program /usr/lib/squid3/negotiate_kerberos_auth -d -s HTTP/vm-uadmsquid.regions.domain.loc
auth_param negotiate children 20 startup=0 idle=1
auth_param negotiate keep_alive off
external_acl_type ldap_verify %LOGIN /usr/lib/squid/ext_ldap_group_acl -R -b "dc=regions,dc=domain,dc=loc" -f "(&(objectclass=user)(sAMAccountName=%v)(memberOf=cn=%a,OU=Groups,OU=nsk,DC=regions,DC=domain,DC=loc))" -D Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра. -K -W /etc/squid/aduser regions.domain.loc
acl localnet src 0.0.0.1-0.255.255.255 # RFC 1122 "this" network (LAN)
acl localnet src 10.1.0.0/16 # RFC 1918 local private network (LAN)
acl localnet src 10.2.6.0/23
acl localnet src 10.3.6.0/24
acl localnet src 192.168.0.0/16 # RFC 1918 local private network (LAN)
append_domain .regions.domain.loc
acl url_filtred src 10.1.0.0/16
acl url_filtred src 10.2.6.0/23
acl url_filtred src 10.3.6.0/24
acl url_filtred src 192.168.5.0/24
acl inet-full external ldap_verify inet-full
acl inet-middle external ldap_verify inet-middle
acl inet-short external ldap_verify inet-short
acl sbis dstdomain .sbis.ru
acl sufd dstdomain .roskazna.local
acl aris dstdomain .ariscommunity.com
acl SSL_ports port 443
acl SSL_ports port 8530 #WSUS
acl SSL_ports port 8006 # Proxmox
acl SSL_ports port 7071 # Zimbra Admin
acl SSL_ports port 8443 # Mail
acl SSL_ports port 9443 # Sber
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl CONNECT method CONNECT
acl blacklist url_regex -i "/etc/squid/blacklist"
acl whitelist url_regex -i "/etc/squid/whitelist"
acl auth proxy_auth REQUIRED
# Deny requests to certain unsafe ports
http_access deny !Safe_ports
# Deny CONNECT to other than secure SSL ports
http_access deny CONNECT !SSL_ports
# Only allow cachemgr access from localhost
http_access allow localhost manager
http_access deny manager
http_access allow url_filtred sbis
http_access allow url_filtred sufd
http_access allow url_filtred aris
http_access allow url_filtred
http_access allow inet-full
http_access deny blacklist url_filtred
http_access allow inet-middle !blacklist
http_access deny inet-short !whitelist
#http_access allow localnet
http_access allow auth
http_access allow localhost
# And finally deny all other access to this proxy
http_access deny all
# Squid normally listens to port 3128
http_port 3128
# Uncomment and adjust the following to add a disk cache directory.
cache_dir ufs /var/spool/squid 100 16 256
# Leave coredumps in the first cache dir
coredump_dir /var/spool/squid
cache_mem 1024 MB
maximum_object_size_in_memory 1 MB
logfile_rotate 31
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern . 0 20% 4320

Устанавливаем на Ubuntu 14.04.6 LTS + Apache/2.4.7 + PHP 5 + Perl 5.18.2

Установить придётся не мало пакетов.

apt-get update
apt-get install make cmake gcc make perl apache2 apache2-dev expat php5 mysql-server
apt-get install libapache2-mod-perl2 libapache-dbi-perl libapache-db-perl libapache2-mod-php libcompress-raw-zlib-perl libdbd-mysql-perl libnet-ip-perl libsoap-lite-perl
apt-get install php5-mysql php5-gd php5-dev php5-curl php5-json

   Существует не мало ресурсов, выдающих бесплатные SSL, правда на 90 дней. Одним из способов получение сертификата является помещение ключей, подтверждающих Вас как владельцев ресурса, в диреторию с сайтом. Однако, делать это постоянно в ручную муторно и чревато вероятностью не успеть обновить прокисающие сертификаты. Не знаю на счёт остальных ресурсов, а https://letsencrypt.org/ предусматрели процесс автоматизации. Для реализации подключаем репу:

add-apt-repository ppa:certbot/certbot
apt-get update

Проверяем доступность пакетов:

apt-cache search certbot

Ну, и устанавливаем:

apt-get install certbot

Создаём в корне сайта директорию letsencrypt, с правами:

chown root:www-data /var/www/site/letsencrypt
chmod 755 /var/www/site/letsencrypt

   Зарисовка о настройке TACACS+ с доменной авторизацией на Ubuntг 16.

Пакет, находящийся в репозиториях Ubuntu не подходит. Счачиваем или от сюда или с сайта разработчика.

Нужно установить ещё:

apt-get install libnet-ldap-perl

Содаём каталоги:

sudo mkdir /var/log/tac_plus
sudo mkdir /var/log/tac_plus/access
sudo mkdir /var/log/tac_plus/accounting
sudo mkdir /var/log/tac_plus/authentication

Распаковываем архив и переходим в директорию с исходниками:

bzip2 -dc DEVEL.tar.bz2 | tar xvfp -
cd /tmp/PROJECTS

Устанавливаем необходимый инструментарий:

apt-get install libpcre3-dev libpcre3-dev libpcre2-dev gcc make

Выполняем

make

   Для добавления компьютера с ОС Ubuntu 14 в домен потребуются следующие пакеты:

apt-get install  krb5-user samba winbind libnss-winbind libpam-winbind ntpdate ntp smbclient

В процессе установки заполняем realm name домена и прочие параметры. Их потом можно будет отредактировать. Для ввода компа в домен нужно прописать правильные параметры DNS, синхронизировать время с DC. Далее правим настроки сети, DNS и пр.

nano /etc/hosts
127.0.0.1       localhost
127.0.1.1       host.domain.loc host
nano /etc/hostname
host.domain.loc
nano /etc/network/interfaces
auto enp2s0
iface enp2s0 inet static
address 192.168.50.21
netmask 255.255.255.0
gateway 192.168.50.1
dns-nameservers 192.168.50.20
dns-search domain.loc
nano /etc/resolvconf/resolv.conf.d/head
domain domain.loc

   В Ubuntu разделы монтируются командой mount, напрмер:

mount /dev/имя диска /куда/монтируем/

 Однако, смонтированный диск таким способом, будет доступен только до первой перезагрузки. После reboot диск будет не доступен.

   Что бы этого не произошло необходимо прибегнуть к редактированию файла /etc/fstab. Но, прежде чем его редактировать нам нужен UUID диска. Выполняем:

fdisk -l

это позволит нам узнать имя диска (sda или sdb1 ...). После этого можно выполнить команду

blkid

   Когда строчить длинные команды уже нет сил, а самое главное времени, придут на помощь алиасы. В Ubuntu создать алиас можно через ввод команды в терминале, например:

alias error-forum="tail -444 /var/log/apache2/error-nef-forum.log | egrep -v '192.168.|213.87'"

Это означает, что создаётся алиас error-forum, который запускает команду tail с определённым условием. Однако. алиасы, созданные таким способом будут работать только до перезагрузки компьютера. Для того, что бы алиасы были в системе всегда их нужно записывать в файл /home/директория пользователя/.bashrc или просто:

nano ~/.bashrc
alias bot-nef="tail -444 /var/log/apache2/bot-nef.log | egrep -v '192.168.|213.87'"
alias bot-aqua="tail -444 /var/log/apache2/bot-aqua.log | egrep -v '192.168.|213.87'"
alias bot-forum="tail -444 /var/log/apache2/bot-nef-forum.log | egrep -v '192.168.|213.87'"

Для того, что бы алиасы стали доступны в системе, нужно выполнить

source ~/.bashrc

Как обычно, начнём с установки:

 apt-get install tacacs+

  После установки проверяем, что демон запущен:

ps -e | grep tac
1468 ?      00:08:03 tac_plus

 И можно смело приступать к настройке. Всё, что можно настроить лежит в tac_plus.conf

sudo nano /etc/tacacs+/tac_plus.conf

 В качестве примера приведу конфигурацию для одного пользователя состоящего в одной группе. Для простейшей настройки из tac_plus.conf можно всё удалить и прописать только самое необходимое:

Эту команду использую для создания бэкапов сайта. Т. е. ищет директорию и создаёт архив в другой директории.

cd /var/www/ && find . -name 'html' -type d -maxdepth 1 -exec tar -cvjf /media/500g/backup/site.xx/html_`date '+%Y-%m-%d'`.tar.bz2 {} \;

Разберём по порядку:

 cd /var/www/ - переход в нужную директорию.

далее выполняется

 find . -name 'html' -type d -maxdepth 1 - поиск в текущей директории папки с имененм 'html' и грубиной поиска в 1 каталог.

 После этого параметр -exec tar -cvjf  запаковывает найденную директорию в указанную директорию. В имя архива добавляется дата создания архива.

   С покупкой очередного телевизора с LAN портом я понял, что пора объединять всё это царство электроники в одну сеть. Сеть, конечно, дело простое, а создать место от куда все цифровые устройства, находящиеся в сети, могут получить доступ к медиа контенту (музыка, фото, видео) - дело интересное. Поскольку сервер на Ubuntu уже был установлен дома, платфома была определена сразу. Среди множества решений был выбран MiniDLNA.

   Всё, как обычно, начинается с установки.

sudo apt-get install minidlna

Установка одного пакеты потянет за собой установку кучу других зависимых пакетов. Это просто нужно пережить :) После окончания установки можно переходить к редактированию конфигурационного файла: