Przygotowanie do upgrade Windows 10 do 11 na Proxmox

Aby można było wykonać upgrade VM Windows do wersji 11 musimy odpowiednio przygotować VM. Do VM Windows musimy dodać TPM2 oraz przestawić z Bios na UEFI.

Dodanie TPM2

VM > Hardware > Add > TPM State

Zmina BIOS na UEFI

Microsoft w Win10 udostępnił narzędzie do zmiany z mbr na efi.

Dla bezpieczeństwa w Proxmox robimy snapshot dla VM, którą będziemy modyfikować.

W cmd z prawmi admina(niektóre polecenia nie będa działały w powershell prawidłowo) uruchamiamy sprawdzanie możliwości konwersji

mbr2gpt /validate /allowFullOS

Na tym etapie możemy napotkać błąd:
Cannot find OS partition(s) for disk 0

Częstą przyczyną tego problemu są błądne wpisy w bcd odnośnie partycji recovery.
Przyczynę problemu możemy zidentyfikować w logach c:\windows\setuperr.log oraz c:\windows\setupact.log. Mogą być tam wpisy podobne do „FindOSPartitions: Cannot get volume name for the recovery boot entry”
Polecenie bcedit /enum all pokaże ramdisk=[unknown]

Możemy usunąć ten wpis jeżeli nie potrzebujemy recovery w naszym Windows

Poleceniem bcdedit bez parametrów pobieramy identyfikator „recoverysequence” z sekcji Windows „Boot Loader”

Teraz możemy usunąć wpis, który powoduje problemy

bcedit /delete {recoverysequence}

po tej operacji polecenie bcedit /enum all nie powinno pokazać już wpisu zawierającego ramdisk=[unknown]

możemy ponownie uruchomić walidację przed zmianą mbr2gpt /validate /allowFullOS

Jeżeli polecenie z mbr2gpt z parametrem validate nie pokazuje błędu to możemu zacząć konwersję, jako disk:x podajemy dysk zidentyfikowany w poleceniu validate np disk:0

mbr2gpt /convert /disk:x /allowFullOS

Możesz natknąć się na komunikat błedu. Failed to update ReAgent.xml, ja go zignorowałem bez dalszych konsekwencji.

Wyłączamy maszynę i w Proxmox Dodajemy EFI Disk z zaznaczona opcją Pre-Enroll Keys, partycję EFI dodaję zawsze na tym samym zasobie co główny dysk VM’ki.
VM > Hardware > Add > EFI Disk oraz opcję BIOS zmieniamy na OVMF (UEFI).
Uruchamiamy VM.

Gdy Windows się uruchomił możemy usunąć snapshota

Na VM możemy sprawdzić czy wszystkie wymagania do aktualizacji są spełnione programem od Microsoft PC Health Check App

Uruchomienie programu lub skryptu w kontekście użytkownika SYSTEM

Pobieramy z SysInternals program PsTools i z tego pakietu uruchamiamy 'psexec’ z uprawnieniami administratora.

psexec -s -i cmd.exe

Teraz w nowej konsoli możemy uruchomić dowolny program w kontekście uprzywilejowanego użytkownika SYSTEM. Dzięki temu możemy np. przetestować skrypt, który ma być uruchomiony z polityki GPO na wszystkich komputerach w domenie.

ADCS – Sprawdzanie podatności

W Kali linux uruchamiamy polecenie:

certipy-ad find -stdout -vulnerable -dc-ip <ip domain controller> -target <domena windows> -u <domain user>

domain user to zwykły użytkownik domeny bez praw admina
W odpowiedzi na dole ekranu w sekcji „[!] Vulnerabilities” zobaczymy podatności naszego serwera ADCS np:
ESC8 : Web Enrollment is enabled and Request Disposition is set to Issue

A w sekcji „Certificate Templates” podatne szablony certfikatów, jeżeli istnieją.

FortiClient – Linux – problem z połączeniem VPN

Przy próbie połączenia za pomocą FortiClient z VPN w Ubuntu 24.04 wyświetla się komunikat „config DNS failed”.

