пятница, 20 февраля 2026 г.

Apache Guacomole

 Для удаленного доступа пользователей, посредством протоколов SSH, RDP, VNC, возможно использовать Apache Guacomole - инструмент работающий в браузере, посредством HTML5 отображающий графику удаленных рабочих столов. Возможно интегрировать посредством LDAP с работой в  домене, использовать второй фактор - TOTP. Помимо возможной безопасной реализации доступа, представляет несомненный плюс в своей простоте для пользователей, которым для работы теперь нужен только современный браузер поддерживающий HTML5, для администраторов и сотрудников ИБ, с которых снимает головную боль о соблюдении необходимых соответствий (compliance) на удаленных ПК пользователей. 

В Сети масса инструкций по сборке конструктора - Apache Guacomole, Tomcat9, mysql (pgsql) и т.п., Nginx, LetsEncrypt и т.д. в разных вариациях.
Предлагается сборка из исходников, скачивание ПО непосредственно с сайта производителя, с последующей инсталляцией, установка из репозиториев, установка сразу всего в контейнере Docker.
В данной статье приводится пример инсталляции полученной из репозиториев ОС - Ubuntu 22.04.

Для понимания, что есть что:

guacd — основной сервер Guacamole, который обрабатывает подключения и передает данные между клиентом и удаленными системами;
tomcat9 — веб-сервер для развертывания веб-приложения Guacamole;
поддержка протоколов:
libguac-client-rdp0 — протокол RDP (для подключения к Windows и Linux с xrdp);
libguac-client-ssh0 — протокол SSH (терминальный доступ);
libguac-client-vnc0 — протокол VNC (удаленный рабочий стол);
libguac-client-telnet0 — протокол Telnet;
guacamole.war — Java-приложение (Apache Tomcat).


1. Обновим содержимое репозиториев:
apt update
2. Установим нужное, если оно отсутствует:
apt install nano wget mc  
3. Установим нужное ПО:
apt install guacd libguac-client-rdp0 libguac-client-ssh0 libguac-client-telnet0 libguac-client-vnc0 tomcat9 tomcat9-admin tomcat9-common tomcat9-user libguac19 libguac-dev
4. Скачиваем web-приложение Guacomole. Для начала смотрим, какая версия пришла из репозитория, они обязательно должны совпадать:
dpkg -l | grep guacd

видим:  ii  guacd  1.3.0-1.1

скачиваем:
wget https://downloads.apache.org/guacamole/1.3.0/binary/guacamole-1.3.0.war
и затем копируем его:
cp guacamole-1.3.0.war /var/lib/tomcat9/webapps

Создадим символическую ссылку на каталог, чтобы в дальнейшем было удобнее  писать адрес в адресной строке браузера:
ln -s /var/lib/tomcat9/webapps/guacamole-1.3.0 /var/lib/tomcat9/webapps/guacamole

5. Наполним файл /etc/guacamole/guacd.conf следующим содержимым:

[server]
bind_host = 127.0.0.1
bind_port = 4822

Если файл отсутствует, его нужно создать.

6. Создадим хэш пароля администратора для использования в вэб-интерфейсе:
echo -n password | openssl md5
(stdin)= 5f4dcc3b5aa765d61d8327deb882cf99

вставим хэш в файл /etc/guacamole/user-mapping.xml

<user-mapping>

<!-- Per-user authentication and config information --> 

<!-- A user using md5 to hash the password

example below uses the md5 hash of "PASSWORD")--> 

    <authorize 

            username="admin"

            password="5f4dcc3b5aa765d61d8327deb882cf99"

            encoding="md5">


        <!-- RDP connection -->

                <connection name="RDP SL">

            <protocol>rdp</protocol>

            <param name="hostname">192.168.0.128</param>

            <param name="port">3389</param>

            <param name="username">user</param>

            <param name="ignore-cert">true</param>

        </connection>


        <!-- SSH connection -->

        <connection name="SSH SL">

            <protocol>ssh</protocol>

            <param name="hostname">192.168.0.190</param>

            <param name="port">22</param>

           </connection>

        <!-- VNC authorized connection -->

        <connection name="VNC WORK">

            <protocol>vnc</protocol>

            <param name="hostname">192.168.0.120</param>

            <param name="port">5900</param>

            <param name="username">user</param>

            <param name="password">123</param>

        </connection>

   </authorize>

