Debian 13 (Trixie): High/Critical CVE paziņojumi uz Discord

Šajā ceļvedī aprakstīts, kā:

  • noteikt ievainojamības instalētajās pakotnēs,
  • filtrēt tikai High un Critical līmeņa riskus,
  • automātiski saņemt paziņojumus Discord,
  • neatslēgt nevienu ienākošo portu.

Risinājums balstās uz debsecan (Debian Security Analyzer) un Discord webhook.


1. Pārbaudīt Debian versiju

cat /etc/os-release

Ja redzams:

VERSION_CODENAME=trixie

izmanto trixie kā suite parametru.


2. Nepieciešamo pakotņu uzstādīšana

apt update
apt install debsecan curl jq
  • debsecan – pārbauda CVE statusu instalētajām pakotnēm
  • curl – nosūta webhook pieprasījumu
  • jq – droši noformē JSON paziņojumu

3. Discord Webhook izveide

Discord vidē:

Server Settings → Integrations → Webhooks → New Webhook

Nokopē ģenerēto URL, piemēram:

https://discord.com/api/webhooks/XXXXXXXX

4. Monitoringa skripta izveide

Izveido skriptu:

nano /usr/local/bin/vuln_check.sh

Ievieto saturu:

#!/usr/bin/env bash
set -euo pipefail

# Debian suite (Debian 13 = trixie)
SUITE="trixie"

# Hostname for clearer Discord messages
HOST="$(hostname)"

# Paste your Discord webhook URL here
WEBHOOK_URL="PASTE_YOUR_DISCORD_WEBHOOK_URL_HERE"

# Collect CVE list where a fix is available in the repo (i.e., you should upgrade)
REPORT="$(debsecan --suite "$SUITE" --only-fixed)"

# If there is anything to report, send it to Discord
if [[ -n "${REPORT}" ]]; then
MESSAGE="🛡️ Security updates available on ${HOST} (${SUITE})\n\n${REPORT}"

# Send JSON safely via jq (handles newlines/quotes)
curl -sS -H "Content-Type: application/json" \
-X POST \
-d "$(jq -n --arg content "$MESSAGE" '{content: $content}')" \
"$WEBHOOK_URL" >/dev/null
fi

Padari skriptu izpildāmu:

chmod +x /usr/local/bin/vuln_check.sh

5. Manuāla pārbaude

Palaid skriptu:

/usr/local/bin/vuln_check.sh

Ja sistēmā ir High vai Critical līmeņa CVE, Discord kanālā parādīsies paziņojums.
Ja paziņojums netiek nosūtīts, šobrīd šāda līmeņa ievainojamību nav.


6. Automātiska izpilde ar cron

Atver crontab:

crontab -e

Pievieno rindu:

0 8 * * * /usr/local/bin/vuln_check.sh

Skripts tiks palaists katru dienu plkst. 08:00.


Kādu informāciju saņemsi?

Piemērs:

HIGH/CRITICAL ievainojamības uz DietPiMainCVE-2026-1642 nginx
CVE-2025-69421 openssl
CVE-2026-22795 libssl3t64

Tu redzi:

  • CVE numuru
  • skarto pakotni
  • faktu, ka Debian repozitorijā jau ir pieejams labojums

Kā darbojas debsecan?

debsecan salīdzina:

instalēto pakotņu versijas
↔ Debian Security Tracker datubāzi

Tas:

  • nemeklē ekspluatācijas mēģinājumus,
  • neveic aktīvu tīkla skenēšanu,
  • nepārbauda runtime konfigurāciju.

Tas identificē:

instalētas pakotnes, kurām pieejams drošības atjauninājums.


Iespējamie paplašinājumi

Risinājumu var papildināt ar:

  • paziņojumiem tikai par jaunām CVE (salīdzinot ar iepriekšējo stāvokli),
  • informāciju par instalēto un laboto versiju,
  • automātisku apt upgrade izpildi,
  • centralizētu pārbaudi vairākiem serveriem,
  • filtrēšanu pēc CVSS sliekšņa.

Drošības modelis

  • Nav nepieciešami ienākošie porti
  • Tiek izmantots tikai izejošs HTTPS savienojums
  • Minimāla uzbrukuma virsma
  • Balstīts uz Debian oficiālo drošības informāciju