Problem wydaje się występować jeżeli w systemie mamy zainstalowane interfejsy sieciowe z Vmware Workstion lub Docker. Aby rozwiązać problem, należy w konfiguracji wykluczyć te interfejsy z zarządzania przez NetworkManager.

Edytujemy plik /etc/NetworkManager/NetworkManager.conf i dodajemy interfejsy, które chcemy wykluczyć:

$ sudo nano /etc/NetworkManager/NetworkManager.conf
[keyfile]
unmanaged-devices=interface-name:docker0;interface-name:br-*;interface-name:vmnet*

W mim przypadku docker0 i br-* to interfejsy Docker a vmnet* to maska interfejsów Vmware

Restarujemy NetworkManager i Docker jeżeli go używamy:

sudo systemctl restart NetworkManager
sudo systemctl restart docker

ZFS -Zbiorcze usuwanie snapshotów

Chcemy usunąć snapshoty, które w nazwie mają „test” z sierpnia 2024

Listujemy, które snapshoty zostaną usunięte:
# zfs list -t snapshot -H -o name | grep "test.*2024-08" | xargs -n1 echo
Usuwamy
# zfs list -t snapshot -H -o name | grep "test.*2024-08" | xargs -n1 zfs destroy

DNS – Konfiguracja gdy domena nie używana do wysyłania poczty

You need to add a widget, row, or prebuilt layout before you’ll see anything here. 🙂

Gdy nasza domena nie jest używana do rozsyłania poczty, możemy dodać do dnsu wpisy, które będa utrudniać przyjmowanie poczty z naszej domeny przez inne serwery.

SPF – nie zgadzamy się na wysyłanie poczty z żadnego adresu IP

nasza.domena.pl    TXT      v=spf1 -all

DMARC – Informujemy odbiorcze serwery poczty, aby w przypadku nie zgodności polityk DMARC odrzucały maile

_dmarc.nasza.domena.pl    TXT      v=DMARC1;p=reject;

K3s – Wygaśnięte certyfikaty

Wygasłe certyfikaty powinny się odnowić przy ponownym uruchomieniu k3s:

# systemctl restart k3s

Jeżeli certyfikaty się nie odnowią i widzimy komunikat:

# kubectl get nodes
Unable to connect to the server: x509: certificate has expired or is not yet valid

Możemy wymusić wygenerowanie nowych.
Zabezpieczamy katalog z dotychczasowymi sekretami TLS

# tar -czvf /var/lib/rancher/k3s/server/apphost-cert.tar.gz /var/lib/rancher/k3s/server/tls

Usuwamy plik

# rm /var/lib/rancher/k3s/server/tls/dynamic-cert.json

Usuwamy zbuforowany certyfikat z sekretów kubernetes

# kubectl --insecure-skip-tls-verify=true delete secret -n kube-system k3s-serving

Uruchamiamy ponownie usługę K3s, aby odnowić certyfikaty

# systemctl restart k3s

Zabbix zgłasza problemy z usługami GoogleUpdater w Windows

Usługa GoogleUpdater często zmiania swoją nazwę a Zabbix nas o tym informuje. Zmienimy ustawienia Zabbixa aby nie monitorował tej usługi.

  • Data Collection -> Templates -> Windows by Zabbix agent -> Macros
  • Do macra {$SERVICE.NAME.NOT_MATCHES} na końcu przed ’)$’ dodajemy '|GoogleUpdater.*’
  • Wyłączamy tiggery na które wskazują bierzące alarmy GoogleUpdater. (Na liście problemów lewy przycisk myszy na nazwie problemu nastepnie wybieramy z menu Tigger. W okienku na dole odznaczamy Enabled i zatwierdzamy zmiany)

Kubernetes – Tworzenie obiektu configmap na podstawie dowolnego pliku

Możemy stworzyć configmapę na podstawie dowolnego pliku. W naszym przypadku bedzie to plik appsettings.json.

$ kubectl create configmap ares-api-config --from-file=Configuration/appsettings.json -n test