</user-mapping> 

В секциях RDP SL, SSH SL, VNC WORK требуется указать ip серверов, и порты которые используют протоколы. Команду с паролем лучше удалить из истории.
Смотрим историю:
history
смотрим номер команды, и удаляем его:
history -d XX

7. Далее следует открыть (создать если нет) файл nano /etc/guacamole/guacamole.properties, и вставить в него следующее содержимое:
guacd-hostname: localhost
guacd-port:     4822
user-mapping:   /etc/guacamole/user-mapping.xml
auth-provider: net.sourceforge.guacamole.net.basic.BasicFileAuthenticationProvider

Здесь описывается на каких основаниях производится подключение к guacomole.

8. Рестартуем guacomole и tomcat:
systemctl restart tomcat9 guacd

9. После всего вышеперечисленного мы можем открыть web-интерфейс Guacomole:
http://192.168.X.X:8080/guacamole

Должна открыться страница авторизации Guacomole:

После авторизации (admin:password), мы увидим настроенные ранее ( в фале файл user-mapping.xml) соединения:










На данном этапе базовую настройку Guacomole можно считать оконченной.

 

  

суббота, 18 октября 2025 г.

Обновление записей в DNS (Windows) c Linux-хостов в домене Active Directory

Такая ситуация: Linux-хост введен в домен AD, но при смене ip-адреса на хосте, A запись не обновляется автоматически.

Скрипт dns_update.sh который обновляет A, AAA, PTR записи:

#!/bin/bash
# Prepare with some variables
#
# Change to your DNS admin file location
dns_admin_file="/path/to/pass"
dns_admin=`cat $dns_admin_file | awk 'NR==1 {print; exit}'`
dns_admin_pw=`cat $dns_admin_file | awk 'NR==2 {print; exit}'`
# ipv4 may need some adjustment in case of multiple eth interfaces
# In default case we assume that you have only one eth interface
ipv4=`/bin/ip -o -4 addr list | grep -v 127.0.0.1 | awk '{print $4}' | cut -d/ -f1`
rev_ipv4=`echo $ipv4 | awk -F. '{print $4"."$3"." $2"."$1}'`.in-addr.arpa.
fqdn=`hostname --fqdn`
# Get old ipv4 for future deletion
old_ipv4=`dig $fqdn |grep 'ANSWER SECTION' -A1 | grep 'IN' | awk '{print $5}'`
rev_old_ipv4=`echo $old_ipv4 | awk -F. '{print $4"."$3"." $2"."$1}'`.in-addr.arpa.
domain=`echo $fqdn | sed 's/^[^.]*.//g'`
dom_up_case=`echo $domain | tr [:lower:] [:upper:]`
kdc=`cat /etc/krb5.conf | grep 'admin_server =' | awk '{print $3}' | tr [:upper:] [:lower:]`
# Change the ttl to your liking
ttl=3600
# Change file location to your liking
keytab_file="/etc/krb5.keytab"
# Check if DNS update is needed
if [[ "$ipv4" != "$old_ipv4" ]]; then
# Create/update keytab file
ktutil <<EOF
addent -password -p $dns_admin@$dom_up_case -k 1 -e rc4-hmac
$dns_admin_pw
write_kt $keytab_file
quit
EOF
# Get ticket for DNS admin
kinit -k $dns_admin
# Create file for forward zone update
/bin/echo "gsstsig
server $kdc
zone $domain
update delete $fqdn a
update add $fqdn $ttl a $ipv4
send
" > /tmp/ad_dns_fw
# Create file for reverse zone update
/bin/echo "gsstsig
server $kdc
update delete $rev_old_ipv4 PTR
update add $rev_ipv4 $ttl PTR $fqdn.
send
" > /tmp/ad_dns_rev
# Run reverse zone update first
/usr/bin/nsupdate /tmp/ad_dns_rev
# And then run forward zone update
/usr/bin/nsupdate /tmp/ad_dns_fw
fi

