jakonda
Обновление Greenbone Vulnerability Management (GVM) на Debian 11 Bullseye
Опишу порядок действий по обновлению Greenbone Vulnerability Management (GVM) до актуальной версии.
Обновление GVM буду производить с версии 22.4.1 до 22.7.3 (самая актуальная на дату написания статьи). Все действия ниже будут выполняться от root.
Сперва останавливаем службы GVM:
systemctl stop notus-scanner systemctl stop ospd-openvas systemctl stop gvmd systemctl stop gsad
Greenbone Security Assistant (GSA) требуется установленная версия NodeJS >= v18.x. В моем случае NodeJS была установлена версии v14.x., если у вас так же, то выполняем обновление NodeJS до v18.x.:
export NODE_VERSION=node_18.x export KEYRING=/usr/share/keyrings/nodesource.gpg export DISTRIBUTION="$(lsb_release -s -c)" curl -fsSL https://deb.nodesource.com/gpgkey/nodesource.gpg.key | gpg --dearmor | sudo tee "$KEYRING" >/dev/null gpg --no-default-keyring --keyring "$KEYRING" --list-keys echo "deb [signed-by=$KEYRING] https://deb.nodesource.com/$NODE_VERSION $DISTRIBUTION main" | sudo tee /etc/apt/sources.list.d/nodesource.list echo "deb-src [signed-by=$KEYRING] https://deb.nodesource.com/$NODE_VERSION $DISTRIBUTION main" | sudo tee -a /etc/apt/sources.list.d/nodesource.list apt-get update && apt-get upgrade node -v
Для удобства создадим каталог для размещения актуальных версий пакетов входящих в состав GVM и скачиваем исходников пакетов и распаковываем их:
mkdir -p /opt/update cd /opt/update/ export GVM_LIBS_VERSION=$(curl -s https://api.github.com/repos/greenbone/gvm-libs/releases/latest | grep -Po '"tag_name":.*?[^\\]",' | awk '{print $2}' | sed 's/^..\(.*\)..$/\1/') export GVMD_VERSION=$(curl -s https://api.github.com/repos/greenbone/gvmd/releases/latest | grep -Po '"tag_name":.*?[^\\]",' | awk '{print $2}' | sed 's/^..\(.*\)..$/\1/') export PG_GVM_VERSION=$(curl -s https://api.github.com/repos/greenbone/pg-gvm/releases/latest | grep -Po '"tag_name":.*?[^\\]",' | awk '{print $2}' | sed 's/^..\(.*\)..$/\1/') export GSA_VERSION=$(curl -s https://api.github.com/repos/greenbone/gsa/releases/latest | grep -Po '"tag_name":.*?[^\\]",' | awk '{print $2}' | sed 's/^..\(.*\)..$/\1/') export GSAD_VERSION=$(curl -s https://api.github.com/repos/greenbone/gsad/releases/latest | grep -Po '"tag_name":.*?[^\\]",' | awk '{print $2}' | sed 's/^..\(.*\)..$/\1/') export OPENVAS_SMB_VERSION=$(curl -s https://api.github.com/repos/greenbone/openvas-smb/releases/latest | grep -Po '"tag_name":.*?[^\\]",' | awk '{print $2}' | sed 's/^..\(.*\)..$/\1/') export OPENVAS_SCANNER_VERSION=$(curl -s https://api.github.com/repos/greenbone/openvas-scanner/releases/latest | grep -Po '"tag_name":.*?[^\\]",' | awk '{print $2}' | sed 's/^..\(.*\)..$/\1/') export OSPD_OPENVAS_VERSION=$(curl -s https://api.github.com/repos/greenbone/ospd-openvas/releases/latest | grep -Po '"tag_name":.*?[^\\]",' | awk '{print $2}' | sed 's/^..\(.*\)..$/\1/') export NOTUS_VERSION=$(curl -s https://api.github.com/repos/greenbone/notus-scanner/releases/latest | grep -Po '"tag_name":.*?[^\\]",' | awk '{print $2}' | sed 's/^..\(.*\)..$/\1/') echo $GVM_LIBS_VERSION echo $GVMD_VERSION echo $PG_GVM_VERSION echo $GSA_VERSION echo $GSAD_VERSION echo $OPENVAS_SMB_VERSION echo $OPENVAS_SCANNER_VERSION echo $OSPD_OPENVAS_VERSION echo $NOTUS_VERSION curl -f -L https://github.com/greenbone/gvm-libs/archive/refs/tags/v$GVM_LIBS_VERSION.tar.gz -o gvm-libs-$GVM_LIBS_VERSION.tar.gz curl -f -L https://github.com/greenbone/gvmd/archive/refs/tags/v$GVMD_VERSION.tar.gz -o gvmd-$GVMD_VERSION.tar.gz curl -f -L https://github.com/greenbone/pg-gvm/archive/refs/tags/v$PG_GVM_VERSION.tar.gz -o pg-gvm-$PG_GVM_VERSION.tar.gz curl -f -L https://github.com/greenbone/gsa/archive/refs/tags/v$GSA_VERSION.tar.gz -o gsa-$GSA_VERSION.tar.gz curl -f -L https://github.com/greenbone/gsad/archive/refs/tags/v$GSAD_VERSION.tar.gz -o gsad-$GSAD_VERSION.tar.gz curl -f -L https://github.com/greenbone/openvas-smb/archive/refs/tags/v$OPENVAS_SMB_VERSION.tar.gz -o openvas-smb-$OPENVAS_SMB_VERSION.tar.gz curl -f -L https://github.com/greenbone/openvas-scanner/archive/refs/tags/v$OPENVAS_SCANNER_VERSION.tar.gz -o openvas-scanner-$OPENVAS_SCANNER_VERSION.tar.gz curl -f -L https://github.com/greenbone/ospd-openvas/archive/refs/tags/v$OSPD_OPENVAS_VERSION.tar.gz -o ospd-openvas-$OSPD_OPENVAS_VERSION.tar.gz curl -f -L https://github.com/greenbone/notus-scanner/archive/refs/tags/v$NOTUS_VERSION.tar.gz -o notus-scanner-$NOTUS_VERSION.tar.gz tar -xvzf gvm-libs-$GVM_LIBS_VERSION.tar.gz && mv gvm-libs-$GVM_LIBS_VERSION gvm-libs tar -xvzf gvmd-$GVMD_VERSION.tar.gz && mv gvmd-$GVMD_VERSION gvmd tar -xvzf pg-gvm-$PG_GVM_VERSION.tar.gz && mv pg-gvm-$PG_GVM_VERSION pg-gvm tar -xvzf gsa-$GSA_VERSION.tar.gz && mv gsa-$GSA_VERSION gsa tar -xvzf gsad-$GSAD_VERSION.tar.gz && mv gsad-$GSAD_VERSION gsad tar -xvzf openvas-smb-$OPENVAS_SMB_VERSION.tar.gz && mv openvas-smb-$OPENVAS_SMB_VERSION openvas-smb tar -xvzf openvas-scanner-$OPENVAS_SCANNER_VERSION.tar.gz && mv openvas-scanner-$OPENVAS_SCANNER_VERSION openvas-scanner tar -xvzf ospd-openvas-$OSPD_OPENVAS_VERSION.tar.gz && mv ospd-openvas-$OSPD_OPENVAS_VERSION ospd-openvas tar -xvzf notus-scanner-$NOTUS_VERSION.tar.gz && mv notus-scanner-$NOTUS_VERSION notus-scanner
Как очистить почтовые ящики Dovecot из командной строки.
При использовании Postfix и Dovecot, в какой-то момент столкнулся с проблемой, что некоторые почтовые ящики пользователей заполнились настолько, что попытки удалить почту через web-клиент приводили к его зависанию. В папках было огромное количество спам-писем.
Ниже приведу примеры как выполнять очистку почтовых ящиков пользователей.
Для полной очистки папки INBOX для ВСЕХ пользоватлей, команда:
doveadm expunge -A mailbox INBOX ALL
Для полной очистки папки INBOX конкретного пользователя, команда:
doveadm expunge -u example@domain.com mailbox INBOX ALL
Для очистки папки INBOX писем стерше 2х недель, выполним команду:
doveadm expunge -A mailbox INBOX savedbefore 2w
Для очистки папки INBOX писем стерше 1го дня, выполним команду:
doveadm expunge -A mailbox INBOX before 1d
Как ввести Debian в домен Windows (Active Directory) с помощью realmd, SSSD.
Рассмотрим как ввести систему Debian в домен Windows с помощью realmd, SSSD.
Realmd (Realm Discovery) – сервис D-Bus, позволяющий производить настройку сетевой аутентификации и членства в домене (Active Directory) без сложных настроек. Информация о домене обнаруживается автоматически. Для аутентификации и проверки учетных записей realmd
использует SSSD
(через Kerberos и LDAP) или Winbind
.
SSSD (System Security Services Daemon) — это клиентский компонент централизованных решений для управления идентификацией, таких как Microsoft Active Directory, Kerberos, OpenLDAP и других серверов каталогов. SSSD обслуживает и кэширует информацию, хранящуюся на удаленном сервере каталогов, и предоставляет услуги идентификации, аутентификации и авторизации хост-машине.
Исходные данные:
- Контроллер домена (DC1) на Windows Server 2019, домен JAKONDA.LOCAL (IP — 192.168.1.100)
- Linux система (debian) на Debian 11 Bullseye (IP — 192.168.1.10)
Подготовка системы
# Обновляем информацию о репозиториях и обновляем установленные пакеты:
apt-get update && apt-get upgrade -y
Указываем FQDN (Fully Qualified Domain Name) имя системы, в файле /etc/hostname
:
debian.jakonda.local
Файл /etc/hosts
приводим к виду таким образом, чтобы в нём была запись с полным доменным именем компьютера и с коротким именем, ссылающаяся на один из внутренних IP хоста:
127.0.0.1 localhost 192.168.1.10 debian.jakonda.local debian
Настраиваем клиент DNS на хосте. Файл /etc/resolv.conf
приводим к виду с учетом ваших данных:
domain jakonda.local search jakonda.local nameserver 192.168.1.100
Настройка синхронизации времени
Очень важно для корректной работы чтобы разница во времени между хостом и домен контроллером была минимальная или не превышала более 5 минут, в противном случае не возможно получить билет от Kerberos. Настроим синхронизацию времени с контроллером домена.
# Устанавливаем необходимые пакеты:
apt-get install ntp ntpdate
В файле /etc/ntp.conf
, указываем контроллер домена в качестве точки синхранизации, остальные комментируем :
# You do need to talk to an NTP server or two (or three). server dc1.jakonda.local # pool.ntp.org maps to about 1000 low-stratum NTP servers. Your server will # pick a different set every time it starts up. Please consider joining the # pool: <http://www.pool.ntp.org/join.html> # pool 0.debian.pool.ntp.org iburst # pool 1.debian.pool.ntp.org iburst # pool 2.debian.pool.ntp.org iburst # pool 3.debian.pool.ntp.org iburst
Выполняем единовременную синхронизацию времени с контроллером домена и запускаем службу:
/etc/init.d/ntp stop ntpdate -bs jakonda.local /etc/init.d/ntp start
Установка из исходников OpenConnect VPN-сервера (ocserv) на Debian 11 Bullseye
Разберем как установить из исходников актуальную (на момент написания статьи) версию VPN-сервера OpenConnect 1.2.2 на Debian 11 Bullseye.
# Все ниже действия будут производится из под root.
# Обновляем информацию о репозиториях и обновляем установленные пакеты:
apt-get update && apt-get upgrade -y
# Устанавливаем необходимые зависимости:
apt-get install build-essential make pkg-config libgnutls28-dev libev-dev libpam0g-dev liblz4-dev libseccomp-dev libreadline-dev libnl-route-3-dev libkrb5-dev libradcli-dev libpcl1-dev libcjose-dev libjansson-dev liboath-dev libprotobuf-c-dev libtalloc-dev libhttp-parser-dev libcurlpp-dev libssl-dev libmaxminddb-dev libbsd-dev libsystemd-dev libwrap0-dev libuid-wrapper libpam-wrapper libnss-wrapper libsocket-wrapper gss-ntlmssp tcpdump protobuf-c-compiler iperf3 lcov ssl-cert libpam-oath
# Скачиваем и распаковываем исходники OpenConnect (на момент написания статьи последняя версия 1.2.2):
wget -P /opt/ https://www.infradead.org/ocserv/download/ocserv-1.2.2.tar.xz tar -xvf /opt/ocserv-1.2.2.tar.xz -C /opt/ cd /opt/ocserv-1.2.2
# Собираем и устанавливаем — OpenConnect:
./configure --prefix= --enable-oidc-auth make && make install
# Создаем рабочий каталог для ocserv
и копируем примеры файлов конфигурации в него:
mkdir -p /etc/ocserv/ cp doc/sample.config /etc/ocserv/ocserv.conf cp doc/sample.passwd /etc/ocserv/ cp doc/sample.otp /etc/ocserv/ cp doc/profile.xml /etc/ocserv/
# Создаем пользователя ocserv
от которого будет работать служба:
useradd -r -M -U -s /usr/sbin/nologin ocserv
Центр сертификации OpenSSL (Root и Intermediate CA certificates) на Debian 11 Bullseye
Разберем как поднять двухуровневую PKI (Root и Intermediate CA) инфраструктуру на базе OpenSSL в Debian 11 Bullseye.
Схема PKI (Root и Intermediate CA) инфраструктуры:
Используемые сервера и их обозначения в инструкции ниже:
- Корневой ЦС — rootCA
- Промедуточный ЦС — intermidiateCA
- OCSP Responder — intermidiateCA
- Веб-сервер — webCA
Устанавливаем OpenSSL на оба сервера (rootCA, intermidiateCA):
apt-get install openssl -y
Корневой центр сертификации (Offline Root CA)
Структура каталогов и файлов
Создадим структуру каталогов для хранения файлов ЦС, сертификатов и закрытых ключей:
mkdir -p /opt/CA/rootCA/{certs,crl,newcerts,private,csr} cd /opt/CA/rootCA
где:
certs | Этот каталог содержит сертификаты, сгенерированные и подписанные ЦС. |
crl | Каталог списка отзыва сертификатов (CRL) содержит списки отзыва сертификатов, сгенерированные ЦС. |
newcerts | В этом каталоге хранится копия каждого сертификата, подписанного ЦС, с серийным номером сертификата в качестве имени файла. |
private | Этот каталог содержит закрытые ключи для ЦС, включая закрытые ключи корневого ЦС и промежуточного ЦС. Эти ключи используются для подписи сертификатов и CRL. |
csr | В этом каталоге хранится копия каждого запроса сертификата. |
Как изменить размер раздел диска Linux
Рассмотрим как на виртуальной машине Linux увеличить раздел диска без LVM.
Исходные данные
- Debian 11
- Исходный размер /dev/sda — 20G
- Необходимо увеличить размер /dev/sda — 25G
Исходные данные
В системе один диск /dev/sda размером 20G, отобразим информацию по нему:
fdisk -l Disk /dev/sda: 20 GiB, 21474836480 bytes, 41943040 sectors Disk model: Virtual Disk Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 4096 bytes I/O size (minimum/optimal): 4096 bytes / 4096 bytes Disklabel type: dos Disk identifier: 0x73000288 Device Boot Start End Sectors Size Id Type /dev/sda1 * 2048 39942143 39940096 19G 83 Linux /dev/sda2 39944190 41940991 1996802 975M 5 Extended /dev/sda5 39944192 41940991 1996800 975M 82 Linux swap / Solaris
df -h Filesystem Size Used Avail Use% Mounted on udev 944M 0 944M 0% /dev tmpfs 192M 500K 192M 1% /run /dev/sda1 19G 990M 17G 6% / tmpfs 960M 0 960M 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 192M 0 192M 0% /run/user/1000
Увеличение размера диска
Увеличиваем размер жесткого диска в ВМ, в моем случае я увеличиваю до 25G. После расширения диска в ВМ, принудительно выполним рескан дисков, командой:
echo 1 > /sys/block/sda/device/rescan
Проверяем изменения. В случае если после рескана размер диска не увеличился в системе, то выполняем перезагрузку и проверяем повторно.
fdisk -l Disk /dev/sda: 25 GiB, 26843545600 bytes, 52428800 sectors Disk model: Virtual Disk Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 4096 bytes I/O size (minimum/optimal): 4096 bytes / 4096 bytes Disklabel type: dos Disk identifier: 0x73000288 Device Boot Start End Sectors Size Id Type /dev/sda1 * 2048 39942143 39940096 19G 83 Linux /dev/sda2 39944190 41940991 1996802 975M 5 Extended /dev/sda5 39944192 41940991 1996800 975M 82 Linux swap / Solaris
Не освободилось место после удаления файла в Linux
Иногда сталкиваюсь с таким явлением как место не освобождается после удаления файла в Linux, это случает в случае если удаленный файл все еще занят каким-либо процессом.
К примеру мы имеем большой файл /var/log/mysql/error.log и мы его удалили:
rm -rf /var/log/mysql/error.log
Теперь проверим удалился ли файл или все еще фактически остался на диске и используется каким либо процессом, выполним команду:
lsof | grep deleted | grep error.log COMMAND PID TID TASKCMD USER FD TYPE DEVICE SIZE/OFF NODE NAME mariadbd 641 768 mariadbd mysql 6u REG 8,1 178689523 917524 /var/log/mysql/error.log (deleted)
Видим что файл /var/log/mysql/error.log с пометкой (deleted) занят процессом mariadbd и не может быть удален. Можно конечно перезагрузить сервер и тогда файл удалится, но не всегда перезагрузка возможна, поэтому мы освободим удаленный файл от процесса, тем самым высвободим занимаемое им место.
Зная PID процесса (641) найдем номер файлового дескриптора удаленного файла, командой:
ls -l /proc/641/fd | grep error.log l-wx—— 1 root root 64 Dec 25 10:00 10 -> /var/log/mysql/error.log
Полезные команды по работе с SSL-сертификатами при помощи OpenSSL
Иногда приходится работать с SSL-сертификатами и каждый раз приходится вспоминать, либо искать информацию как сделать то или иное действие с сертификатами при помощи OpenSSL.
Поэтому решил создать дополняему статью на тему полезных команд по работе с SSL-сертификатами при помощи OpenSSL.
Проверка на валидность сертификата
Проверка .pem, .crt — сертификата.
Проверка .key — приватного ключа.
Проверка .csr — ключ запроса сертификата.
MD5 у всех должен совпадать. Важно чтобы MD5 были одинаковые только у приватного ключа (.key) и сертификата (.pem, .crt), .csr нужен в случае если понадобится продлевать данный сертификат.
openssl x509 -noout -modulus -in server.crt | openssl md5 openssl rsa -noout -modulus -in server.key | openssl md5 openssl req -noout -modulus -in request.csr | openssl md5
Пример.
root@openssl:~/intermediate# openssl rsa -noout -modulus -in private/server.key | openssl md5 (stdin)= f6647d0867087e0adae0d65d5451a994 root@openssl:~/intermediate# openssl x509 -noout -modulus -in certs/server.crt | openssl md5 (stdin)= f6647d0867087e0adae0d65d5451a994 root@openssl:~/intermediate# openssl req -noout -modulus -in csr/server.csr | openssl md5 (stdin)= f6647d0867087e0adae0d65d5451a994
Как извлечь файлы .crt и .key из файла .pfx
Файл .pfx, который находится в формате PKCS#12, содержит сертификат SSL (открытые ключи) и соответствующие закрытые ключи. Иногда необходимо извлечь сертификат и закрытый ключ в незашифрованный текстовый формат, чтобы использовать их в другой системе.
Рассморим как преобразовать файл .pfx в отдельные файлы .crt и .key.
Извлечение .crt и .key из файла .pfx
Команда чтобы извлечь закрытый ключ:
openssl pkcs12 -in [yourfile.pfx] -nocerts -out [encrypted_key.key]
В процессе извлечения необходимо ввести пароль, который использовали при создании файла .pfx. Далее будет предложено ввести новый пароль для защиты экспортируемого файла .key.
Команда чтобы расшифровать закрытый ключ:
openssl rsa -in [encrypted_key.key] -out [decrypted_key.key]
Для дешифрации необходимо ввести пароль, который задавали для защиты файла закрытого ключа на предыдущем шаге.
Команда чтобы извлечь сертификат:
openssl pkcs12 -in [yourfile.pfx] -clcerts -nokeys -out [certificate.crt]