Ta metoda nie pozwoli nam zaktualizować configmapy bez jej usunięcia z klastra. Aby rozwiązać ten problem możemy najpierw utworzyć na podstawie naszego pliku appsettings.json plik yaml, następnie go zaaplikować. Gdy będziemy chcieli zmienić obiekt configmap w klastrze to powtarzamy ten proces.

$ kubectl create configmap ares-api-config --from-file=Configuration/appsettings.json -n test --dry-run=client -o yaml > configmap.yaml
$ kubectl apply -f configmap.yaml -n test

Testowanie połączenia ssl/tls za pomocą openssl

Gdy potrzebujemy przetestować przebieg połączenie ssl z serwerem http, poczty lub innym wykorzystującym protokół ssl/tls, możemy spróbować połączyć się z serwerem używając openssl w trybie klienta.

# openssl s_client -connect google.com:443

CONNECTED(00000003)                                                                                                                                                                                                                                                                                                                                   
depth=2 C = US, O = Google Trust Services LLC, CN = GTS Root R1                                                                                                                                                                                                                                                                                       
verify return:1                                                                                                                                                                                                                                                                                                                                       
depth=1 C = US, O = Google Trust Services, CN = WR2                                                                                                                                                                                                                                                                                                   
verify return:1                                                                                                                                                                                                                                                                                                                                       
depth=0 CN = *.google.com                                                                                                                                                                                                                                                                                                                             
verify return:1                                                                                                                                                                                                                                                                                                                                       
---                                                                                                                                                                                                                                                                                                                                                   
Certificate chain                                                                                                                                                                                                                                                                                                                                     
 0 s:CN = *.google.com                                                                                                                                                                                                                                                                                                                                
   i:C = US, O = Google Trust Services, CN = WR2                                                                                                                                                                                                                                                                                                      
   a:PKEY: id-ecPublicKey, 256 (bit); sigalg: RSA-SHA256                                                                                                                                                                                                                                                                                              
   v:NotBefore: Jun  3 06:35:38 2024 GMT; NotAfter: Aug 26 06:35:37 2024 GMT                                                                                                                                                                                                                                                                          
 1 s:C = US, O = Google Trust Services, CN = WR2                                                                                                                                                                                                                                                                                                      
   i:C = US, O = Google Trust Services LLC, CN = GTS Root R1                                                                                                                                                                                                                                                                                          
   a:PKEY: rsaEncryption, 2048 (bit); sigalg: RSA-SHA256                                                                                                                                                                                                                                                                                              
   v:NotBefore: Dec 13 09:00:00 2023 GMT; NotAfter: Feb 20 14:00:00 2029 GMT                                                                                                                                                                                                                                                                          
 2 s:C = US, O = Google Trust Services LLC, CN = GTS Root R1                                                                                                                                                                                                                                                                                          
   i:C = BE, O = GlobalSign nv-sa, OU = Root CA, CN = GlobalSign Root CA                                                                                                                                                                                                                                                                              
   a:PKEY: rsaEncryption, 4096 (bit); sigalg: RSA-SHA256                                                                                                                                                                                                                                                                                              
   v:NotBefore: Jun 19 00:00:42 2020 GMT; NotAfter: Jan 28 00:00:42 2028 GMT                                                                                                                                                                                                                                                                          
---                                                                                                                                                                                                                                                                                                                                                   
Server certificate                                                                                                                                                                                                                                                                                                                                    
-----BEGIN CERTIFICATE-----                                                  
MIIOTTCCDTWgAwIBAgIQag+0Dl9hY5UKDMPiKzcGqDANBgkqhkiG9w0BAQsFADA7             
MQswCQYDVQQGEwJVUzEeMBwGA1UEChMVR29vZ2xlIFRydXN0IFNlcnZpY2VzMQww
. . . . .

W wyniku polecenia zobaczymy cały przebieg połączenia który może ułątwić nam identyfikację problemów z certyfikatami

Gdy chemy sprawdzić start tls smtp do do polecenia dodajemy parametr -starttls smtp lub -starttls ftp