Файл /path/to/pass, (см. dns_admin_file="/path/to/pass"), содержащий логин и пароль учетки в AD, которая может удалять/добавлять, читать/записывать в нужной зоне, или (это небезопасно) учетка входящая в группу DNSAdmins в Active Directory.
Содержимое /path/to/pass:


dns_adm1
3215178

Права на чтение только для владельца:
chmod 400 /path/to/pass

Можно добавить скрипт длы выполнения в cron, но лучше обернуть его в systemd юнит.
Создадим файл /etc/systemd/system/ad_dns_update.service, и добавим в него следующее содержание:

[Unit]
Description=AD DNS entries updater
Wants=network-online.target
After=network.target network-online.target
[Service]
ExecStart=/path/to/dns_update.sh
[Install]
WantedBy=multi-user.target

После этого:
systemctl daemon-reload && systemctl enable ad_dns_update.service




среда, 27 марта 2024 г.

Перенос почты в Iredmail.

Важно понимать какие квоты определить. Насколько заполенены ящики. Лучше не создавать квоты вообще, разобраться после.

НА СЕРВЕРЕ ПОЧТЫ

1. cd iRedMail-1.6.8/tools

2. Создать одну запись в файл. password обязательно в одинарных кавычках 

bash create_mail_user_SQL.sh admin@domain.ru 'password' > /tmp/users.sql 

3. Чтобы дополнить файл /tmp/users.sql формируем и запускаем скрипт.

#!/bin/sh

bash create_mail_user_SQL.sh    user@domain.ru        'password'     >> /tmp/users.sql;
bash create_mail_user_SQL.sh    user1@domain.ru       'password'     >> /tmp/users.sql;
bash create_mail_user_SQL.sh    user2@domain.ru       'password'     >> /tmp/users.sql; 


4. mysql -uroot -p

sql> USE vmail;

sql> SOURCE /tmp/users.sql; 

создадутся учетки. можно проверить в СУБД и в web почты. Теперь можно переносить почту.


НА МАШИНЕ С Imapsync (промежуточная машина для переноса почты).


1. Формируем файл вида:

172.16.20.49;user@domain.ru;password;172.16.20.5;ert@domain.ru;password;
172.16.20.49;user1@domain.ru;password;172.16.20.5;wem@domain.ru;password;
172.16.20.49;user2@domain.ru;password;172.16.20.5;qan@domain.ru;passwords; 

Важно! Следим что нет пробелов, что все разделено точка с запятой ;
host1;user1_1;password11_1;host2;user2_1;password2_1;   #описание


2. редактируем perenos.sh users.txt - файл сформированный пунком выше его имя users.txt

#!/bin/sh
{ while IFS=';' read h1 u1 p1 h2 u2 p2 fake
do
imapsync --host1 "$h1" --user1 "$u1" --password1 "$p1" \
--host2 "$h2" --user2 "$u2" --password2 "$p2" "$@"
done
} < users.txt

3. Запускаем perenos.sh. imapsync и perenos.sh должны быть в одном каталоге.

https://docs.iredmail.org/sql.create.mail.user.html

пятница, 8 декабря 2023 г.

KVM джентельменский набор команд

 Создание ОС Windows 10:

virt-install -n Win10-test -r 4096 --vcpus=4 \

--arch=x86_64 \

--disk pool=images,size=110,bus=virtio,format=qcow2 \

--disk /kvm/iso/Windows_10_sborka-Luca.iso,device=cdrom \

--disk /kvm/iso/virtio-win-0.1.229.iso,device=cdrom \

--network bridge:br0,model=virtio \

--os-variant=win10 \

--graphics vnc,listen=0.0.0.0,port=5901,password=@dmLuCa \

--boot cdrom,hd,menu=on


Создание ОС Debian:

virt-install \