Šī pieeja nodrošina vieglu un praktisku ievainojamību monitoringu Debian sistēmās, piemērotu mājas laboratorijai vai nelielai infrastruktūrai.

One thought on “Debian 13 (Trixie): High/Critical CVE paziņojumi uz Discord”

  1. #!/usr/bin/env bash

    # ============================================================
    # Skripts: security-notify.sh
    # Ko dara: pārbauda serveri, vai tajā nav zināmās ievainojamības (CVE),
    # un nosūta paziņojumu Discord, ja ir atrastas problēmas,
    # kurām jau pastāv drošības atjauninājums.
    #
    # Domājiet par to kā “Windows Update”, tikai Debian serverim
    # ar paziņojumiem tieši jūsu Discord kanālā.
    # ============================================================

    set -euo pipefail
    # set -e → ja kāda komanda beidzas ar kļūdu — skripts apstājas
    # (līdzīgi kā try/catch PHP, tikai automātiski visam failam)
    # set -u → ja tiek izmantots mainīgais, kas nav definēts — kļūda
    # (līdzīgi kā strict mode PHP)
    # set -o pipefail → ja kļūda rodas komandu ķēdē (pipe) —
    # tā netiek slēpta

    # ============================================================
    # IESTATĪJUMI — vienīgā vieta, kas jāmaina
    # ============================================================

    # Jūsu servera Debian versija.
    # trixie = Debian 13. Ja jums ir Debian 12 — nomainiet uz “bookworm”
    SUITE=”trixie”

    # Discord webhook adrese. To var izveidot kanāla iestatījumos:
    # Kanāla iestatījumi → Integrācijas → Webhooks → Izveidot Webhook
    WEBHOOK_URL=”PASTE_YOUR_DISCORD_WEBHOOK_URL_HERE”

    # Discord ziņojuma maksimālais garums ir 2000 rakstzīmes.
    # Atstājam vietu galvenei, tāpēc ņemam 1800.
    MAX_LENGTH=1800

    # ============================================================
    # AIZSARDZĪBA PRET PALAIŠANU BEZ IESTATĪŠANAS
    # ============================================================

    # Pārbaudām, vai webhook tiešām ir nomainīts uz īstu URL.
    # [[ … ]] — tas ir nosacījums, kā if() PHP
    # == *”PASTE”* — pārbaudām, vai virkne satur vārdu “PASTE”
    if [[ “$WEBHOOK_URL” == *”PASTE”* ]]; then
    echo “❌ Kļūda: norādiet īstu Discord webhook URL mainīgajā WEBHOOK_URL”
    exit 1
    # exit 1 — pabeidz skriptu ar kļūdas kodu (ne 0 = kaut kas nogāja greizi)
    fi

    # Pārbaudām, vai programma debsecan vispār ir instalēta serverī.
    # command -v — meklē programmu, kā file_exists() PHP
    if ! command -v debsecan >/dev/null 2>&1; then
    echo “❌ Kļūda: programma debsecan nav instalēta.”
    echo ” Instalējiet to ar komandu: sudo apt install debsecan”
    exit 1
    fi

    # Pārbaudām, vai ir instalēts jq — rīks darbam ar JSON.
    # Tas nepieciešams, lai droši nosūtītu datus uz Discord.
    if ! command -v jq >/dev/null 2>&1; then
    echo “❌ Kļūda: programma jq nav instalēta.”
    echo ” Instalējiet to ar komandu: sudo apt install jq”
    exit 1
    fi

    # ============================================================
    # IEVAINOJAMĪBU DATU VĀKŠANA
    # ============================================================

    # Iegūstam servera nosaukumu — lai Discord ziņojumā būtu skaidrs,
    # no kuras mašīnas paziņojums nāk.
    # Tas ir kā $_SERVER[‘SERVER_NAME’] PHP
    HOST=”$(hostname)”

    # Palaižam debsecan — tas skenē instalētos pakotnes un salīdzina
    # tās ar zināmo ievainojamību (CVE) datubāzi.
    # –suite → norādām Debian versiju, lai ņemtu pareizo ievainojamību bāzi
    # –only-fixed → rādīt TIKAI tās ievainojamības, kurām repozitorijā jau ir labojums
    # (t.i., ko var novērst tūlīt ar apt upgrade)
    #
    # Rezultātu saglabājam mainīgajā REPORT.
    # Ja ievainojamību nav — mainīgais būs tukšs.
    REPORT=”$(debsecan –suite “$SUITE” –only-fixed 2>/dev/null || true)”
    # 2>/dev/null → slēpjam debsecan tehniskos brīdinājumus (mums nav svarīgi)
    # || true → pat ja debsecan atgrieza kļūdas kodu, skripts turpinās darbu

    # ============================================================
    # PAZIŅOJUMA NOSŪTĪŠANA UZ DISCORD
    # ============================================================

    # Pārbaudām: vai vispār ir ko ziņot?
    # -n nozīmē “virkne NAV tukša” — kā !empty() PHP
    if [[ -n “${REPORT}” ]]; then

    # Saskaitām, cik ievainojamību atrasts.
    # wc -l skaita rindu skaitu — katra rinda = viena ievainojamība.
    CVE_COUNT=”$(echo “$REPORT” | wc -l | tr -d ‘ ‘)”
    # tr -d ‘ ‘ noņem liekās atstarpes, ko pievieno wc

    # Saīsinām atskaiti, ja tā ir pārāk gara Discord ziņojumam.
    # Bash sintakse ${mainīgais:0:skaits} ir kā substr($str, 0, $length) PHP
    REPORT_TRIMMED=”${REPORT:0:$MAX_LENGTH}”

    # Ja teksts tika saīsināts — pievienojam brīdinājumu par to
    if [[ “${#REPORT}” -gt “$MAX_LENGTH” ]]; then
    # ${#REPORT} — virknes garums, kā strlen() PHP
    REPORT_TRIMMED=”${REPORT_TRIMMED}”$’\n\n'”⚠️ Saraksts saīsināts. Pilnu atskaiti skatiet, palaižot debsecan serverī manuāli.”
    fi

    # Veidojam galīgo ziņojumu Discord
    MESSAGE=”️ **Atrasti drošības atjauninājumi** serverī \`${HOST}\` (Debian ${SUITE})
    Ievainojamības ar pieejamu labojumu: **${CVE_COUNT}**

    \`\`\`
    ${REPORT_TRIMMED}
    \`\`\`
    Lai novērstu: \`sudo apt update && sudo apt upgrade\`”

    # Nosūtām ziņojumu uz Discord, izmantojot HTTP POST pieprasījumu.
    # Tas ir līdzīgi kā file_get_contents() ar kontekstu vai curl PHP.
    #
    # jq šeit pilda json_encode() lomu no PHP —
    # tas pareizi apstrādā visas speciālās rakstzīmes, rindu pārneses un pēdiņas,
    # lai JSON nesalūztu.
    #
    # curl karodziņi:
    # -s → klusais režīms (nerādīt progresa joslu)
    # -S → bet tomēr rādīt kļūdas, ja tādas ir
    # -f → atgriezt kļūdu, ja serveris atbildēja ar 4xx/5xx kodu
    # -H → pieprasījuma galvene (kā header() PHP)
    # -X POST → pieprasījuma metode
    # -d → pieprasījuma pamatteksts (dati)
    HTTP_RESPONSE=$(
    curl -sSf \
    -H “Content-Type: application/json” \
    -X POST \
    -d “$(jq -n –arg content “$MESSAGE” ‘{content: $content}’)” \
    “$WEBHOOK_URL” 2>&1
    ) && CURL_OK=true || CURL_OK=false

    # Pārbaudām, vai paziņojums tika veiksmīgi nosūtīts
    if [[ “$CURL_OK” == “true” ]]; then
    echo “✅ Paziņojums veiksmīgi nosūtīts uz Discord (atrasti CVE: ${CVE_COUNT})”
    else
    echo “❌ Neizdevās nosūtīt paziņojumu uz Discord.”
    echo ” Servera atbilde: ${HTTP_RESPONSE}”
    exit 1
    fi

    else
    # Ja REPORT ir tukšs — ievainojamību ar gataviem labojumiem nav atrasts
    echo “✅ Ievainojamības ar pieejamiem labojumiem nav atrastas. Serveris kārtībā.”
    fi

Leave a Reply