Privacy, Cypherpunk, #bitcoin #nostr на русском. и немного философии... Love Qubes OS & Graphene OS 😎 Добавьте себе эти дополнительные реле и увидите намного больше контента в nostr: wss://nostr.data.haus wss://relay.ditto.pub wss://relay.momostr.pink
Public Key
npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl Profile Code
nprofile1qqsvxru0je5s93mxecm8em86prae9uatn9khgdf2nd2frv8afm2979gpp4mhxue69uhkummn9ekx7mqpz3mhxue69uhhyetvv9ujuerpd46hxtnfdu0nzuwv
Show more details
Published at
2026-05-12T08:29:30+02:00 Event JSON
{
"id": "1b30efa5425684531bd8389795a32aab11360b6c7cad18993b3ca58e67f391dc" ,
"pubkey": "c30f8f966902c766ce367cecfa08fb92f3ab996d74352a9b5491b0fd4ed45f15" ,
"created_at": 1778567370 ,
"kind": 0 ,
"tags": [
[
"alt",
"User profile for linux_privacy"
],
[
"name",
"linux_privacy"
],
[
"picture",
"https://blossom.primal.net/3b0783e6ff4c57e9ed5886e3d58db31592c28d0c06d6aff9157fca59291d6523.webp"
],
[
"banner",
"https://image.nostr.build/6bd3db5d6ad9157665747bc1ccc12b121517d138eada4ec389d175e02b6b1bf5.jpg"
],
[
"about",
"Privacy, Cypherpunk, #bitcoin #nostr на русском. и немного философии...\nLove Qubes OS \u0026 Graphene OS 😎\n\nДобавьте себе эти дополнительные реле и увидите намного больше контента в nostr:\nwss://nostr.data.haus\nwss://relay.ditto.pub\nwss://relay.momostr.pink"
],
[
"lud16",
"[email protected] "
],
[
"client",
"Amethyst"
]
],
"content": "{\"name\":\"linux_privacy\",\"about\":\"Privacy, Cypherpunk, #bitcoin #nostr на русском. и немного философии...\\nLove Qubes OS \u0026 Graphene OS 😎\\n\\nДобавьте себе эти дополнительные реле и увидите намного больше контента в nostr:\\nwss://nostr.data.haus\\nwss://relay.ditto.pub\\nwss://relay.momostr.pink\",\"gender\":\"\",\"area\":\"\",\"picture\":\"https://blossom.primal.net/3b0783e6ff4c57e9ed5886e3d58db31592c28d0c06d6aff9157fca59291d6523.webp\",\"banner\":\"https://image.nostr.build/6bd3db5d6ad9157665747bc1ccc12b121517d138eada4ec389d175e02b6b1bf5.jpg\",\"lud16\":\"[email protected] \",\"pubkey\":\"c30f8f966902c766ce367cecfa08fb92f3ab996d74352a9b5491b0fd4ed45f15\",\"is_deleted\":false}" ,
"sig": "9ee6acc13ffeb920073ecda84f6152e14adb45466b6daf66bc4a4e6dd49944b6146ce1a6be006af4aa8bbd1ead0da1da7f0adb300ed0fc0c28cc0ed91e6e1f16"
}
Last Notes npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy :locked: 1. Ephemeral Encrypted Volatile DVMs (for devices up to 16 GB RAM) Script deploys a systemd service that creates a fresh LUKS-encrypted LVM thin pool on every boot, clones all DVM templates into it as ephemeral -ephemeral variants, and completely destroys the pool - including all VM volumes, encryption keys, and the underlying image file - on shutdown. This guarantees that all DVM session data resides exclusively on encrypted volatile storage that is cryptographically irrecoverable after poweroff, leaving no forensic traces on disk. This solution does not impose any additional memory load, which is critical for devices with less than 16 GB of RAM. My friends with 16 GB devices experienced severe issues when running DVMs entirely in RAM - DVMs would crash unexpectedly, or dom0 would start glitching: panel and app menu artifacts, cursor freezes. Make sure there is sufficient free space (more than 4 GB) in dom0. You can resize dom0 these commands: sudo lvresize --size 4G /dev/mapper/qubes_dom0-root sudo resize2fs /dev/mapper/qubes_dom0-root sudo lvresize -L +4G qubes_dom0/root-pool Run this simple script in dom0 terminal: #!/bin/bash sudo tee /etc/systemd/system/ephemeral-pool.service << 'EOF' [Unit] Description=Fresh ephemeral encrypted LVM pool with DVM auto-clone After=local-fs.target qubesd.service Requires=qubesd.service[email protected] [email protected] [Service] Type=oneshot RemainAfterExit=yes ExecStartPre=-/usr/local/bin/ephemeral-pool-destroy.sh ExecStart=/usr/local/bin/ephemeral-pool-create.sh ExecStop=/usr/local/bin/ephemeral-pool-destroy.sh [Install] WantedBy=multi-user.target EOF sudo tee /usr/local/bin/ephemeral-pool-create.sh << 'EOF' #!/bin/bash set -uo pipefail POOL_NAME="ephemeral_pool" MOUNT_BASE="/var/tmp/ephemeral" KEY_FILE="/dev/shm/ephemeral.key" IMG_FILE="${MOUNT_BASE}/pool.img" LUKS_NAME="ephemeral_crypt" POOL_SIZE="4G" ROOT_DEV=$(findmnt -n -o SOURCE / 2>/dev/null || echo "") if echo "$ROOT_DEV" | grep -qE "(overlay|/dev/zram0)"; then echo "[*] Detected amnesiac mode: $ROOT_DEV" echo " Destroying old ephemeral VMs and artifacts..." for vm in $(qvm-ls --raw-list --running 2>/dev/null); do if qvm-volume list "$vm" 2>/dev/null | grep -q "${POOL_NAME}"; then echo " -> Stopping: $vm" qvm-shutdown --wait --timeout 10 "$vm" 2>/dev/null || \ qvm-kill "$vm" 2>/dev/null || true fi done for vm in $(qvm-ls --raw-list 2>/dev/null); do if qvm-volume list "$vm" 2>/dev/null | grep -q "${POOL_NAME}"; then echo " -> Removing VM: $vm" qvm-remove --force "$vm" 2>/dev/null || true fi done qvm-pool remove "${POOL_NAME}" 2>/dev/null || true vgchange -an ephemeral_vg 2>/dev/null || true vgremove -f ephemeral_vg 2>/dev/null || true cryptsetup close "${LUKS_NAME}" 2>/dev/null || true rm -f "${KEY_FILE}" "${IMG_FILE}" echo "[+] Cleanup completed. Pool creation skipped in amnesiac mode." exit 0 fi for vm in $(qvm-ls --raw-list 2>/dev/null); do if qvm-volume list "$vm" 2>/dev/null | grep -q "${POOL_NAME}"; then echo " -> Removing VM: $vm" qvm-kill "$vm" 2>/dev/null || true sleep 1 qvm-remove --force "$vm" 2>/dev/null || true sleep 1 fi done qvm-pool remove "${POOL_NAME}" 2>/dev/null || true sleep 1 vgchange -an ephemeral_vg 2>/dev/null || true vgremove -f ephemeral_vg 2>/dev/null || true cryptsetup close "${LUKS_NAME}" 2>/dev/null || true rm -f "${KEY_FILE}" "${IMG_FILE}" mkdir -p "${MOUNT_BASE}" install -m600 /dev/null "${KEY_FILE}" && dd if=/dev/urandom bs=1 count=4096 of="${KEY_FILE}" iflag=fullblock truncate -s "${POOL_SIZE}" "${IMG_FILE}" LOOP_DEV=$(losetup -f --show "${IMG_FILE}") cryptsetup luksFormat -q --key-file "${KEY_FILE}" "${LOOP_DEV}" cryptsetup open --key-file "${KEY_FILE}" "${LOOP_DEV}" "${LUKS_NAME}" pvcreate "/dev/mapper/${LUKS_NAME}" vgcreate "ephemeral_vg" "/dev/mapper/${LUKS_NAME}" lvcreate -T -n "thin_pool" -l +100%FREE "ephemeral_vg" losetup -d "${LOOP_DEV}" || true if qvm-pool list 2>/dev/null | grep -q "^${POOL_NAME}"; then qvm-pool remove "${POOL_NAME}" 2>/dev/null || true sleep 1 fi qvm-pool add "${POOL_NAME}" lvm_thin --option volume_group=ephemeral_vg --option thin_pool=thin_pool 2>/dev/null || \ qvm-pool add "${POOL_NAME}" lvm_thin -o volume_group=ephemeral_vg,thin_pool=thin_pool echo "[*] Copying DVM templates..." qvm-ls --raw-list 2>/dev/null | grep -i 'dvm' | grep -v '\-ephemeral$' | while read vm; do [ -n "$vm" ] || continue clone_name="${vm}-ephemeral" qvm-check -q "$clone_name" 2>/dev/null && { qvm-kill "$clone_name" 2>/dev/null || true qvm-remove --force "$clone_name" 2>/dev/null || true } echo " -> $vm -> ${clone_name}" qvm-clone -P "${POOL_NAME}" "$vm" "$clone_name" && { qvm-prefs "$clone_name" template_for_dispvms True 2>/dev/null || true qvm-prefs "$clone_name" autostart False 2>/dev/null || true } done echo "[+] Done!" EOF sudo tee /usr/local/bin/ephemeral-pool-destroy.sh << 'EOF' #!/bin/bash set -uo pipefail POOL_NAME="ephemeral_pool" LUKS_NAME="ephemeral_crypt" KEY_FILE="/dev/shm/ephemeral.key" IMG_FILE="/var/tmp/ephemeral/pool.img" for vm in $(qvm-ls --raw-list 2>/dev/null); do if qvm-volume list "$vm" 2>/dev/null | grep -q "${POOL_NAME}"; then qvm-kill "$vm" 2>/dev/null || true sleep 1 qvm-remove --force "$vm" 2>/dev/null || true sleep 1 fi done qvm-pool remove "${POOL_NAME}" 2>/dev/null || true sleep 1 qvm-pool remove "${POOL_NAME}" 2>/dev/null || true vgchange -an ephemeral_vg 2>/dev/null || true vgremove -f ephemeral_vg 2>/dev/null || true cryptsetup close "${LUKS_NAME}" 2>/dev/null || true for loop in $(losetup -j "${IMG_FILE}" 2>/dev/null | cut -d: -f1 || true); do [ -n "$loop" ] && losetup -d "$loop" 2>/dev/null || true done rm -f "${KEY_FILE}" "${IMG_FILE}" EOF sudo chmod +x /usr/local/bin/ephemeral-pool-create.sh sudo chmod +x /usr/local/bin/ephemeral-pool-destroy.sh sudo systemctl daemon-reload sudo systemctl enable --now ephemeral-pool.service To remove pool and disable the systemd service: sudo systemctl stop ephemeral-pool.service sudo systemctl disable ephemeral-pool.service Start the service and pool again: sudo systemctl enable --now ephemeral-pool.service :card_index_dividers: 2. RAM-based DVMs on a Zram disk (for devices with 20-24 GB of RAM) This script creates a compressed RAM disk (zram) that acts as a super-fast ephemeral storage pool for your DVMs. On every boot, it sets aside a portion of your RAM - compressed with lz4 algorithm to save space - builds an LVM thin pool on top of it, and clones all your DVM templates there as -ephemeral variants. When you shut down the system, everything in that RAM disk vanishes instantly without ever touching your physical disk. The key advantage of zram is built-in compression: your 3 GB pool can hold 6-7 GB of actual VM data, giving you more usable space than raw RAM would allow. It is also significantly faster than disk-based storage, so DVMs launch and run with near-native speed. Unlike tmpfs, zram does not compete with your system memory for cache. First, increase the maximum dom0 memory in this file sudo nano /etc/default/grub edit this value dom0_mem=max:4096M to dom0_mem=max:6144M, update GRUB sudo grub2-mkconfig -o /boot/grub2/grub.cfg and reboot Qubes OS. Run this simple script in dom0 terminal: #!/bin/bash sudo tee /etc/systemd/system/zram-pool.service << 'EOF' [Unit] Description=ZRAM Ephemeral Pool After=qubesd.service[email protected] [Service] Type=oneshot ExecStart=/usr/local/bin/zram-pool-create.sh RemainAfterExit=yes [Install] WantedBy=multi-user.target EOF sudo tee /usr/local/bin/zram-pool-create.sh << 'EOF' #!/bin/bash set -euo pipefail POOL_NAME="zram_pool" ZRAM_SIZE="4G" VG_NAME="zram_vg" EXTRA_VMS=( #"whonix" #"sys-whonix" ) ROOT_DEV=$(findmnt -n -o SOURCE / 2>/dev/null || echo "") if echo "$ROOT_DEV" | grep -qE "(overlay|/dev/zram0)"; then echo "[*] Detected amnesiac mode: $ROOT_DEV" echo " Cleaning up old VMs..." for vm in $(qvm-ls --raw-list --running 2>/dev/null); do if qvm-volume list "$vm" 2>/dev/null | grep -q "${POOL_NAME}"; then echo " -> Stopping: $vm" qvm-shutdown --wait --timeout 10 "$vm" 2>/dev/null || \ qvm-kill "$vm" 2>/dev/null || true fi done for vm in $(qvm-ls --raw-list 2>/dev/null); do if qvm-volume list "$vm" 2>/dev/null | grep -q "${POOL_NAME}"; then echo " -> Removing: $vm" qvm-remove --force "$vm" 2>/dev/null || true fi done qvm-pool remove "${POOL_NAME}" 2>/dev/null || true vgchange -an "${VG_NAME}" 2>/dev/null || true vgremove -f "${VG_NAME}" 2>/dev/null || true for dev in /dev/zram*; do [ -b "$dev" ] || continue zramctl --reset "$dev" 2>/dev/null || true done echo "[+] Cleanup completed." exit 0 fi if [ "$EUID" -ne 0 ]; then echo "[!] Root privileges required" exit 1 fi echo "[*] Creating zram device (${ZRAM_SIZE})..." modprobe zram 2>/dev/null || true ZRAM_DEV="" for dev in /dev/zram*; do [ -b "$dev" ] || continue if ! zramctl "$dev" 2>/dev/null | grep -q "mounted\|active"; then ZRAM_DEV="$dev" break fi done if [ -z "$ZRAM_DEV" ]; then ZRAM_DEV=$(zramctl --find --size "$ZRAM_SIZE" --algorithm lz4) else zramctl --reset "$ZRAM_DEV" 2>/dev/null || true ZRAM_DEV=$(zramctl --find --size "$ZRAM_SIZE" --algorithm lz4) fi echo " Device: $ZRAM_DEV" echo "[*] Removing VMs from pool ${POOL_NAME}..." for vm in $(qvm-ls --raw-list --running 2>/dev/null); do if qvm-volume list "$vm" 2>/dev/null | grep -q "${POOL_NAME}"; then echo " -> Stopping: $vm" qvm-shutdown --wait --timeout 30 "$vm" 2>/dev/null || { echo " -> Force killing: $vm" qvm-kill "$vm" 2>/dev/null || true } fi done for vm in $(qvm-ls --raw-list 2>/dev/null); do if qvm-volume list "$vm" 2>/dev/null | grep -q "${POOL_NAME}"; then echo " -> Removing: $vm" qvm-remove --force "$vm" 2>/dev/null || true fi done echo "[*] Cleaning up old infrastructure..." qvm-pool remove "${POOL_NAME}" 2>/dev/null || true vgchange -an "${VG_NAME}" 2>/dev/null || true vgremove -f "${VG_NAME}" 2>/dev/null || true # Detach old loops on zram for loopdev in $(losetup -a 2>/dev/null | grep "$ZRAM_DEV" | cut -d: -f1); do echo " -> Detaching loop: $loopdev" losetup -d "$loopdev" 2>/dev/null || true done echo "[*] Creating loop on ${ZRAM_DEV}..." LOOP_DEV=$(losetup -f --show "$ZRAM_DEV") echo " Loop: $LOOP_DEV" echo "[*] Creating LVM on ${LOOP_DEV}..." pvcreate -q "$LOOP_DEV" vgcreate -q "${VG_NAME}" "$LOOP_DEV" lvcreate -q -T -n "thin_pool" -l +100%FREE "${VG_NAME}" echo "[*] Registering pool ${POOL_NAME}..." if qvm-pool list 2>/dev/null | grep -q "^${POOL_NAME}"; then qvm-pool remove "${POOL_NAME}" 2>/dev/null || true sleep 1 fi qvm-pool add "${POOL_NAME}" lvm_thin --option volume_group="${VG_NAME}" --option thin_pool=thin_pool 2>/dev/null || \ qvm-pool add "${POOL_NAME}" lvm_thin -o volume_group="${VG_NAME}",thin_pool=thin_pool echo " Pool created:" qvm-pool info "${POOL_NAME}" echo "[*] Cloning VMs into ephemeral pool..." echo " [DVM templates]" qvm-ls --raw-list 2>/dev/null | while read -r vm; do [ -n "$vm" ] || continue is_dvm=$(qvm-prefs "$vm" template_for_dispvms 2>/dev/null || echo "False") [ "$is_dvm" = "True" ] || continue if qvm-volume list "$vm" 2>/dev/null | grep -q "${POOL_NAME}"; then continue fi clone_name="${vm}-ephemeral" if qvm-ls --raw-list 2>/dev/null | grep -q "^${clone_name}$"; then echo " -> Removing old copy: ${clone_name}" qvm-kill "$clone_name" 2>/dev/null || true qvm-remove --force "$clone_name" 2>/dev/null || true fi echo " -> Cloning: $vm -> ${clone_name}" if qvm-clone -P "${POOL_NAME}" "$vm" "$clone_name"; then qvm-prefs "$clone_name" template_for_dispvms True 2>/dev/null || true qvm-prefs "$clone_name" autostart False 2>/dev/null || true echo " [+] OK" else echo " [!] ERROR" fi done if [ ${#EXTRA_VMS[@]} -gt 0 ]; then echo " [Extra VMs]" for vm in "${EXTRA_VMS[@]}"; do if ! qvm-ls --raw-list 2>/dev/null | grep -q "^${vm}$"; then echo " [!] VM not found: $vm" continue fi if qvm-volume list "$vm" 2>/dev/null | grep -q "${POOL_NAME}"; then echo " -> Skipping (already in zram): $vm" continue fi clone_name="${vm}-ephemeral" if qvm-ls --raw-list 2>/dev/null | grep -q "^${clone_name}$"; then echo " -> Removing old copy: ${clone_name}" qvm-kill "$clone_name" 2>/dev/null || true qvm-remove --force "$clone_name" 2>/dev/null || true fi echo " -> Cloning: $vm -> ${clone_name}" if qvm-clone -P "${POOL_NAME}" "$vm" "$clone_name"; then qvm-prefs "$clone_name" template_for_dispvms False 2>/dev/null || true qvm-prefs "$clone_name" autostart False 2>/dev/null || true echo " [+] OK" else echo " [!] ERROR" fi done fi EOF sudo chmod +x /usr/local/bin/zram-pool-create.sh sudo systemctl daemon-reload sudo systemctl enable --now zram-pool.service To remove zram pool and disable the systemd service run this script: #!/bin/bash # Step 1: Stop and disable the systemd service sudo systemctl stop zram-pool.service sudo systemctl disable zram-pool.service # Step 2: Remove all VMs from zram_pool echo "[*] Removing VMs from zram_pool..." for vm in $(qvm-ls --raw-list 2>/dev/null); do if qvm-volume list "$vm" 2>/dev/null | grep -q "zram_pool"; then echo " -> Removing: $vm" qvm-kill "$vm" 2>/dev/null || true sleep 1 qvm-remove --force "$vm" 2>/dev/null || true sleep 1 fi done # Step 3: Remove the Qubes storage pool echo "[*] Removing zram_pool..." qvm-pool remove zram_pool 2>/dev/null || true # Step 4: Deactivate and remove LVM volume group echo "[*] Cleaning up LVM..." vgchange -an zram_vg 2>/dev/null || true vgremove -f zram_vg 2>/dev/null || true # Step 5: Detach loop device from zram echo "[*] Detaching loop devices..." for loopdev in $(losetup -a 2>/dev/null | grep "/dev/zram" | cut -d: -f1); do echo " -> Detaching: $loopdev" losetup -d "$loopdev" 2>/dev/null || true done # Step 6: Reset zram device echo "[*] Resetting zram device..." for dev in /dev/zram*; do [ -b "$dev" ] || continue zramctl --reset "$dev" 2>/dev/null || true done echo "[+] zram pool completely removed. Reboot to clear all traces from memory." Start the service and pool again: sudo systemctl enable --now zram-pool.service :tornado: 3. RAM-based DVMs on TMPFS (for devices with 32 GB of RAM) This variant creates a pure RAM-based ephemeral pool using tmpfs. On every boot, it allocates a portion of your system memory as a temporary filesystem, builds an LVM thin pool inside it, and clones all your DVM templates there as ephemeral variants. When you shut down or reboot, the entire pool and all its VMs vanish instantly. Direct RAM access means DVMs launch faster than any other storage type. No encryption overhead, no zram compression delays or disk I/O bottlenecks - just RAM and LVM. The entire pool size is reserved from RAM immediately, making this best suited for systems with 32 GB or more. First, increase the maximum dom0 memory in this file sudo nano /etc/default/grub edit this value dom0_mem=max:4096M to dom0_mem=max:8192M, update GRUB sudo grub2-mkconfig -o /boot/grub2/grub.cfg and reboot Qubes OS. Run this simple script in dom0 terminal: #!/bin/bash sudo tee /etc/systemd/system/tmpfs-pool.service << 'EOF' [Unit] Description=TMPFS Ephemeral Pool After=qubesd.service[email protected] [Service] Type=oneshot ExecStart=/usr/local/bin/tmpfs-pool-create.sh RemainAfterExit=yes [Install] WantedBy=multi-user.target EOF sudo tee /usr/local/bin/tmpfs-pool-create.sh << 'EOF' #!/bin/bash set -uo pipefail POOL_NAME="tmpfs_pool" MOUNT_BASE="/dev/shm/ephemeral" IMG_FILE="${MOUNT_BASE}/pool.img" POOL_SIZE="4G" VG_NAME="ephemeral_vg" ROOT_DEV=$(findmnt -n -o SOURCE / 2>/dev/null || echo "") if echo "$ROOT_DEV" | grep -qE "(overlay|/dev/zram)"; then echo "[*] Detected amnesiac mode: $ROOT_DEV" echo " Destroying old ephemeral VMs and artifacts..." for vm in $(qvm-ls --raw-list --running 2>/dev/null); do if qvm-volume list "$vm" 2>/dev/null | grep -q "${POOL_NAME}"; then echo " -> Stopping: $vm" qvm-shutdown --wait --timeout 10 "$vm" 2>/dev/null || \ qvm-kill "$vm" 2>/dev/null || true fi done for vm in $(qvm-ls --raw-list 2>/dev/null); do if qvm-volume list "$vm" 2>/dev/null | grep -q "${POOL_NAME}"; then echo " -> Removing: $vm" qvm-remove --force "$vm" 2>/dev/null || true fi done qvm-pool remove "${POOL_NAME}" 2>/dev/null || true vgchange -an "${VG_NAME}" 2>/dev/null || true vgremove -f "${VG_NAME}" 2>/dev/null || true rm -rf "${MOUNT_BASE}" echo "[+] Cleanup completed. Pool creation skipped in amnesiac mode." exit 0 fi echo "[*] Phase 1: Removing ALL VMs from ephemeral pool..." for vm in $(qvm-ls --raw-list 2>/dev/null); do if qvm-volume list "$vm" 2>/dev/null | grep -q "${POOL_NAME}"; then echo " -> Removing VM: $vm" qvm-kill "$vm" 2>/dev/null || true sleep 1 qvm-remove --force "$vm" 2>/dev/null || true sleep 1 fi done # Pool in RAM — simply delete files echo "[*] Phase 2: Cleaning old pool from RAM..." qvm-pool remove "${POOL_NAME}" 2>/dev/null || true vgchange -an "${VG_NAME}" 2>/dev/null || true vgremove -f "${VG_NAME}" 2>/dev/null || true # Remove old files (if any remain) rm -rf "${MOUNT_BASE}" echo "[*] Phase 3: Creating fresh ephemeral pool in RAM..." mkdir -p "${MOUNT_BASE}" # New image in RAM truncate -s "${POOL_SIZE}" "${IMG_FILE}" # Loop device LOOP_DEV=$(losetup -f --show "${IMG_FILE}") # LVM thin pool directly on loop (no encryption) pvcreate "$LOOP_DEV" vgcreate "${VG_NAME}" "$LOOP_DEV" lvcreate -T -n "thin_pool" -l +100%FREE "${VG_NAME}" # Detach loop losetup -d "${LOOP_DEV}" || true echo "[*] Phase 4: Registering pool..." if qvm-pool list 2>/dev/null | grep -q "^${POOL_NAME}"; then qvm-pool remove "${POOL_NAME}" 2>/dev/null || true sleep 1 fi qvm-pool add "${POOL_NAME}" lvm_thin --option volume_group="${VG_NAME}" --option thin_pool=thin_pool 2>/dev/null || \ qvm-pool add "${POOL_NAME}" lvm_thin -o volume_group="${VG_NAME}",thin_pool=thin_pool if ! qvm-pool list 2>/dev/null | grep -q "^${POOL_NAME}"; then echo "[!] Pool registration failed" exit 1 fi echo "[+] Pool ready in RAM" echo "[*] Phase 5: Copying DVM templates..." echo " [DVM templates]" qvm-ls --raw-list 2>/dev/null | while read -r vm; do [ -n "$vm" ] || continue is_dvm=$(qvm-prefs "$vm" template_for_dispvms 2>/dev/null || echo "False") [ "$is_dvm" = "True" ] || continue if qvm-volume list "$vm" 2>/dev/null | grep -q "${POOL_NAME}"; then continue fi clone_name="${vm}-ephemeral" if qvm-ls --raw-list 2>/dev/null | grep -q "^${clone_name}$"; then echo " -> Removing old copy: ${clone_name}" qvm-kill "$clone_name" 2>/dev/null || true qvm-remove --force "$clone_name" 2>/dev/null || true fi echo " -> Cloning: $vm -> ${clone_name}" if qvm-clone -P "${POOL_NAME}" "$vm" "$clone_name"; then qvm-prefs "$clone_name" template_for_dispvms True 2>/dev/null || true qvm-prefs "$clone_name" autostart False 2>/dev/null || true echo " [+] OK" else echo " [!] ERROR" fi done echo "[+] Done!" echo "" echo "VMs in ephemeral pool:" for vm in $(qvm-ls --raw-list 2>/dev/null); do if qvm-volume list "$vm" 2>/dev/null | grep -q "${POOL_NAME}"; then echo " - $vm" fi done EOF sudo chmod +x /usr/local/bin/tmpfs-pool-create.sh sudo systemctl daemon-reload sudo systemctl enable --now tmpfs-pool.service To remove zram pool and disable the systemd service run this script: #!/bin/bash # Step 1: Stop the service (prevents auto-restart on boot) sudo systemctl stop tmpfs-pool.service sudo systemctl disable tmpfs-pool.service # Step 2: Remove all VMs from tmpfs_pool echo "[*] Removing VMs from tmpfs_pool..." for vm in $(qvm-ls --raw-list 2>/dev/null); do if qvm-volume list "$vm" 2>/dev/null | grep -q "tmpfs_pool"; then echo " -> Removing: $vm" qvm-kill "$vm" 2>/dev/null || true sleep 1 qvm-remove --force "$vm" 2>/dev/null || true sleep 1 fi done # Step 3: Remove the Qubes storage pool echo "[*] Removing tmpfs_pool..." qvm-pool remove tmpfs_pool 2>/dev/null || true # Step 4: Clean up LVM echo "[*] Cleaning up LVM..." vgchange -an ephemeral_vg 2>/dev/null || true vgremove -f ephemeral_vg 2>/dev/null || true # Step 5: Free RAM by removing the image echo "[*] Freeing RAM..." rm -rf /dev/shm/ephemeral echo "[+] tmpfs pool stopped and cleaned up." Start the service and pool again: sudo systemctl enable --now tmpfs-pool.service :gear: 4. Modifying default DVMs This solution is for those who want to configure the default DVMs for amnesic operation - without creating new pools or new DVMs. Сreate a systemd service that remounts the root in the DVM as an ephemeral encrypted volatile volume: #!/bin/bash sudo tee /etc/systemd/system/dvm-root.service << 'EOF' [Unit] Description=DVM root rw False After=qubesd.service Requires=qubesd.service [Service] Type=oneshot RemainAfterExit=yes ExecStart=/usr/local/bin/dvm-root.sh [Install] WantedBy=multi-user.target EOF sudo tee /usr/local/bin/dvm-root.sh << 'EOF' #!/bin/bash set -euo pipefail while read -r vm; do [ -n "$vm" ] || continue is_dvm=$(qvm-prefs "$vm" template_for_dispvms 2>/dev/null || echo "False") [ "$is_dvm" = "True" ] || continue qvm-volume config "${vm}:root" rw false done < <(qvm-ls --raw-list) EOF sudo chmod +x /usr/local/bin/dvm-root.sh sudo systemctl daemon-reload sudo systemctl enable dvm-root.service qvm-pool set vm-pool -o ephemeral_volatile=True TMPFS Script for Debian/Fedora/Kicksecure-based DVM templates: OVERLAY_BASE="/run/home-overlay" LOWERDIR="/home" UPPERDIR="$OVERLAY_BASE/upper" WORKDIR="$OVERLAY_BASE/work" MOUNTPOINT="/home" # Create directories mkdir -p "$UPPERDIR" "$WORKDIR" # Mount tmpfs for overlay upper+work layers mount -t tmpfs -o size=2G,mode=0755 tmpfs "$OVERLAY_BASE" # Recreate upper/work inside tmpfs after mount mkdir -p "$UPPERDIR" "$WORKDIR" # Mount overlayfs mount -t overlay overlay \ -o lowerdir="$LOWERDIR",upperdir="$UPPERDIR",workdir="$WORKDIR" \ "$MOUNTPOINT" Or alternative Script: Zram-disk for Debian/Fedora/Kicksecure-based DVM templates (If you want an overlay with memory compression - saves RAM, but adds slight CPU overhead): ZRAM_DEV="" ZRAM_SIZE="2G" LOWERDIR="/home" OVERLAY_BASE="/run/home-overlay" UPPERDIR="$OVERLAY_BASE/upper" WORKDIR="$OVERLAY_BASE/work" MOUNTPOINT="/home" # --- 1. Create and configure zram device --- # Load zram module if not loaded if ! lsmod | grep -q "^zram"; then modprobe zram num_devices=1 || modprobe zram fi # Wait for zram control interface for _ in {1..10}; do if [ -d /sys/class/zram-control ]; then break fi sleep 0.1 done # Find first free zram device for i in /sys/block/zram*; do [ -e "$i" ] || continue if [ "$(cat "$i"/disksize)" = "0" ]; then ZRAM_DEV="/dev/$(basename "$i")" break fi done if [ -z "$ZRAM_DEV" ]; then # No free device; try to add one via hot_add if [ -f /sys/class/zram-control/hot_add ]; then idx=$(cat /sys/class/zram-control/hot_add) ZRAM_DEV="/dev/zram$idx" else echo "ERROR: no free zram device found and hot_add not available" >&2 exit 1 fi fi echo "Using $ZRAM_DEV" # Configure compression and size echo lz4 > /sys/block/$(basename "$ZRAM_DEV")/comp_algorithm 2>/dev/null || true echo "$ZRAM_SIZE" > /sys/block/$(basename "$ZRAM_DEV")/disksize # Format and mount zram as ext4 (needed for overlay upper+work) mkfs.ext4 -q "$ZRAM_DEV" mkdir -p "$OVERLAY_BASE" mount -t ext4 "$ZRAM_DEV" "$OVERLAY_BASE" # --- 2. Prepare overlay directories --- mkdir -p "$UPPERDIR" "$WORKDIR" # --- 3. Mount overlayfs --- mount -t overlay overlay \ -o lowerdir="$LOWERDIR",upperdir="$UPPERDIR",workdir="$WORKDIR" \ "$MOUNTPOINT" For additional anti-forensic protection, you can use this script and redirect all system journal logs to memory (volatile storage). Additionally, this script deletes files containing metadata about removed VMs (this is simple file deletion, which has anti-forensic value only in the context of TRIM/discard on NVMe SSD, but is not direct anti-forensics). The basis of this script (files removing) is the second script from this guide: #!/bin/bash sudo tee /etc/systemd/journald.conf << EOF [Journal] Storage=volatile EOF sudo systemctl restart systemd-journald sudo tee /etc/systemd/system/clean.service << 'EOF' [Unit] Description=Clean logs of removed Qubes VMs After=qubesd.service [Service] Type=oneshot ExecStart=/usr/local/bin/clean.sh RemainAfterExit=no [Install] WantedBy=multi-user.target EOF sudo tee /usr/local/bin/clean.sh << 'EOF' #!/bin/bash set -euo pipefail readonly LOGDIR='/var/log' readonly TEMPDIR_ROOT='/home/user/tmp' readonly MENUDIR='/home/user/.config/menus/applications-merged' existing_qubes=$(qvm-ls --fields=name --raw-data | sort) all_qube_names='' all_qube_names+=$(find "${LOGDIR}/libvirt/libxl/" \ -type f \ -regextype posix-egrep \ -regex '.*\.log((\.old)|(-[0-9]{8}))?(\.gz)?$' \ -exec basename "{}" \; \ | sed -r 's/\.log((\.old)|(-[0-9]{8}))?(\.gz)?$//g' \ | sed -r 's/^(guid|qrexec|qubesdb)\.//g' \ | sort | uniq)$'\n' all_qube_names+=$(find "${LOGDIR}/qubes/" \ -type f \ -regextype posix-egrep \ -regex '.*\.log((\.old)|(-[0-9]{8}))?(\.gz)?$' \ -exec basename "{}" \; \ | sed -r 's/\.log((\.old)|(-[0-9]{8}))?(\.gz)?$//g' \ | sed -r 's/^(guid|qrexec|qubesdb)\.//g' \ | sort | uniq)$'\n' all_qube_names+=$(find "${LOGDIR}/xen/console/" \ -type f \ -regextype posix-egrep \ -regex '.*\/guest-.*\.log((\.old)|(-[0-9]{8}))?(\.gz)?$' \ -exec basename "{}" \; \ | sed -r 's/\.log((\.old)|(-[0-9]{8}))?(\.gz)?$//g' \ | sed -r 's/^guest-//g' \ | sort | uniq)$'\n' set +e ram_pools=$(qvm-pool list | grep -Eio '^ram_pool_[^ ]+' | sort | uniq) set -e all_qube_names+=$(echo "${ram_pools}" | sed -r 's/^ram_pool_//g')$'\n' if [ -d "${TEMPDIR_ROOT}" ]; then all_qube_names+=$(find "${TEMPDIR_ROOT}" \ -mindepth 1 -maxdepth 1 -type d \ -exec basename "{}" \; \ | sort | uniq)$'\n' fi all_qube_names+=$(find "${MENUDIR}" \ -regextype posix-egrep \ -regex '.*\/user-qubes-.*\.menu$' \ -exec basename "{}" \; \ | sed -r 's/\.menu$//g' \ | sed -r 's/^user-qubes-(disp)?vm-directory(_|-)//g' \ | sort | uniq)$'\n' all_qube_names=$(echo "${all_qube_names}" \ | sed -r 's/^(Domain-0|libxl-driver)$//g' \ | sed -r '/^\s*$/d' \ | sort | uniq) set +e qubes_to_remove=$(diff --new-line-format='' --unchanged-line-format='' \ <(echo "${all_qube_names}") <(echo "${existing_qubes}") \ | sed -r '/^\s*$/d') set -e for qube_name in ${qubes_to_remove}; do decoded_qube_name=$(echo "${qube_name}" \ | sed -r 's/_d/-/g' \ | sed -r 's/_u/_/g') log_pattern="${qube_name}\.log((\.old)|(-[0-9]{8}))?(\.gz)?" menu_pattern="user-qubes-(disp)?vm-directory(_|-)${qube_name}\.menu" declare -A targets targets=(["${LOGDIR}/libvirt/libxl"]="${log_pattern}" ["${LOGDIR}/qubes"]="((guid|qrexec|qubesdb)\.)?${log_pattern}" ["${LOGDIR}/xen/console"]="guest-${log_pattern}" ["${MENUDIR}"]="${menu_pattern}") if [ -d "${TEMPDIR_ROOT}" ]; then targets+=("${TEMPDIR_ROOT}"="${qube_name}") fi for search_dir in "${!targets[@]}"; do mapfile -d $'\0' found_files < <(find "${search_dir}" \ -regextype posix-egrep \ -regex ".*\/${targets[${search_dir}]}$" \ -print0) for file in "${found_files[@]}"; do [ -z "${file}" ] && continue rm -rf "${file}" done done done for pool_name in ${ram_pools}; do qube_name=$(echo "${pool_name}" | sed -r 's/^ram_pool_//') if ! echo "${existing_qubes}" | grep -qx "${qube_name}"; then pool_mountpoint=$(qvm-pool info "${pool_name}" \ | grep -E '^dir_path' \ | sed -r 's/^dir_path\s+//g') qvm-pool remove "${pool_name}" 2>/dev/null || true umount "${pool_mountpoint}" 2>/dev/null || true rm -rf "${pool_mountpoint}" 2>/dev/null || true fi done find "${LOGDIR}/qubes/" -maxdepth 1 -type f -name '*.log.old' -delete EOF sudo chmod +x /usr/local/bin/clean.sh sudo systemctl daemon-reload sudo systemctl enable clean.service npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy Encrypted AppVMs and Templates. Encrypted pool. Secret vault in a LUKS-Pool. :gear: Install: Make sure there is sufficient free space (more than 3 GB) in dom0. You can resize dom0 these commands: sudo lvresize --size 3G /dev/mapper/qubes_dom0-root sudo resize2fs /dev/mapper/qubes_dom0-root sudo lvresize -L +3G qubes_dom0/root-pool I recommend disabling disk swap for maximum security: Qubes OS uses zram for compressed RAM swap, but also maintains a fallback swap partition at /dev/dm-5 which is not encrypted. For a vault pool setup, this is a security risk - sensitive memory pages from your secret VMs could be written to disk in plaintext. sudo sed -i '/\/dev\/mapper\/swap/!{/^[[:space:]]*#/!{/\<swap\>/s/^/# /}}' /etc/fstab sudo sed -i '/\/dev\/mapper\/swap/b; /[[:space:]]\+swap[[:space:]]\+/s/^/# /' /etc/fstab sudo dracut --force Run this simple script for create 3 GB encrypted pool vault (edit POOL_SIZE="3G" if you need a different pool size) #!/bin/bash set -euo pipefail POOL_DIR="/var/lib/qubes/pools" POOL_IMG="$POOL_DIR/vault.img" POOL_SIZE="3G" VG_NAME="vault_vg" LV_NAME="vault_thin" MAPPER_NAME="vault_crypt" cleanup() { local dev="${LOOP_DEV:-}" if [ -n "$dev" ] && losetup -a | grep -q "$dev"; then echo "[*] Cleanup: detaching $dev" losetup -d "$dev" 2>/dev/null || true fi } trap cleanup EXIT echo "========================================" echo " Creating an encrypted Qubes pool" echo "========================================" echo if [ "$EUID" -ne 0 ]; then echo "[!] This script must be run as root (dom0)" exit 1 fi if [ -f "$POOL_IMG" ]; then echo "[!] File $POOL_IMG already exists." read -r -p " Delete and recreate? Type YES to confirm: " confirm if [ "$confirm" != "YES" ]; then echo "[!] Aborted by user" exit 1 fi rm -f "$POOL_IMG" fi echo "[*] Creating directory $POOL_DIR" mkdir -p "$POOL_DIR" echo "[*] Creating a loop file of size $POOL_SIZE" truncate -s "$POOL_SIZE" "$POOL_IMG" echo "[*] Attaching loop device" LOOP_DEV=$(losetup -f --show "$POOL_IMG") echo " Device: $LOOP_DEV" echo echo "[*] Encrypting device $LOOP_DEV" echo " Enter the LUKS passphrase (twice)" cryptsetup luksFormat "$LOOP_DEV" echo echo "[*] Opening the LUKS container" cryptsetup open "$LOOP_DEV" "$MAPPER_NAME" echo echo "[*] Creating LVM: PV -> VG -> Thin Pool" pvcreate "/dev/mapper/$MAPPER_NAME" vgcreate "$VG_NAME" "/dev/mapper/$MAPPER_NAME" lvcreate -T -n "$LV_NAME" -l +100%FREE "$VG_NAME" echo echo "[*] Detaching the loop device (LVM stays active)" losetup -d "$LOOP_DEV" unset LOOP_DEV qvm-pool --add vault lvm_thin \ -o volume_group=vault_vg,thin_pool=vault_thin,revisions_to_keep=2 echo echo "========================================" echo " Pool created successfully!" echo "========================================" cat > /usr/local/bin/vault-open << 'EOF' #!/bin/bash # open-and-register-vault.sh set -euo pipefail if [ "$EUID" -ne 0 ]; then echo "[!] Must be run as root" exit 1 fi # 1. Attach loop LOOP_DEV=$(losetup -f --show /var/lib/qubes/pools/vault.img) echo "[*] Loop: $LOOP_DEV" # 2. Unlock LUKS cryptsetup open "$LOOP_DEV" vault_crypt echo "[*] LUKS opened" # 3. Activate LVM vgchange -ay vault_vg echo "[*] LVM activated" # 4. Register pool in Qubes if not already present if ! qvm-pool --list | grep -q "^vault "; then echo "[*] Registering pool in Qubes" qvm-pool --add vault lvm_thin \ -o volume_group=vault_vg,thin_pool=vault_thin,revisions_to_keep=2 else echo "[*] Pool already registered" fi echo "[*] Done. Verification:" qvm-pool --info vault EOF cat > /usr/local/bin/vault-close << 'EOF' #!/bin/bash # close-vault.sh set -euo pipefail if [ "$EUID" -ne 0 ]; then echo "[!] Must be run as root" exit 1 fi # 1. Stop all running VMs from the vault pool RUNNING_VMS=$(qvm-ls --running --fields=name,pool | grep vault | awk '{print $1}' || true) if [ -n "$RUNNING_VMS" ]; then echo "[*] Stopping VMs from the vault pool..." for vm in $RUNNING_VMS; do echo " -> $vm" qvm-shutdown --wait "$vm" done echo "[*] All vault pool VMs stopped" fi # 2. Deactivate LVM vgchange -an vault_vg || true # 3. Close LUKS (wipes key from kernel memory) cryptsetup close vault_crypt || true # 4. Detach loop LOOP_DEV=$(losetup -j /var/lib/qubes/pools/vault.img 2>/dev/null | head -1 | cut -d: -f1) if [ -n "$LOOP_DEV" ]; then losetup -d "$LOOP_DEV" fi echo "[*] Pool locked and key wiped from memory" EOF Confirm creation: When prompted, type YES to proceed (this overwrites any existing vault pool file). Set your LUKS passphrase: Enter and confirm a strong passphrase when prompted - this will be required every time you unlock the pool. Open the pool when needed in dom0: sudo vault-open and enter your LUKS passphrase. Assign VMs to the vault pool via Qubes Manager: click clone qube and in Advanced select vault in Storage pool. Or create a new qube, and select vault Storage pool in the Advanced Options. 1 1751×251 21.3 KB Now your secret VMs can run. Close the pool when finished: sudo vault-close this shuts down all vault VMs, deactivates LVM, wipes the encryption key from kernel memory, and locks the container. :eyes: :eyes: Opening large pools takes time. If you created a large pool and it contains significant data (tens of GB), opening it with vault-open may take 10-20 seconds - this is normal, as LVM needs to scan and activate the thin pool metadata. Backup the container along with your VMs. You can copy the encrypted container file together with backups of your AppVMs from this pool. The container is located at: /var/lib/qubes/pools/vault.img Since the container is fully encrypted, you can store it on external media or in cloud storage without additional encryption - the LUKS passphrase protects all data inside. If you need additional disk swap, you can create an ephemeral encrypted swap - there’s a simple guide in the description of this guide. :bomb: Removing Encrypted Pool To completely remove the vault pool and all associated data, use this script. This will permanently delete all VMs stored in the pool. (When prompted, type DELETE to proceed - this permanently destroys all vault VMs and their data) #!/bin/bash set -euo pipefail POOL_NAME="vault" POOL_DIR="/var/lib/qubes/pools" POOL_IMG="$POOL_DIR/vault.img" VG_NAME="vault_vg" LV_NAME="vault_thin" MAPPER_NAME="vault_crypt" echo "========================================" echo " Removing encrypted pool" echo "========================================" echo if [ "$EUID" -ne 0 ]; then echo "[!] This script must be run as root (dom0)" exit 1 fi echo "[!] WARNING: ALL data in the pool will be destroyed!" read -r -p " Type DELETE to confirm: " confirm if [ "$confirm" != "DELETE" ]; then echo "[!] Aborted by user" exit 1 fi for vm in $(qvm-ls --raw-list 2>/dev/null); do if qvm-volume list "$vm" 2>/dev/null | grep -q "${POOL_NAME}"; then echo " -> Removing VM: $vm" qvm-kill "$vm" 2>/dev/null || true sleep 1 qvm-remove --force "$vm" 2>/dev/null || true sleep 1 fi done if lvs "$VG_NAME/$LV_NAME" &>/dev/null; then echo "[*] Deactivating thin pool $VG_NAME/$LV_NAME" lvchange -an "$VG_NAME/$LV_NAME" || true fi if vgs "$VG_NAME" &>/dev/null; then echo "[*] Deactivating Volume Group $VG_NAME" vgchange -an "$VG_NAME" || true fi if dmsetup info "$MAPPER_NAME" &>/dev/null; then echo "[*] Closing LUKS container /dev/mapper/$MAPPER_NAME" cryptsetup close "$MAPPER_NAME" || true else echo "[*] LUKS container already closed" fi if vgs "$VG_NAME" &>/dev/null; then echo "[*] Removing Volume Group $VG_NAME" vgremove -y "$VG_NAME" || true else echo "[*] Volume Group $VG_NAME not found or already removed" fi if [ -f "$POOL_IMG" ]; then LOOP_DEV=$(losetup -j "$POOL_IMG" 2>/dev/null | head -1 | cut -d: -f1) if [ -n "$LOOP_DEV" ]; then echo "[*] Detaching loop device $LOOP_DEV" losetup -d "$LOOP_DEV" 2>/dev/null || true else echo "[*] Loop device already detached" fi fi if [ -f "$POOL_IMG" ]; then echo "[*] Deleting container file $POOL_IMG" rm -f "$POOL_IMG" fi if [ -d "$POOL_DIR" ] && [ -z "$(ls -A "$POOL_DIR" 2>/dev/null)" ]; then echo "[*] Removing empty directory $POOL_DIR" rmdir "$POOL_DIR" 2>/dev/null || true fi qvm-pool remove $POOL_NAME echo echo "========================================" echo " Pool removed" echo "========================================" npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy This guide adds a hidden “nuke” password to your LUKS-encrypted disk. If you ever type this special password instead of your real one during boot, the system instantly and permanently destroys all encryption keys on the disk, making the data completely unrecoverable. Here’s how it works: During boot, your system asks for a password to unlock the disk. This guide installs a small wrapper that sits between the boot process and the standard disk-unlocking tool. Every time you enter a password, the wrapper quietly checks it against the nuke password hash stored on the system. If it’s your normal password, the wrapper simply passes it along to the regular unlocking tool and your disk opens as usual. But if it detects the nuke password, it immediately wipes all encryption key slots on the disk and overwrites the LUKS header with random data, effectively destroying the disk beyond recovery. The whole thing integrates seamlessly with the existing boot process, so the password prompt looks identical whether you’re entering your real password or the nuke one - there’s no visible indication that anything unusual happened until it’s too late. :warning: Warning! Do not test this script on your working system! You can install and configure the nuke module, but do not enter the nuke password for testing during Qubes OS boot! If you want to test the script, install a Fedora ISO and nuke it (I destroyed Fedora 43 and 44 with nuke password). Install: Install openssl: sudo qubes-dom0-update openssl Create dir for nuke password: sudo mkdir -p /etc/cryptsetup-nuke-ng sudo chmod 700 /etc/cryptsetup-nuke-ng Enter this command and then enter nuke password (hidden input): read -rs NUKE_PASS echo Generate random salt (enter this command and again enter nuke password (hidden input)): read -rs NUKE_PASS; echo; SALT=$(tr -dc 'a-zA-Z0-9' </dev/urandom | head -c 8); printf '%s' "$NUKE_PASS" | openssl passwd -6 -salt "$SALT" -stdin | sudo tee /etc/cryptsetup-nuke-ng/password_hash >/dev/null; sudo chmod 600 /etc/cryptsetup-nuke-ng/password_hash; NUKE_PASS=$(dd if=/dev/urandom bs=64 count=1 2>/dev/null | base64); unset NUKE_PASS Check hash format: sudo cat /etc/cryptsetup-nuke-ng/password_hash (should be: $6$salt$very_long_hash_string...) Password verification (enter this command and again enter nuke password (hidden input)): read -rs TEST_PASS; echo; HASH=$(sudo cat /etc/cryptsetup-nuke-ng/password_hash); SALT=$(echo "$HASH" | sed 's/^\$6\$\([^$]*\)\$.*/\1/'); printf '%s' "$TEST_PASS" | openssl passwd -6 -salt "$SALT" -stdin | grep -q "^$(sudo cat /etc/cryptsetup-nuke-ng/password_hash)$" && echo "✓ MATCH" || echo "✗ NO MATCH"; unset TEST_PASS (should be: ✓ MATCH) Create dracut module: sudo mkdir -p /usr/lib/dracut/modules.d/99nuke-systemd sudo tee /usr/lib/dracut/modules.d/99nuke-systemd/module-setup.sh << 'EOF' #!/bin/bash check() { if [ ! -f /etc/cryptsetup-nuke-ng/password_hash ]; then derror "nuke password hash not found" return 1 fi return 0 } depends() { echo systemd crypt return 0 } install() { inst /etc/cryptsetup-nuke-ng/password_hash inst_multiple dd mktemp rm cat printf stty cryptsetup openssl systemd-ask-password # Find the real systemd-cryptsetup local real_binary="" for path in "$initdir/usr/bin/systemd-cryptsetup" "$initdir/usr/lib/systemd/systemd-cryptsetup"; do if [ -f "$path" ] && [ ! -L "$path" ]; then real_binary="$path" break fi done if [ -z "$real_binary" ]; then real_binary=$(find "$initdir" -name "systemd-cryptsetup" -type f ! -type l 2>/dev/null | head -n1) fi if [ -z "$real_binary" ]; then dfatal "Cannot find real systemd-cryptsetup binary in initramfs" return 1 fi dinfo "Found systemd-cryptsetup at: $real_binary" # Save the original mv "$real_binary" "${real_binary}.real" # Create the wrapper cat > "$real_binary" << 'WRAPPER' #!/bin/bash set -e NUKE_HASH_FILE="/etc/cryptsetup-nuke-ng/password_hash" SYSTEMD_CRYPTSETUP="${0}.real" # If no hash present — just run the original if [ ! -f "$NUKE_HASH_FILE" ]; then exec "$SYSTEMD_CRYPTSETUP" "$@" fi NUKE_HASH=$(cat "$NUKE_HASH_FILE") NUKE_SALT=$(echo "$NUKE_HASH" | sed 's/^\$6\$\([^$]*\)\$.*/\1/') # Only for attach without keyfile if [ "$1" = "attach" ]; then KEYFILE="$4" DEVICE="$3" NAME="$2" # If keyfile is specified and not "-"/"none", the password is not requested interactively if [ -n "$KEYFILE" ] && [ "$KEYFILE" != "-" ] && [ "$KEYFILE" != "none" ]; then exec "$SYSTEMD_CRYPTSETUP" "$@" fi # Request password via systemd-ask-password (Plymouth compatible!) PASSWORD=$(systemd-ask-password --no-tty "Please enter passphrase for disk $NAME:" 2>/dev/null || true) # If systemd-ask-password didn't work, fallback to TTY if [ -z "$PASSWORD" ] && [ -t 0 ]; then printf 'Please unlock disk %s: ' "$NAME" >&2 stty -echo 2>/dev/null || true IFS= read -r PASSWORD stty echo 2>/dev/null || true printf '\n' >&2 fi # Verify nuke password via openssl if [ -n "$PASSWORD" ]; then COMPUTED=$(printf '%s' "$PASSWORD" | openssl passwd -6 -salt "$NUKE_SALT" -stdin) if [ "$COMPUTED" = "$NUKE_HASH" ]; then printf '[NUKE] Nuke password detected! Destroying keys...\n' >&2 # Destroy all keyslots for slot in 0 1 2 3 4 5 6 7; do cryptsetup luksKillSlot "$DEVICE" "$slot" 2>/dev/null || true done # Overwrite the header for extra certainty if command -v dd >/dev/null 2>&1; then dd if=/dev/urandom of="$DEVICE" bs=1M count=4 2>/dev/null || true fi printf '[NUKE] Device %s nuked.\n' "$DEVICE" >&2 exit 1 fi fi # Pass the password via temporary file (keyfile) KEYFILE=$(mktemp -p /dev/shm 2>/dev/null || mktemp) chmod 600 "$KEYFILE" printf '%s' "$PASSWORD" > "$KEYFILE" PASSWORD="" # Call the original with keyfile instead of interactive prompt set +e "$SYSTEMD_CRYPTSETUP" "$1" "$2" "$3" "$KEYFILE" "$5" STATUS=$? set -e # Clean up keyfile dd if=/dev/urandom of="$KEYFILE" bs=512 count=1 2>/dev/null || true rm -f "$KEYFILE" exit $STATUS fi # For all other commands — run the original exec "$SYSTEMD_CRYPTSETUP" "$@" WRAPPER chmod +x "$real_binary" # Update symlink if needed if [ -L "$initdir/usr/lib/systemd/systemd-cryptsetup" ]; then rm -f "$initdir/usr/lib/systemd/systemd-cryptsetup" ln -s "../../bin/systemd-cryptsetup" "$initdir/usr/lib/systemd/systemd-cryptsetup" fi dinfo "Installed nuke wrapper for systemd-cryptsetup" } EOF sudo chmod +x /usr/lib/dracut/modules.d/99nuke-systemd/module-setup.sh Dracut update: sudo dracut --force --verbose You will see this logs: ... dracut[I]: *** Including module: nuke-systemd *** dracut[I]: Found systemd-cryptsetup at: /var/tmp/dracut.o6togY/initramfs/usr/bin/systemd-cryptsetup dracut[I]: Installed nuke wrapper for systemd-cryptsetup ... :white_check_mark: Done! npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy Duress password is integrated at two authentication points: the lightdm display manager for system login, and the xscreensaver lock screen for session unlock. This ensures the duress action can be triggered both at initial boot authentication and when unlocking an existing session. See this guide for creating a duress nuke-password for a LUKS-encrypted disk: Hidden “nuke” duress-password to LUKS-encrypted disk. Qubes OS LUKS self-destruct module Make backups of all your VMs beforehand. Download this repository in dvm: git clone https://github.com/nuvious/pam-duress.git then add it to a ZIP archive, for example pam.zip Send it to dom0 and extract archive qvm-run --pass-io dispXXX 'cat /home/user/pam.zip' > pam.zip unzip pam.zip Run these commands to build the module in dom0 and create duress-password: sudo qubes-dom0-update gcc gcc-c++ make cmake automake pam-devel openssl-devel cd pam-duress make sudo make install PAM_DIR=/usr/lib64/security make clean mkdir -p ~/.duress sudo mkdir -p /etc/duress.d Create a scripts with two scenarios: 1. Scenario: Delete some VMs and delete this script itself: cat > ~/remove_vm.sh << 'EOF' #!/bin/bash if ! [ -w /run/qubesd.sock ] && [ -z "$DURESS_REEXEC" ]; then exec sg qubes "DURESS_REEXEC=1 $0 $*" fi export PATH="/usr/bin:/usr/sbin:/bin:/sbin:$PATH" # Add the names of VMs to be deleted here 'test_vm' /usr/bin/qvm-remove --force test_vm EOF chmod +x ~/remove_vm.sh ( :backhand_index_pointing_up: Add the names of VMs to be deleted here ‘test_vm’) 2. Scenario: Total system destruction: cat > ~/remove_qubes.sh << 'EOF' #!/bin/bash # WARNING: This script irreversibly destroys data. Use only for duress password. if ! [ -w /run/qubesd.sock ] && [ -z "$DURESS_REEXEC" ]; then exec sg qubes "DURESS_REEXEC=1 $0 $*" fi export PATH="/usr/bin:/usr/sbin:/bin:/sbin:$PATH" # ========== PHASE 0: REMOVE RAM-WIPE MODULE ========== RAM_WIPE_DIR="/usr/lib/dracut/modules.d/40ram-wipe" if [ -d "$RAM_WIPE_DIR" ]; then echo "[*] Removing ram-wipe dracut module to prevent shutdown stall..." rm -rf "$RAM_WIPE_DIR" fi # ========== PHASE 1: DESTROY LUKS HEADER ========== LUKS_DEV="" for dev in /dev/nvme0n1p3 /dev/sda2 /dev/vda2 /dev/mapper/luks-*; do cryptsetup isLuks "$dev" 2>/dev/null && LUKS_DEV="$dev" && break done if [ -n "$LUKS_DEV" ]; then echo "[*] Erasing LUKS header on $LUKS_DEV..." if cryptsetup luksErase --batch-mode "$LUKS_DEV" 2>/dev/null; then echo "[*] LUKS header destroyed. Triggering emergency reboot..." echo 1 > /proc/sys/kernel/sysrq echo b > /proc/sysrq-trigger xl debug-keys R 2>/dev/null || true exit 0 fi fi # ========== PHASE 2: FALLBACK - DESTROY ALL VMs + CORRUPT LVM ========== echo "[!] LUKS erase failed or not found. Executing fallback destruction..." echo "[*] Removing all qubes..." qvm-remove --all -f 2>/dev/null || true echo "[*] Corrupting LVM metadata..." vgremove -ff qubes_dom0 2>/dev/null || true for pv in /dev/nvme0n1p3 /dev/sda2 /dev/vda2; do [ -b "$pv" ] && dd if=/dev/urandom of="$pv" bs=1M count=4 conv=notrunc 2>/dev/null && break done # ========== PHASE 3: INSTANT REBOOT ========== echo "[*] Triggering emergency reboot..." echo 1 > /proc/sys/kernel/sysrq echo b > /proc/sysrq-trigger xl debug-keys R 2>/dev/null || true EOF chmod +x ~/remove_qubes.sh Then add scripts in duress module: cat > ~/.duress/remove_passwd.sh << 'EOF' #!/bin/sh /home/user/remove_vm.sh rm -rf /home/user/remove_vm.sh rm -rf /var/log/qubes EOF cat > ~/.duress/remove_passwd2.sh << 'EOF' #!/bin/sh /home/user/remove_qubes.sh EOF then chmod 500 ~/.duress/remove_passwd.sh chmod 500 ~/.duress/remove_passwd2.sh duress_sign ~/.duress/remove_passwd.sh add alternative password for destroying VMs duress_sign ~/.duress/remove_passwd2.sh add alternative password for destroying system and then: chmod 400 ~/.duress/remove_passwd.sh.sha256 chmod 400 ~/.duress/remove_passwd2.sh.sha256 Check: ls -la ~/.duress/ Module created. Now we need to modify this file /etc/pam.d/system-auth sudo nano /etc/system-auth Add this line auth sufficient pam_duress.so so that the first 6 auth-lines look like this: auth required pam_env.so auth required pam_faildelay.so delay=2000000 auth sufficient pam_fprintd.so auth sufficient pam_unix.so nullok auth sufficient pam_duress.so auth required pam_deny.so then click Ctrl + C and Ctrl + X Done. :fire: Now first duress password will remove some VMs. :radioactive: Second duress password will destroy and forcibly shutdown the system. It should protect against forensics (disk will become unreadable). npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy Топовые гайды по Qubes OS в комментах (шпаргалка, чтоб не потерять) npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy Если хотите иметь еще и VPN, например WG, то запустите его по классике и сделайте такой переключатель из тора в вг и обратно в /usr/local/bin (переключение будет через команды sudo toggle-net wg или sudo toggle-net tor): #!/bin/bash # Toggle between Tor transparent proxy and WireGuard VPN # Usage: sudo ./toggle-tor-wireguard.sh [tor|wg|status] set -e MODE="${1:-status}" NFT_CONF_TOR="/etc/nftables.conf" NFT_CONF_WG="/etc/nftables.wg.conf" WIREGUARD_CONF="/etc/wireguard/wg0.conf" show_status() { echo "=== Current Status ===" echo "" echo "--- nftables rules ---" sudo nft list ruleset 2>/dev/null || echo "No nftables rules loaded" echo "" echo "--- Tor service ---" systemctl is-active tor 2>/dev/null || echo "Tor: inactive" echo "" echo "--- WireGuard ---" wg show 2>/dev/null || echo "WireGuard: no interfaces" echo "" echo "--- Default route ---" ip route | grep default || true echo "" echo "--- Checking Tor connectivity ---" curl -s https://check.torproject.org | grep -i "congratulations\|sorry" } disable_tor() { echo "[*] Disabling Tor transparent proxy..." # Stop Tor service if systemctl is-active --quiet tor 2>/dev/null; then sudo systemctl stop tor echo " Tor service stopped" fi # Flush nftables (remove Tor rules) sudo nft flush ruleset 2>/dev/null || true echo " nftables flushed" # Restore basic nftables or leave empty for WireGuard sudo nft -f - <<'EOF' 2>/dev/null || true #!/usr/sbin/nft -f table ip filter { chain input { type filter hook input priority filter; policy accept; } chain forward { type filter hook forward priority filter; policy accept; } chain output { type filter hook output priority filter; policy accept; } } EOF echo "[*] Tor disabled. Basic firewall restored." } enable_wireguard() { echo "[*] Enabling WireGuard..." # Check if WireGuard config exists if [ ! -f "$WIREGUARD_CONF" ]; then echo "[!] WireGuard config not found: $WIREGUARD_CONF" echo " Please create your WireGuard configuration first." exit 1 fi # Make sure Tor is stopped disable_tor # Enable IP forwarding (required for WireGuard) sudo sysctl -w net.ipv4.ip_forward=1 >/dev/null # Start WireGuard sudo wg-quick up wg0 2>/dev/null || true # Ensure WireGuard starts on boot sudo systemctl enable wg-quick@wg0 2>/dev/null || true sudo systemctl start wg-quick@wg0 2>/dev/null || true echo "[*] WireGuard enabled on wg0" } enable_tor() { echo "[*] Enabling Tor transparent proxy..." # Stop WireGuard if active if wg show wg0 >/dev/null 2>&1; then echo " Stopping WireGuard..." sudo wg-quick down wg0 2>/dev/null || true sudo systemctl stop wg-quick@wg0 2>/dev/null || true sudo systemctl disable wg-quick@wg0 2>/dev/null || true fi # Restore Tor nftables rules if [ -f "$NFT_CONF_TOR" ]; then sudo nft -f "$NFT_CONF_TOR" echo " Tor nftables rules restored" else echo "[!] Tor nftables config not found: $NFT_CONF_TOR" exit 1 fi # Start Tor sudo systemctl start tor sudo systemctl enable tor echo "[*] Tor transparent proxy enabled" } case "$MODE" in tor|t) enable_tor ;; wg|wireguard|w) enable_wireguard ;; status|s|"") show_status ;; *) echo "Usage: $0 [tor|wg|status]" echo "" echo " tor - Enable Tor transparent proxy, disable WireGuard" echo " wg - Enable WireGuard VPN, disable Tor" echo " status - Show current network status (default)" echo "" exit 1 ;; esac echo "" show_status npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy После запуска системы запускаем обновления. Затем отправляем весь трафик через Tor, запустив этот скрипт (оставляем только дырку для Waydroid, в который для торификации установите Invizible Pro и в настройках VPN включите блокировку трафика при отключении приложения): #!/bin/bash set -e TOR_UID=108 # Step 1: Install Tor echo "[*] Installing Tor..." sudo apt update sudo apt install -y tor # Step 2: Configure Tor echo "[*] Configuring Tor..." sudo tee /etc/tor/torrc >/dev/null <<'EOF' TransPort 127.0.0.1:9040 DNSPort 127.0.0.1:9053 AutomapHostsOnResolve 1 VirtualAddrNetworkIPv4 10.192.0.0/10 EOF # Step 3: Restart and enable Tor echo "[*] Restarting and enabling Tor service..." sudo systemctl restart tor sudo systemctl enable tor # Step 4: Verify Tor is listening echo "[*] Checking Tor listening ports..." sudo ss -tulpn | grep tor # Step 5: Configure nftables echo "[*] Writing nftables configuration..." sudo tee /etc/nftables.conf >/dev/null <<EOF #!/usr/sbin/nft -f flush ruleset define uid = ${TOR_UID} define waydroid_net = 192.168.240.0/24 define unrouteables = { 127.0.0.0/8, 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, 0.0.0.0/8, 100.64.0.0/10, 169.254.0.0/16, 192.0.0.0/24, 192.0.2.0/24, 192.88.99.0/24, 198.18.0.0/15, 198.51.100.0/24, 203.0.113.0/24, 224.0.0.0/4, 240.0.0.0/4 } table ip nat { set unrouteables { type ipv4_addr flags interval elements = \$unrouteables } chain prerouting { type nat hook prerouting priority dstnat; policy accept; } chain postrouting { type nat hook postrouting priority srcnat; policy accept; oifname != "waydroid0" ip saddr \$waydroid_net counter masquerade } chain output { type nat hook output priority dstnat; policy accept; ct state established,related accept ip daddr \$waydroid_net return ip saddr \$waydroid_net return meta l4proto tcp ip daddr 10.192.0.0/10 redirect to :9040 ip daddr 127.0.0.1 udp dport 53 redirect to :9053 meta skuid \$uid return oifname "lo" return ip daddr @unrouteables return meta l4proto tcp redirect to :9040 } } table ip filter { set unrouteables { type ipv4_addr flags interval elements = \$unrouteables } chain input { type filter hook input priority filter; policy drop; ct state established,related accept iifname "lo" accept iifname "waydroid0" udp dport { 53, 67 } accept iifname "waydroid0" tcp dport { 53, 67 } accept counter log prefix "TOR-INPUT-DROP: " drop } chain forward { type filter hook forward priority filter; policy drop; ct state established,related accept iifname "waydroid0" oifname != "waydroid0" accept iifname != "waydroid0" oifname "waydroid0" ct state established,related accept } chain output { type filter hook output priority filter; policy drop; ct state established,related accept oifname "lo" accept ip daddr \$waydroid_net accept oifname "waydroid0" accept meta skuid \$uid accept ip daddr @unrouteables accept meta l4proto tcp accept udp dport 53 accept counter log prefix "TOR-KILLSWITCH: " drop } } EOF # Step 6: Validate and apply nftables echo "[*] Validating nftables configuration..." sudo nft -c -f /etc/nftables.conf echo "[*] Applying nftables rules..." sudo nft -f /etc/nftables.conf # Step 7: Enable and start nftables echo "[*] Enabling nftables service..." sudo systemctl enable nftables sudo systemctl start nftables # Step 8: Show active ruleset echo "[*] Current nftables ruleset:" sudo nft list ruleset # Step 9: Verify Tor connectivity echo "[*] Checking Tor connectivity..." curl -s https://check.torproject.org | grep -i "congratulations\|sorry" npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy Tails на телефоне. Создаем зашифрованную мобильную ОС, которая будет терять все данные после перезагрузки. Сначала устанавливаем Mobian - дебиан для телефонов (проще всего на старый pixel 3a, который можно купить за 3 копейки). Для полнодискового шифрования нужно собрать ОС. устанавливаем зависимости и клонируем репозиторий sudo apt install debos bmap-tools xz-utils android-sdk-libsparse-utils yq mkbootimg cryptsetup git clone https://salsa.debian.org/Mobian-team/mobian-recipes.git -b mobian-trixie cd mobian-recipes и запускаем сборку указав свой пароль от диска (sdm670 - это для pixel) ./build.sh -t sdm670 -c -R <password> после сборки ставим образ в телефон sudo apt install adb fastboot google-android-platform-tools-installer включаем режим разработчика: Настройки → Система → Об устройстве → 7 раз нажми "Номер сборки" включаем OEM-разблокировку: Настройки → Система → Параметры разработчика → "Разблокировка OEM" перезагружаем в fastboot: power + volume down при выключенном устройстве. затем вводим эти команды fastboot flashing unlock fastboot flash boot mobian-*-phosh-*.boot-sargo.img #название созданного boot-sargo.img fastboot -S 100M flash userdata mobian-*-phosh-*.rootfs.img #название созданного rootfs.img fastboot erase dtbo fastboot oem uart enable fastboot reboot и вводим пароль шифрования при запуске системы. дефолтный пинкод будет 1234. система установлена, продолжение ниже. npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy upd: this bug android 17, not graphene os. npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy @npub1hxx…g75y after update graphene os, physical sim card won't turn on - nothing happens after pressing "turn on sim". also phone is not visible on pc when connected via usb. problems only in android 17. check please. npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy RuStore это не магазин, а пегасус с арсеналом шпионажа за телефоном похлеще гуглов. https://habr.com/ru/articles/1046710/ А это РуСтор "здорового человека" (хотя, сейчас все рус приложения - пегасусы: от яндексов до авито и сбера). https://codeberg.org/mi6e4ka/openstore npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy самый удобный открытокодный антидетект браузер из всех, что пока попадались. если говорить об удобстве и простоте. https://github.com/ProxyShard/ShardBrowser npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy Скиньте дырову, когда он снова будет постить всякую хуйню про ультра-приватность в телеге. Аудит подъехал. Telegram's MTProto: Assessing Deanonymization Potential for a Network Attacker. Dr. Nadim Kobeissi Symbolic Software https://static.istories.media/uploaded/documents/d92f02fe94f64906887d290489e26d14.pdf npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy @npub142g…xrj0 also I don't see notes from relay.data.haus (rss). it works well in 0xchat and worked in the last version of Amethyst npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy @npub142g…xrj0 @npub1gcx…nj5z I don't see notes from my private contacts in my feed, don't see notes from mastodon accounts with ditto-mostr relay, don't see some of my notes and some of my subscribers after the latest updates. check it please. npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy я думаю, сейчас постепенно все клиенты ностр будут переходить к золотому стандарту: поддержка звонков, мармот е2ее чатов с прямой секретностью, тор/прокси, приватных подписок, шифрования локальной базы данных + всякие штуки из телеги: анимированные стикеры и тд. этот год будет поворотным в крутых обновлениях, будут закрыты последние баги, и ностр станет фантастической мега удобной соцсетью с высоченным уровнем приватности, децентрализации и свободы. npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy Nospeak added support for audio and video calls! very cool secure nostr messenger. @npub174t…mqm6 thanks! what's next? notes? marmot chats? Nospeak теперь один из лучших и стабильно работающих мессенджеров #nostr https://github.com/psic4t/nospeak npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy Выявление слежки в 30 популярных российских приложениях https://rks.global/files/research/russian_apps_search_for_vpn_ru.pdf npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy Delta Chat может работать в белых списках. Вот что для этого нужно: Подготовка «транспорта»: Не используйте свой личный ящик, иначе Delta Chat смешает ваши почтовые письма с чатами. Зарегистрируйте новый чистый аккаунт, например, на яндекс почте или на вк почте. Разрешение доступа (Критический шаг): Современные почтовые сервисы запрещают подключение по IMAP с основным паролем от аккаунта в целях безопасности. Вам нужно создать Пароль приложения. В Яндексе: Зайдите в аккаунт -> Безопасность -> Пароли приложений. Создайте новый пароль (выберите тип “Почта”). Скопируйте сгенерированный 16-значный код. Убедитесь, что в настройках почтового ящика (Почтовые программы) включен доступ по IMAP. В VK Почте: Перейдите в настройки безопасности аккаунта VK ID -> Безопасность и вход -> Пароли для внешних приложений. Сгенерируйте пароль. Установка и первый запуск: Скачайте клиент Delta Chat. Приложения доступны для Android, iOS, Windows, macOS и Linux. При запуске выберите «Войти в свой аккаунт». Запустите приложение и выберите "Использовать электронную почту как релей". Введите ваш созданный e-mail и вставьте пароль приложения. Приложение автоматически подтянет настройки серверов Яндекса или VK. Крутая настройка для усиления приватности перед почтовым провайдером: Зайдите в Настройки Delta Chat -> Продвинутые настройки. Опционально можно включить скрытие заголовков Message-ID и Chat-Version, чтобы ваши письма даже для почтовых алгоритмов Яндекса выглядели максимально стандартно, без следов автоматизации мессенджером. В Delta Chat через ботов можно читать крупные публичные телеграм каналы и rss-ленты. В итоге, получится телеграм на минималках, но зато с шифрованием. Список публичных ботов Delta Chat: https://deltachat-bot.github.io/public-bots/#/home npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy @npub1wht…r3ec @npub1h0u…rwx8 White Noise and Keychat not compatible now? (different encryption protocols?) #nostr #signal #mls npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy @npub1gcx…nj5z add ntfy support for notifications. amethyst has no notification in graphene os npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy #nostr https://dweb.link/ipfs/Qmc2RYRDsmzTbadvALNMZxRRjMGXuBzL65wDgQBLVDnhM7?filename=17756314221504841775631399613.jpg npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy Telegram can be even worse than WhatsApp. The app sends unencrypted traffic - this traffic can leak your metadata and even geolocation to local police. WhatsApp doesn't have such traffic. https://rys.io/en/179.html https://www.whonix.org/wiki/Telegram npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy dont use telegram. chats not encrypted, secret chats have backdoors, metadata not encrypted. telegram shares user data with police npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy 0xchat.com #nostr #meme #memes https://dweb.link/ipfs/QmcCuap3BRdFy6JbhvJpPCfxuMRJbXiqi3NRfjcgQDGzCN?filename=1775467057500353IMG_20260406_091311.jpg npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy тут не каналы, а просто аккаунты, публикующие новости и прочий контент. искать можно в контактах сверху в поиске. включи реле, указанные в моем описании, чтоб видеть максимум контента (можешь включить даже вообще все реле среди предлагаемого списка в настройках. для поиска по постам используй поиск "moments" в тех же контактах. то есть, в самом 0xchat весь поиск всего и вся в разделе контакты. дополнительно можно использовать поиск в других приложениях ностр в napps - там самый крутой поиск в jumble, также можно искать в yakihonne. napps - это просто набор других приложений ностр, для удобства. чтобы тут на кого-то подписаться - добавляй его в контакты, в 0х автор аккаунта не увидит, что ты на него подписался. с друзьями обменивайся публичными ключами, приватный ключ никому не показывай и не теряй, иначе потеряешь аккаунт npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy Keep away from telegram npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy I am Russian. You will laugh, but in Russia users idolize Telegram, they protect Telegram, and now they are trying to bypass the blocking of Telegram. Very very few users use Bitchat. 99.9% don't know about Nostr. npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy вместо кучи поддержки, как это было в 18м году, павел дыров получил очередной мощный критический разбор. уже от крупного админа телеги и ютубе с почти лямом подписчиков. почти по всем пунктам не поспоришь. за последние лет 6 дыров угробил репутацию и наконец-то многие стали просыпаться и понимать, что это всегда был небезопасный мессенджер без шифрования, а еще с кучей скама со стороны самого дырова https://www.youtube.com/watch?v=TGeyXjWgsZk npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy @npub1gcx…nj5z all you have to do is add a browser for nostr web apps and a pin code, and amethyst will become a copy of 0xchat 🙂 npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy Хороший ресурс для тех, кто хочет создать свое nostr-приложение или запустить на сервере свой публичный реле https://nostrcg.github.io/devguide/ npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy still high memory consumption. I ran noornote (deb) in debian-vm (qubes os) with 4 gb memory. then I looked my feed of posts for the last 4 hours - it used all 4 gb of memory. for comparison, 0xchat desktop (appimage) consumes 1.1 gb of memory when viewing a feed. by the way, I asked 0xchat dev add noornote web to 0xchat napps (0xchat nostr web apps) in the next release. npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy @npub1g53…drvk add vless or awg (amnezia wireguard) protocols with obfuscation to Nostr-VPN to work for Russia, China, Turkmenistan, Iran, Belarus and other countries where states use dpi firewall for internet censorship. npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy by the way, I follow you on 0xchat, so you don’t see me in the followers) npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy I liked 0xchat and keychat better. these apps have many other web nostr apps (napps). it is very convenient when you have many nostr apps in one client. keychat also has nip-ee, like whitenoise. 0xchat has private subscriptions by default - no one sees which accounts you follow. I would like whitenoise to take the experience of these apps: you have an encrypted chat with friends, but also interact with other nostr users in web clients. npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy Павел Дыров из своей виллы расскидывает уведомления для юзеров из рф о покупке премиума на годы вперед, мол на днях оплата рублями может пропасть. При этом, он не пишет что и телега может на днях полностью пропасть)) или что он предпримет что-то для обхода блокировки. Вы заплатите, а там уж сами крутитесь, разблокирывайте как хотите. https://cdn.nostrcheck.me/74853ad69b9ce9ed92e995f5a69acad5aa00885cdb48910c93c295787de1bd6d.webp npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy и еще этот ютуб @denpiligrim #note1pwx…hqcy npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy странно. в 0xchat вместо второго канала всегда публикуется типо видео без ссылки npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy https://www.youtube.com/@denpiligrim/videos npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy https://www.youtube.com/@denpiligrim npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy Пример адекватных ютуб-каналов с подробными гайдами по обходу блокировок интернета (в т.ч. и обходы белых списков) https://www.youtube.com/@denpiligrim https://www.youtube.com/@server-technologies/videos npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy вот новую версию глянь. npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy @npub175n…g6w0 hello! Your linux desktop app very nice, but consumes a lot of memory. Reduce memory usage by half. npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy p2p calls? npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy plans to add calls? npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy Кстати, за последний 10 лет ни в одном известном мессенджере не находили уязвимости с такой высокой оценкой. Дуров снова стал легендой и вошел в историю. Впервые слава среди криптографов и безопасников пришла к нему после этого легендарного бэкдора https://words.filippo.io/telegram-ecdh/ #note1cap…yafg npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy В Telegram обнаружили уязвимость нулевого дня, которая получила оценку 9,8 балла из 10 по шкале CVSS, что потенциально относит её к наивысшей категории опасности https://kod.ru/uyazvimost-zero-day-telegram npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy Кстати, с этой Telegи может начаться "разблокировка интернета" - можно же такие фишинг-прокси сделать и для ютуба, и для инсты, и для вотсапа. Сначала всё полетит на сервер vk, а уже оттуда на серваки гугла и меты. Тоже можно внедрить всякие зевсы для цензуры - определенные видео или аккаунты типо сам ютуб забанил. Получится, как если бы гугл и мета согласились сотрудничать с ркн, открыли серваки в рф и стал сливать данные + блочить контент. Ну и дело сделано - всем бы нафиг не нужны были всякие амнезии, огни и прочие впны. Снова наступило бы счастье в рф. А если какой-то аккаунт заблокиран для просмотра, то это гадина мета его заблочила, а не ркн! #note1g7r…x4nm npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy Мне 0xchat из всех зашел больше других. Потому что в нем еще 30 клиентов ностр, подписки по дефолту от всех скрыты, шифруются метаданные (в отличие от Ditto), ну и тот же Ditto можно юзать, есть встроенный браузер и там можно смотреть хоть телегу, есть звонки, пинкод, поддержка прокси, можно как в телеге создавать закрытые и открытые группы всякие. Конечно, есть еще пара багов, которые должны закрыть в следующем релизе, но ничего лучше и универсальнее не видел - если в нем есть минус, то заходишь в Napps и подключаешься к другим клиентам, типо yakihonne, nostria и тд. npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy rss можно в ностр загонять. тут тьма rss лент на русском. надо только реле nostr.data.haus добавить и почувствуешь себя как в телеге npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy я всё жду, когда нато начнёт пиарить ностр в снг. видать, это будет на следующем этапе информационной войны. но когда же он наступит... когда тут появятся нормальные рус мемы, а то натовские мой разум принять и понять не может.. npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy Тут хочется вспомнить "этот народ не победить")) Это топ скачиваемых прилодений в рф! И я даже офигеваю не столько от того, что лохов развели классическим фишингом (telega). Откуда они берут эти ноунэйм впны??! Когда есть Amnezia VPN и рекомендации о ней заполонили не только ютуб, но даже вк, простолюдины массово качают какой-то неизвестный скам - у этой хрени скачиваний во много раз больше, чем у амнезии! Огонь впн 😂😂 В общем, фишинг телеги и фишинг впна - вот что нужно для счастья миллионам простолюдинов в рф) Уровень цифровой грамотности просто зашкаливает: одни молятся на дурова и его дырявый мессенджер, читающий всю переписку на серваках и сливающий метаданные вообще всем подряд, а другим дай фишинговые приложения и они будут прыгать от счастья, сливая фсбшникам каждый свой шаг в интернете и каждое написанное слово. #russia https://24242.io/6a5595e94dac29ab8711d5e490c43f87ac39c2c27b11a028424f7c117a2c0026.jpg npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy For what? Maybe it would be better to encrypt metadata? In my opinion, it is a big minus for privacy. And it is better to use 0xchat and Amethyst for communication. npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy Звучит, как троллинг. UI/UX у Simplex действительно пока плох, но уж кто бы говорил - Delta chat напоминает мессенджер 15 летней давности)) Simplex децентрализован и на личном сервере легко обойти блокировку, а по дефолту для обычных юзеров они рекомендуют впн - отличное решение (с AmneziaVPN). Или лучше обходить блокировки через биг-тех почты или вообще через яндекс-почту, выкладывая на блюде вообще все метаданные?)) Трафик у Simplex не гигантский даже близко - тоже уж кто бы говорил, сидя на email. Ну а по крипте: то есть, анонимно оплачивать серваки для расширенных функций - это прям плохо, а, опять таки, прыгать по email'ам это великолепие? особенно, если надо передать гигантские файлы без палева?) #note1egd…6c2l npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy cool! add x and open telegram channels. and ditto will be downloaded by millions of users) npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy Полный разбор приложения Telega - якобы телеграма, работающего без впн. «Технический анализ MITM‑атаки в клиенте Telega» https://dontusetelega.lol/analysis В статье показано, что создатели приложения Telega активировали скрытую функцию, которая позволяет перехватывать все данные между приложением и сервером Telegram. Данные проходят через серверы самой Telega, связанные с Vk. Идиоты, использующие эту хрень, вываливают фсбшникам абсолютно всё, подставляя и всех своих собеседников из обычной телеги. #telegram #telega npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy ностр-впн заказывали? #note1sgt…3d24 npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy Qubes OS for beginners. The best secure and privacy OS. The safest option for Windows (Windows template + Windows appVMs). The best for many VPNs. And the best for Nostr 😎 #nostr #qubes #linux #secure #privacy https://dweb.link/ipfs/QmSQ5kzUGm8DdkXMUyh4HMx9gvHskvyMtb38ge5Tu1ne3K?filename=1774258528723808IMG_20260323_091312.jpg https://dweb.link/ipfs/QmUHtfMHU91Px34ajmSf2N4679VstMcN8YdtugHLZPVogo?filename=1774258530962294IMG_20260323_091312_1.jpg https://dweb.link/ipfs/Qmcd7RZpiyETZ1fKgQnYFFMPNgfDdQXHeACGbSSAAQ2D4z?filename=1774258532588958IMG_20260323_091313.jpg https://dweb.link/ipfs/QmRxeuSsAhfLqkVp2CDEowJsGMCH9QDSmeL1kQk868Hw9g?filename=1774258533304292IMG_20260323_091313_2.jpg https://dweb.link/ipfs/QmaKytZ8gLYUgDVWmNhfMggju3TgwEqv12DcKv4G7ENrXv?filename=1774258534124623IMG_20260323_091313_3.jpg https://dweb.link/ipfs/QmaRpoLUMiM6PCZGwXN4zMwgwpBkQaKe834QHB3KzPbCt7?filename=1774258534661894IMG_20260323_091313_4.jpg https://dweb.link/ipfs/QmWmFLqsxtCPhU3UUj3hPqrRvz9fTvQG4wJfC1fWuwhmRZ?filename=1774258535154482IMG_20260323_091313_5.jpg https://dweb.link/ipfs/QmbJfT8x45NZ6QUhfymbgen2UfQAVE1FDcwF49ZpYp8WMA?filename=1774258535763309IMG_20260323_091313_6.jpg https://dweb.link/ipfs/Qmcn4iRNjevqMvcAxKzNwf2ZhvFysTPFX2TRn5VcseHdzv?filename=1774258536681629IMG_20260323_091313_7.jpg npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy 0xchat: 1 app = 30 Nostr clients.. and 1000 websites 😎 npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy How to create Linux distributions for gaming and video graphics work, and how to create an infinite number of ultra-secure Windows 11 instances in Qubes OS. Kак создать линуксы для игр и работы с видеографикой, и как создать бесконечное количество ультра защищенных виндовсов 11 в Qubes OS. Винда сможет перекидывать в линуксы файлы и буфер обмена по защищенному каналу. #security #privacy #linux #windows #qubes #games https://forum.qubes-os.org/t/running-linux-appvms-with-a-full-desktop-environment-and-complete-graphics-support-hvm-and-vnc-in-qubes-4-3/40082 https://doc.qubes-os.org/en/latest/user/templates/windows/qubes-windows.html https://doc.qubes-os.org/en/latest/user/templates/windows/qubes-windows-tools.html npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy Hardening AmneziaWG. Упрощенная установка и усиленные настройки. Для новичков, желающий свой сэлф-хост впн с крутыми настройками. В описании есть рекомендуемый VPS всего за 25$ в год https://github.com/bivlked/amneziawg-installer npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy это говно скачали уже больше 5 лямов даунов, хотя инет напичкан обзорами и предупреждениями об этой шпионской фигне. реальная то телега читает все сообщения, а эта еще и передает их на серваки ok и vk, поэтому дауны палят все чаты и подставляют собеседников. если вдруг юзаете обычную телегу, то всегда спрашивайте что за приложение установлено у собеседника. #telegram #telega #note1ata…c2xf npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy awesome bridge #note1wvj…6ywt npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy на меня устроили спам-атаку армией ботов, пишущих в лс) они не знают, что для 0xchat это вообще не проблема - все незнакомцы отсеяны в отдельный чат и вообще не мешают обычному общению) npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy MediaTek Flaw Exposes Data on Millions of Android Phones! Ledger researchers expose Android flaw enabling wallet seed theft in seconds! Pixel и будущая Motorola - лучший выбор для безопасности мобил, если не хотите, чтобы вашу крипту и пароли украли за 45 секунд https://www.findarticles.com/mediatek-flaw-exposes-data-on-millions-of-android-phones/ npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy Zero SPOF file transfer over Nostr. End-to-end encrypted, decentralized, and private. #nostr Features: 🔒 End-to-End Encrypted - AES-GCM encryption, keys never leave the client 🌐 Zero SPOF - Decentralized storage across multiple Blossom servers 📦 NIP-17 Compliant - Standard file metadata format Безопасно отправляйте файлы в ностр! https://github.com/nogringo/file-transfer npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy Fully Ephemeral Encryption for appVMs in Qubes OS! Fantastic privacy and secure! https://forum.qubes-os.org/t/qubes-os-live-mode-dom0-in-ram-non-persistent-boot-ram-wipe-protection-against-forensics-tails-mode-hardening-dom0-root-read-only-paranoid-security-ephemeral-encryption/38868 npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy вокруг скама max битва в самом разгаре. https://habr.com/ru/news/1008242/ npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy "secret chats of 0xchat" если говорить языком телеги. но действительно секретные, а не телеграмовское дерьмо. и точно лучше илон_масковской х-фигни #note15vn…5p0k npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy The intelligence of my region have powerful tools for forensics. They can extract dm (old removed dm) and passwords from almost any phone. Only graphene is protected from it. and I immediately liked that 0xchat has anonymous default subscriptions - it gives a fantastic level of privacy on the nostr social network. I also like 0xchat's message and metadata encryption. Many nostr clients, such as primal, do not have these features. npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy 0xchat is the most functional and convenient messenger for me: anonymous subscriptions, encrypted messages, convenient feed, many napps, browser (you can use other web applications: telegram, instagram, x...), voice messages, calls, cool desktop for Linux. 0xchat is the best messenger and the best nostr client for me. 0xchat works quickly on my phone (GrapheneOS on pixel). npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy I use 0xchat daily, but sometimes I use napps for better search or other cool features npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy @npub16x7…a44x hello! @npub1tm9…xn72 added nostria.app to napps list! Nostria is a cool web app! #nostr #nostria #0xchat #napps https://image.nostr.build/cc05fb7ea11cf094e8ee7fa38b4bc27dcc16e229b2b12f09a108dc63a28bc5c2.jpg https://image.nostr.build/291f1e15727acb012e27e528b6733f7a6e4929056d3bd85623fc48c3569d1b8a.jpg npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy статья про максус-пегасус https://habr.com/ru/articles/1006666/ npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy Hello Moto #note1fd3…jvad npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy спроси про них у онлайн вэб моделей) (не путать с вэбкамщицами) npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy не только ии нынче в тренде. #linux https://www.phoronix.com/news/Intel-Linux-Jobs-February-2026 npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy оффлайн ии-чаты с различными моделями с открытым кодом для андроид. общаются, переводят, генерируют картинки, кодят. #ai https://github.com/alichherawalla/off-grid-mobile npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy в общем, лучше юзать линукс + графен на мобиле) там всего в избытке) npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy скоро огрызок оставит россиянам только госуслуги и макс 🍏🐛 #note14vj…ef9h npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy Fantastic guide for paranoid secure and privacy. The coolest protection I've seen #secure #privacy #paranoid https://forum.qubes-os.org/t/qubes-os-live-mode-dom0-in-ram-non-persistent-boot-ram-wipe-protection-against-forensics-tails-mode-hardening-dom0-paranoid-security/38868 npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy Как без kyc / aml купить биткоин на лежащие в сети эфира/evm USDT/USDC, сохранившиеся после неудачных попыток дождаться альтсезоны. Многие любители evm-сетей привыкли к децентрализованной торговле, что очень хорошо, потому что Cex'ы палят ваши данные + могут заблочить аккаунт, как было со мной. Но в dex обычно только "завернутые" битки, которые вы не "развернете" в реальный биток без адовой верификации (WBTC, cbBTC) + такие завертыши еще и могут быть заблочены прям на вашем кошельке (централизация, как у тезера/серкла). Thorchain тут рассматривать не будем, т.к. после хака bybit этот ресурс стал очень грязным. После него у вас могут возникнуть серьезные проблемы при обнале в будущем. Самыми безопасными вариантами на сегодня будут tBTC и Chainflip. tBTC - это токен в сети эфира, обеспеченный 1 к 1 реальным битком с помощью децентрализованной технологии Threshold, прошедшей множество мощных аудитов. С ним алгорит простой: 1. Покупаете tBTC на любимой swapалке, типо cowswap или 1inch 2. Идете на сайт app.threshold.network и жмете Redeem, чтобы вывести реальный биток, сжигая токен tBTC. 3. Подключаете свой метамаск (или что там у вас), указываете адрес для получения реального битка и отправляете tBTC обратно в минт. Всё. Chainflip - это альтернатива thorchain, альтернатива даже более безопасная, т.к. под капотом больше децентрализации и защиты, а код также был проверен известными аудиторами. Главный разработчик имеет хороший опыт в криптобезопасности, т.к. это создатель известного анонимного мессенджера Session. Chainflip вообще не связан с evm, поэтому тут нет всяких сэндвич-атак. Тут всё проще некуда, как в привычной swapпалке: 1. Идете на сайт swap.chainflip.io 2. Выбираете свой стейбл, указываете адрес для получения битка и делаете swap. Преимущество tBTC в низких издержках, но зато 2 действия. Chainflip проще, но там комса заметно выше, но зато он работает еще и с сетью солана, а скоро там будет и трон. Оба сервиса уже не юные и эффективно показали себя за последние годы. Так что, покупайте биток на падении и богатейте - это вам не альтушки. npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy защита от cold-boot атаки в Qubes OS https://forum.qubes-os.org/t/ram-wipe-in-dom0-protection-against-cold-boot-attack-in-qubes/ npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy теперь это мой любимый магазин приложений #note1xy7…xpz7 npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy https://whonix.org/wiki/Telegram https://rys.io/en/179.html https://threadreaderapp.com/thread/1789687898863792453.html npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy похоже, qubes так и останется на xfce. давно пора крысе догонять lxqt #note1y7h…melr npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy Use Simplex, 0xchat, Xchat (nostr)😎 https://www.pcmag.com/news/lawsuit-alleges-that-whatsapp-has-no-end-to-end-encryption?test_uuid=04IpBmWGZleS0I0J3epvMrC&test_variant=A npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy Карта сети nostr. Уважуха тому единственному герою, запустившему реле в рф. Карта показывает где ностр популярен и где до сих пор не могут вылезти из телеги, вк, вотсапа и прочего говна. https://image.nostr.build/b0cb64d67f3cd0db65b577ed7bd945cf1fcdf7415219fcf1cdb475127b03b522.jpg npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy Qubes does not have a default browser. These are default browsers Debian and Fedora VM. in Whonix VM default browser is tor. in Kicksecure template you set the default browsers yourself (browser choice). it's the same as installing a Debian VM on Secureblue and saying that firefox-esr is the default browser in Secureblue😄 npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy 0xchat desktop npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy Полный гайд по запуску #Qubes OS в Live Mode. 2 режима амнезии для большей универсальности. Максимальная защита от криминалистики #forensics #privacy #secure https://forum.qubes-os.org/t/qubes-os-live-mode-dom0-in-ram-zram0-overlay-in-tmpfs-protection-against-forensics-tails-mode/38868 npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy @npub1hxx…g75y I hope these phones will be sold in every city (like a pixel)🙂 npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy this extension + sponsorblock 👍 npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy продолжаем про винду https://www.comss.ru/page.php?id=18224 https://myseldon.com/ru/news/index/278936170 npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy Даже в китае великий китайский фаервол не помеха чатиться в даркнете. Крупнейшие китайские onion-форумы, размеры которых мощнее большинства мировых форумов xxxxxxxxss2wdceudprpxnmvjs5kwnlnfvun57koml6hkp6u7qwyhsyd.onion/ cabyceogpsji73sske5nvo45mdrkbz4m3qd3iommf3zaaa6izg3j2cqd.onion/ npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy и еще немного красоты про винду. про "супер-безопасную" виртуалку WSL)) https://specterops.io/blog/2026/01/16/one-wsl-bof-to-rule-them-all/ #note1y0m…nrsc npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy windows - fucking shit. в винде нет вашего шифрования, ваших данных. они общие с майкрософт, как при коммунизме. у эпл такая же фигня. поэтому, все на линукс! #windows #linux #note149t…zyat npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy дополнительная приватность определенных кубов с помощью функций net.fake-ip, net.fake-gateway, net.fake-netmask #например фейк ip 192.168.0.100 qvm-features <qube> net.fake-ip 192.168.0.100 #для отключения qvm-features <qube> net.fake-ip -D #qubes #privacy #note1kz8…l9n6 npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy наконец-то!! 0xchat the best! #note1rxz…c7d2 npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy Qubes OS - самая безопасная в мире ОС для ПК, а еще она самая популярная среди всех безопасных ОС. Максимальная безопасность, приватность, универсальность и простота. https://www.qubes-os.org/ Qubes OS - это свободная и открытая операционная система на базе гипервизора Xen, разработанная с учетом повышенных требований к безопасности и конфиденциальности пользователей. Основным принципом Qubes OS является концепция абсолютного разделения и изоляции приложений и данных на виртуальных машинах с помощью гипервизора первого типа (максимальная безопасность виртуализации). По сути, здесь нет единой ОС (в отличие от монолиных ОС, заразив которые можно получить полный контроль); система, как мозайка, состоит из множества других систем. Многие думают, что запустить виртуальную машину можно и без Qubes, но они не понимают уникальную архитиктуру этой ОС с множеством типов виртуальных машин, которые воспроизвести практически нереально. Типы VM в Qubes OS: AppVM (VM-приложение) Root: read-only от TemplateVM (шаблонов) — сбрасывается при каждом запуске. Private/home: persistent — файлы, настройки, документы сохраняются. Volatile: не сохраняется. Для чего: повседневные задачи (браузер, рабочие программы); компрометация root не критична. Запускайте каждую программу в отдельной VM! TemplateVM (Шаблон) Root: persistent и shared — изменения (установка ПО) наследуют все AppVM/DVM. Private/home: persistent, но обычно не используется (шаблон не для данных), изолирован от AppVM. Volatile: не сохраняется. Изолированы от интернета (установка и обновления через прокси-vm). Для чего: база для VM-приложений, изоляция Root; безопасная установка программ. DVM (DisposableVM, одноразовые) Root: read-only — сбрасывается при закрытии. VM удаляется полностью. Private/home: не сохраняется — VM удаляется полностью Volatile: не сохраняется. VM удаляется полностью Для чего: открытие небезопасных файлов, подозрительных сайтов, проведение криптоопераций, скрытие следов. sys-vm (ServiceVM: интернет, брандмауэр, тор, впн, юсб) Root: persistent — если на базе AppVM, cброс если на базе DVM. Private/home: persistent — если на базе AppVM, cброс если на базе DVM. Volatile: не сохраняется. Для чего: инфраструктура; подключение к интернету, настройка изолированного firewall, создание изолированных анонимайзеров (vpn/whonix). StandaloneVM (Независимая) Root: persistent и private — полная копия, изменения сохраняются. Private/home: persistent. Volatile: persistent. Для чего: установка полноценных ОС (как в KVM / Virtualbox). Возможно создание шаблонов (TemplateVM) на базе StandaloneVM. Все эти VM могут быть созданы на базе различных дистрибутивов Linux, или же на базе Windows, BSD, Android. Update-proxyVM (скрытая системная VM, работает незаметно) Используется как прокси для безопасного получения обновлений. Она изолирует сетевой трафик от dom0 и шаблонов, предотвращая прямой доступ к интернету для максимальной безопасности. dom0 (главный домен, домашняя ОС на базе Fedora) Первый (и единственный) привилегированный домен, запускается непосредственно на гипервизоре Xen и имеет прямой доступ к аппаратному обеспечению, выступая в роли административного интерфейса для управления всеми остальными VM. Имеет мощную изоляцию от всех других VM. В Qubes OS вы станете повелитем анонимности и приватности: с помощью sys-vm вы сможете запускать и одновременно использовать множество vpn, proxy, whonix кубов, перенаправляя их травик строго на указанные AppVM/DVM кубы. Можно даже легко подключаться к нескольким Wifi одновременно, направляя каждый из них в нужные кубы. Другие кубы вы можете полностью изолировать от интернета. Также в Qubes встроена защита от клавиатурных отпечатков и отпечатков движения мыши, которые можно настроить для каждого куба. Есть функция подмены таймзоны для отдельных кубов Еще одна классная функция создание фейкового ip для отдельных кубов - в случае чего, злоумышленник получит фейковый ip. Qubes OS максимально защитит вас от криминалистической экспертизы за счет шифрования диска по умолчанию, функции эфемерного шифрования для временных данных, возможности запуска DVM или даже dom0 в оперативной памяти (как Tails). В Qubes OS есть функция защиты от вирусов с помощью конвертации pdf и изображений в безопасные файлы (создание безопасной копии, где не может быть вируса). Ну и конечно же вы можете сделать бэкап всех кубов со всеми настройками на случай форс-мажора или же чтобы подарить свои настроенные кубы друзьям! В Qubes OS особое внимание уделено удобству, чтобы даже новички быстро разобрались что да как. Практически всё работает с графическим дружелюбным интерфейсом. Обычно самые безопасные ОС считаются самыми сложными, но Qubes OS - исключение. Другие безопасные ОС: Kicksecure, Secureblue, Nixos намного сложнее не только для новичков, но и для опытных юзеров. Поэтому у Qubes OS больше пользователей, чем у указанных линуксов вместе взятых. Нужен устаревший Debian/Ubuntu для установки специфической программы? Нужна винда для работы с майкрософт? Привыкли к Debian, но иногда нужны свежайшие программы из репозиториев Fedora и Arch? Хотите сделать интернет-куб на базе OpenBSD? В Qubes OS всё это сделать наиболее просто, чем где либо! https://dweb.link/ipfs/QmSoxrqNjp4xag57Rjm3o3jEsSeD6Zkjx8utBB9cMcXMW1?filename=176918675094346695f6d15da681b9d5000f15582ff58ba4-original.jpg