--name debian_test \

--ram=4096 \

--vcpus=2 \

--arch=x86_64 \

--os-variant=debian11 \

--disk pool=images,size=30,bus=virtio,format=qcow2 \

--disk /kvm/iso/debian-11.0.0-amd64-netinst.iso,device=cdrom \

--network bridge=br0,model=virtio \

--graphics vnc,listen=0.0.0.0,password=@dmLuCa \

--boot cdrom,hd,menu=on 


Создание ОС Ubuntu:

virt-install \

--name timetable \

--ram=8192 \

--vcpus=4 \

--arch=x86_64 \

--os-variant=ubuntu22.04 \

--disk pool=images,size=50,bus=virtio,format=qcow2 \

--disk /kvm/iso/ubuntu-22.04.2-live-server-amd64.iso,device=cdrom \

--network bridge=br0,model=virtio \

--graphics vnc,listen=0.0.0.0,port=5907,password=@dmLuCa \

--boot cdrom,hd,menu=on 


Создание ОС Astra:

virt-install \

--name 1C-BD \

--ram=16384 \

--vcpus=8 \

--arch=x86_64 \

--os-variant=alse17 \

--disk pool=images,size=300,bus=virtio,format=qcow2 \

--disk /kvm/iso/1.7.4-24.04.2023_14.23.iso,device=cdrom \

--network bridge=br0,model=virtio \

--graphics vnc,listen=0.0.0.0,port=5903,password=@dmLuCa \

--boot cdrom,hd,menu=on 


Создание RouterOS:

virt-install \

--name Routeros \

--ram=256 \

--vcpus=1 \

--arch=x86_64 \

--os-variant=debian2.0 \

--graphics vnc,listen=0.0.0.0,port=5905,password=@dmLuCa \

--boot hd \

--disk path=/kvm/images/chr-7.10.2.img \

--network bridge=br2 


Создание Centos:

virt-install \

--name luka-mis \

--ram=48000 \

--vcpus=22 \

--arch=x86_64 \

--os-variant=centos7.0 \

--disk pool=storage_lsi,size=800,bus=virtio,format=qcow2 \

--disk /kvm/iso/CentOS-7-x86_64-Minimal-2009.iso,device=cdrom \

--network bridge=br0,model=virtio \

--graphics vnc,listen=0.0.0.0,port=5906,password=@dmLuCa \

--boot cdrom,hd,menu=on 


Для запуска ОС с использованием UEFI (пример):

<os>

    <type arch='x86_64' machine='pc-q35-7.2'>hvm</type>

    <loader readonly='yes' type='rom'>/usr/share/ovmf/OVMF.fd</loader>

    <boot dev='hd'/>

</os>


конфиг ВМ:

/etc/libvirt/qemu/...


версии ОС:

osinfo-query os


удаление ОС:

virsh list

virsh destroy win10_test2

virsh undefine win10_test2

rm -r /path/to/image


редактировать параметры ВМ в xml:

virsh edit 1C-App


выключить загрузку с boot cd:

<!-- <boot dev='cdrom'/> -->

<!-- <bootmenu enable='yes'/> -->


увеличить объем жесткого диска:

1.остановить ВМ

2.qemu-img resize /kvm/images/Win10-test.qcow2 +5G


увеличить объем ОЗУ, CPU:

virsh edit Win10-test

<topology sockets='1' cores='4' threads='2'/>

</cpu> 

 

Снепшот сделать:

virsh snapshot-create-as --domain Win10-test --name "7.6.23"


Список снепшотов:

virsh snapshot-list --domain Win10-test


Удалить снепшот:

virsh snapshot-delete <vm_name> <snapshot_name>


Возврат к снепшоту:

virsh snapshot-revert --domain Win10-test --snapshotname 7.6.23_2 --running 

virsh snapshot-revert --domain Win10-test --snapshotname 7.6.23_2 --shutoff 


Информация о машине:

virsh dominfo debian_test


Пометить ВМ для автостарта:

virsh autostart Win10-test


Отменить автостарт ВМ:

virsh autostart Win10-test --disable


Приостановить ВМ:

virsh suspend vm_name


Возобновление ВМ:

virsh resume vm_name


добавить сетевой интерфейс:

virsh attach-interface 1C-App --type bridge --source br3 --persistent 


ПРОВЕРКА SMART дисков:

1 cd /opt/MegaRAID/MegaCli

2 ./MegaCli64 -LdPdInfo -aALL | grep Id

3 smartctl -d megaraid,8 -a /dev/sda

  smartctl -d megaraid,4 -a /dev/sda

  smartctl -d megaraid,5 -a /dev/sda  #etc

вывод Device ID дисков:

./MegaCli64 -PDList -aAll | grep Id:

  

Перенос виртуалки с ESXi:

1. scp -r root@172.31.4.204:/vmfs/volumes/5e53a708/migration_test/ /migration

2. qemu-img convert -p -O qcow2  ./migration_test-flat.vmdk  ./migration_test-flat.qcow2

3. создать виртуальную машину с дисками, подменить диски

________________________________________________________

Создать диск:

qemu-img create -f qcow2 /kvm/images/for_tib_with_astra.qcow2 20G


Подключить диск:

virsh attach-disk astra-1.7.3-test --source /kvm/images/for_tib_with_astra.qcow2 --target vdb --persistent --subdriver qcow2


Вывести список поключенных к ВМ дисков:

virsh domblklist astra-1.7.3-test


Отключить диск:

virsh detach-disk --domain luka-mis --target vdb

___________________________________________________________

создание пулов дисков.

смотрим все пулы:

virsh pool-list --all


создаем новый пул:

virsh pool-define-as storage dir --target /kvm_ssd_lsi/images_lsi/


помечаем пул для автостарта:

virsh pool-autostart storage_lsi


Стартуем пул

virsh pool-start storage_lsi


проверяем пул

virsh pool-list –all

--------------------------------------------------------------------------

удаление дисковых пулов

virsh pool-destroy storage_lsi

virsh pool-delete storage_lsi

virsh pool-undefine storage_lsi

смотрим:

virsh pool-list --all

________________________________________________________________________________________


конвертация qcow2 в raw:

выключить машину

сконвертировать диск командой:

qemu-img convert /kvm/images/luka-mis-backups.qcow2 /kvm/images/luka-mis-backups.raw

изменить пути в xml-файле,

включить машину





пятница, 4 августа 2023 г.

Добавить новый iscsi target не перезагружая tgt сервис.

Формируем нужный конфиг (new_target.conf), типа:

<target iqn.2023-01.corp.firma:storage-fs-target>

   backing-store /dev/vg01/lv03

   initiator-address 10.10.12.1

</target>

И подгружаем его командой:

tgt-admin --update ALL -c /etc/tgt/conf.d/new_target.conf

суббота, 26 марта 2022 г.

Запуск Docker внутри LXC контейнера (Debian, Ubuntu).

 1. В конфиге контейнера /var/lib/lxc/name_container/config в низ файла добавляем строки:

lxc.apparmor.profile = unconfined

lxc.cgroup.devices.allow = a

lxc.cap.drop =

2. Подгружаем модули ядра:

modprobe aufs

modprobe overlay

Вносим записи в файл: 

/etc/modules-load.d/modules.conf

чтобы модули загружались после включения:

aufs

overlay

3. Внутри контейнера с установленным Docker создаем файл:

/etc/docker/daemon.json

в который добввляем:

{

  "storage-driver": "overlay2"

}

4.Проверяем работу Docker:

docker run hello-world


вторник, 15 марта 2022 г.

Конвертация vhdx (Hyper-V) в vmdk(ESXi), и не только.

Например для использование в windows. Нужперейти в папку с распакованной программой:

cd C:\users\user\Downloads\qemu-img-win-x64-2_3_0 qemu-img.exe convert -p D:\old_disk.VHDX -O vmdk D:\new_disk.vmdk

где опции -p – показывать прогресс, -O – выходной файл

Скачать можно здесь.