RPiList / specials

Schutz vor Fakeshops, Werbung, Tracking und anderen Angriffen aus dem Internet
Other
1.49k stars 242 forks source link

benutzerdefinierter Updatezyklus #238

Closed BulldozerPete closed 4 years ago

BulldozerPete commented 4 years ago

Bei der Recherche nach einem häufigerem "pihole -g" (Update Blocklisten) bin ich auf die wichtige Info gestoßen, dass Phishing URLs in den ersten Stunden den meisten Schaden anrichten. Per default werden die Blocklists alle 7 Tage aktualisiert. Mein Vorschlag: EIne Anleitung für die User erstellen, damit diese die aktuellsten Updates erhalten. Ich weiß nur das der cron job in /etc/cron.d/pihole angepasst werden muss.

Kennt sich jemand damit aus und kann eine Anleitung für RPiList/specials/dev erstellen? Danke

AleksCee commented 4 years ago

Wenn du den anpasst ist der nach dem Update vom pihole Core wieder alt. Steht sogar als Warnung in der Datei. Kannst entweder mit crontab-e einen für den pihole User anlegen oder in den Ordner ne eigene zusätzlich Datei legen die eine Zeile mit dem Update Befehl für deine Zeit hat. Oder nen Script, wie ich, der dir sogar die Änderungen per Mail zusendet:

Das kam heute in meiner Mail:

Neue Eintraege: 0 Geloeschte Eintraege: 30 Geaenderte Eintraege: 30 /home/pi/gravity_diff/diff_20200416_1203

AleksCee commented 4 years ago

Hier mein Script. Einfach crontab -e als pihole user machen und die Zeile da einfügen:

0 12 * PATH="$PATH:/usr/local/bin/" /home/pi/pihole_updater

Das heißt jeden Tag um 12 Uhr. Habe ich da gemacht, weil dann normal keiner da ist. Aber der DNS ist ja auch nur 1-2 Sekunden nicht erreichbar.

Voraussetzung für das Script ist das es im pihole home den Ordner gravity_diff gibt also

mkdir gravity_diff

Eingeben. Diesen Script unter dem Namen pihole_updater im pihole home speichern und fertig. Der macht dann jeden Tag ein Listen Update um 12 und am Sonntag eine Simulation der Pakete Updates damit man sieht ob was zu installieren ist und zusätzlich nen pihole Core Update. Und man hat eine Änderungshistorie der Domains vom Update.

Das Script:

(
if test $(date "+%w") -eq 0;then
   sudo apt-get update
   sudo apt-get upgrade --simulate
   pihole -up
   echo ''
fi
   cp /etc/pihole/gravity.list /home/pi/gravity_diff/gravity_prev.list
   pihole -g
   echo ''
   DIFF_DATE=$(date +"%Y%m%d_%H%M")
   diff /etc/pihole/gravity.list /home/pi/gravity_diff/gravity_prev.list | grep '[><]' > /home/pi/gravity_diff/diff_${DIFF_DATE}
   echo "Neue Eintraege: $(grep -c '<' /home/pi/gravity_diff/diff_${DIFF_DATE})"
   echo "Geloeschte Eintraege: $(grep -c '>' /home/pi/gravity_diff/diff_${DIFF_DATE})"
   echo "Geaenderte Eintraege: $(wc -l /home/pi/gravity_diff/diff_${DIFF_DATE})"
   sleep 20
   getent hosts nas.fritz.box
   sleep 10
) | tee /home/pi/pihole_update.log | mail -s "Pi-hole Update" deine@mail-Adresse.de
BulldozerPete commented 4 years ago

So ne Mail, dass die Blocklisten im PiHole meiner Oma regelmäßig geupdatet werden ist super. Kannst Du dazu bitte ne kleine Anleitung (Schritt für Schritt im Verzeichnis /dev) anlegen?

BulldozerPete commented 4 years ago

Was soll die Zeile "getent hosts nas.fritz.box" bedeuten? Meine Oma hat keine FritzBox.

BulldozerPete commented 4 years ago

Ich fasse zusammen:

  1. Per SSH auf den PI verbinden
  2. In der Konsole folgendes eingeben: crontab -e
  3. Nr.1 wählen
  4. Zeile "0 12 * PATH="$PATH:/usr/local/bin/" /home/pi/pihole_updater" hinzufügen
  5. STRG-X, Yes und mit enter speichern
  6. "mkdir gravity_diff"
  7. und jetzt?
AleksCee commented 4 years ago

Kannst du weg lassen, da gucke ich nur ob vom pihole nach dem Update die lokale Namesauflösung noch geht. Kannst auch deinen Router nehmen. Wollte das ich in der Mail auch gleich sehe, wenn was nicht geht. Weil mein pihole auch die lokalen Adressen an die fritzbox weiterleitet. Kannst als Test auch getent hosts Heise.de schreiben oder so.

AleksCee commented 4 years ago

danach: nano pihole_updater Alles von aus der Code Box da einfügen, die Email austauschen und speichern . chmod u+x auf pihole_updater Zum Test mal aufrufen und gucken ob ne pihole_update.log geschrieben wird und was drin steht und gucken ob Mail bei dir ankommt.

BulldozerPete commented 4 years ago

Wie rufe ich einen Test auf?

AleksCee commented 4 years ago

./pihole_updater

BulldozerPete commented 4 years ago

Der Test wirft einen Fehler: ./pihole_updater: line 19: mail: command not found

ghost commented 4 years ago

Der Test wirft einen Fehler: ./pihole_updater: line 19: mail: command not found

Hallo, du musst einiges nachinstallieren und konfigurieren damit "mail" funktioniert, Anleitung dazu:

msmtp und mailutils installieren sudo apt-get install msmtp msmtp-mta mailutils

msmtp Konfiguration Systemweit und benutzerdefiniert anlegen Systemweit (root): sudo nano /etc/msmtprc

Benutzerdefiniert (pi): nano ~/.msmtprc

Für beide Konfigurationen kann man folgende Konfiguration verwenden, ggf. für root eine andere Mailadresse verwenden, falls vorhanden oder gewünscht:

defaults
auth           on
tls            on
tls_trust_file /etc/ssl/certs/ca-certificates.crt
logfile         /var/log/msmtp/msmtp.log
aliases        /etc/aliases

# Mailaccountdaten
account          me@gmail.com
host             smtp.gmail.com
port             587
from             me@gmail.com
user             me@gmail.com
password         my@P4ssW0rt:0815+PiHol3
account default: me@gmail.com

Weil wir in der Datei Passwörter speichern, müssen die Zugriffsrechte eingeschränkt werden: sudo chmod 600 /etc/msmtprc chmod 600 ~/.msmtprc

Fallback Empfänger-Adresse und die des Root-Accounts festlegen. An diese Mailadresse werden E-Mails versendet wenn z.B. ein Cronjob fehlschlägt. sudo nano /etc/aliases

root: root@meinedomain.xy
default: root@meinedomain.xy

Mailprogramm definieren sudo nano /etc/mail.rc

set sendmail="/usr/bin/msmtp -t"

Mailversand testen

Über mail testen: echo "Inhalt der E-Mail" | mail -s "Betreff" mein@empfaenger.xy

Über msmtp direkt mit Ausgabe von Debuginformationen falls eine Fehlersuche nötig ist: echo "Inhalt der E-Mail" | msmtp -debug mein@empfaenger.xy

Gruß, Gerd

BulldozerPete commented 4 years ago

Hallo @Zelo72 , danke für Deine Unterstützung! Ich kenne mich ein wenig mit den Konsolenbefehlen aus und bekomme das mit ein wenig Zeit vielleicht hin. Aber was machen die User, die sich nicht damit auskennen?

Stellt Euch bitte folgende Situation vor: Ich habe zu Weihnachten bei meiner Oma einen Pi hole mit den RPIList-Blocklisten installiert. Diese haben sich regelmäßig alle 7 Tage aktualisiert. Meine Oma hat nichts davon bemerkt und ich war glücklich, weil Oma sicher und kein manuelles Eingreifen meinerseits notwendig ist. Als vor mehreren Wochen die "COVID-19-Pandemie" ausbrach, erhielt ich den Hinweis meine Oma nicht mehr zu besuchen. Daran halte ich mich bis heute. Kurze Zeit später tauchten kriminelle COVID19 Webseiten im Netz auf die durch @RPiList in einer Blocklist zusammengefasst wurden.

Nun das Problem:

  1. Wie bekomme ich die COVID19-Blocklist auf das Pi hole meiner Oma, ohne diese zu besuchen?
  2. Und wenn die Liste installiert ist, wie kann ich diese jeden Morgen um 06:00 Uhr aktualisieren lassen damit meine Internetsüchtige Oma nicht auf eine kriminelle Webseiten hereinfällt, die schon auf einer der Blocklisten hier steht, aber erst in max. 7 Tagen in das Pi hole meiner Oma geblockt wird?

    Zu 1. hat @H4ckZ ein Skript geschrieben, dass alle Blocklisten in der Datei Blocklisten.md lädt. Jetzt fehlt nur noch eine Anleitung oder ein Skript dass Nr.1 und die Anleitungen von @AleksCee und @Zelo72 verbindet. Die automatische Mail ist super, aber für die erste Version noch nicht notwendig. Das kann ja iterativ erweitert werden.

Dann ist meine Oma sicher, ich glücklich und andere, die das auch benötigen auch :)

AleksCee commented 4 years ago

Sorry komme jetzt erst zur Antwort. Alternativ ging auch: ssmtp 2.64-8 armhf extremely simple MTA to get mail off the system to a mail hub Und bsd-mailx 8.1.2-0.20160123cvs-4 armhf simple mail user agent

Wenn Du zugriff auf ein Mail-Relay-Server hast wie z.B. ein NAS zu Hause oder einen Account bei einem Mail-Anbieter, der auch abweichende Absender zulässt.

Dann einfach in /etc/ssmtp die Datei ssmtp.conf anpassen und

mailhub=deinsmtpserver hostname=pihole AuthUser=dein user bei dem smtpserver AutPass=dein Passwort bei dem smtpserver

ausfüllen

und in der revaliases sagen welcher lokale Benutzer mit welcher absender-Mail schreiben soll und wohin. root:your_login@your.domain:mailhub.your.domain[:port]

BulldozerPete commented 4 years ago

Kann ich das auch ohne die Mailfunktion nutzen?

AleksCee commented 4 years ago

Ja du könntest die letzte Zeile von ) | tee /home/pi/pihole_update.log | mail -s "Pi-hole Update" deine@mail-Adresse.de Ändern in ) > /home/pi/pihole_update.log

Dann kannst du das Ergebnis manuell in der logdatei prüfen, bekommst aber such keine Mail.

BulldozerPete commented 4 years ago

@AleksCee wenn ich nach der Änderung jetzt ./pihole_updater ausführe passiert nichts. Nach einiger Zeit taucht die grüne Zeile pi@raspberrypi wieder auf.

Da ich keine Info bekomme, gehe ich davon aus, dass alles funktioniert.

AleksCee commented 4 years ago

Ja weil er dann alles nur ins log schreibt. Mach mal cat pihole_update.log Da steht das drin, was sonst per Mail kommen würde.

BulldozerPete commented 4 years ago

Unter

[✓] Consolidating blocklists
  [✓] Extracting domains from blocklists
  [i] Number of domains being pulled in by gravity: 6330574
  [✓] Removing duplicate domains
  [i] Number of unique domains trapped in the Event Horizon: 5189382
  [i] Number of whitelisted domains: 14
  [i] Number of blacklisted domains: 0
  [i] Number of regex filters: 22
  [✓] Parsing domains into hosts format
  [✓] Cleaning up stray matter

  [✓] DNS service is running
  [✓] Pi-hole blocking is Enabled

steht:

Neue Eintraege: 50
Geloeschte Eintraege: 318
Geaenderte Eintraege: 368 /home/pi/gravity_diff/diff_20200418_1601

Läuft also. Top @AleksCee !

AleksCee commented 4 years ago

Im log von Sonntag sollte dann auch stehen ob der pi neue Linux Pakete Updates möchte.

BulldozerPete commented 4 years ago

Nächster Schritt: Das Skript von @H4ckZ aus #235 einbinden. Wie mache ich das?

BulldozerPete commented 4 years ago

Was bedeutet eigentlich der erste Teil Deines Skripts?

(
if test $(date "+%w") -eq 0;then
   sudo apt-get update
   sudo apt-get upgrade --simulate
   pihole -up
   echo ''

Ich nutze immer sudo apt-get update -y && sudo apt-get upgrade -y && sudo apt-get dist-upgrade -y && sudo apt-get autoremove -y && sudo apt-get autoclean -y zum aktualiseren des raspberrys und danach pihole -up Kann ich diese Zeilen in Deinem Skrip ändern oder ist das nur ein Test?

AleksCee commented 4 years ago

Ja der Teil holt sich nur die neuen Pakete und mach dann eine Update Simulation... dann schreibt es nur raus was passieren würde. Es kann gefährlich sein Pakete unbeaufsichtigt upzudaten. Manchmal sind händische Eingriffe notwendig.... daher will ich nur ne Info bekommen, dass was zutun ist.

Die Zeile mit dem if prüft nur ob der Tag der Woche Sonntag ist, damit es nur einmal die Woche läuft. Wenn dich das interessiert, vielleicht mal nach bash Dokus gucken. Das ist recht mächtig was man damit alles machen kann.

BulldozerPete commented 4 years ago

Okay danke. Naja wenn der täglich die neuen Listen zieht, dann kann der Pi auch mal schauen ob es ein Update gibt.

Dann müsste ich nur if test $(date "+%w") -eq 0;then entfernen?

AleksCee commented 4 years ago

Nächster Schritt: Das Skript von @H4ckZ aus #235 einbinden. Wie mache ich das?

Man könnte das Script in meinen einbinden nach dem if Block also zwischen fi und copy. Muss dann aber bei dem das pihole -q rausnehmen sonst klappt das mit dem zählen nicht mehr. Außerdem sollte dir bewusst sein, dass der die Listen NUR von hier und alle einbindet. Das heißt jede manuelle Änderung an den Listen gehen verloren wenn das läuft.

BulldozerPete commented 4 years ago

Ich weiß, deswegen möchte ich ja die Sammlung der Blocklisten erweitern.

ghost commented 4 years ago

Hallo,

also, für die Oma habe mich mal an ein Script gesetzt, herausgekommen ist folgendes Updatescript für Raspberry Pakete, Pi-hole selbst und der Pi-hole Gravity. Mit oder ohne Mailversand eines Abschlussberichtes, je nachdem ob man beim Aufruf eine Mailadresse angibt oder nicht:

Aufruf:

sudo ./updatePihole.sh rootoma@seniorenstift.xy <-- mit Mailversand
sudo ./updatePihole.sh

Abschlussbericht der via Mail versendet wird oder nach einem Lauf unter /var/log/svpihole/updatePihole.stats.log zu finden ist:

Pi-hole Gravity Update Bericht: 2020.04.18-203035

# Pi-hole Gesundheitsstatus #

Reboot erforderlich: NEIN #1
Internetverbindung (OK? #Exitcode): JA #0
DNS Test (OK? #Exitcode): JA #0
Pi-hole Update (OK? #Exitcode): UNDEFINIERT #-1
Pi-hole Gravity (OK? #Exitcode): JA #0

# Pi-hole Statistik #

Domains Gravitylist: 1737566
Domains Blacklist: 0
RegEx-Filter Blacklist: 2
Domains Whitelist: 15

Anzahl Blocklisten: 68

# Pi-hole Gravity Updatestatistik #

(+): 4 hinzugefuegte Domains
(-): 0 geloeschte Domains
(S): 4 insgesamt geaenderte Domains

(+) Hinzugefuegte Domains (Top 50):
< hosting2070987.online.pro
< info-24.cloud
< www.hosting2070987.online.pro
< www.info-24.cloud

(-) Geloeschte Domains (Top 50):

Log-Ausgabe: /var/log/svpihole/updatePihole.sh.log

[2020.04.18-20:28:31] [I] Start | Logfile: /var/log/svpihole/updatePihole.sh.log
[2020.04.18-20:28:31] [I] Initialisiere Tempverzeichnis /tmp/svpihole ...
[2020.04.18-20:28:31] [I] Teste Internetverbindung ...
[2020.04.18-20:28:31] [I] Internetverbindungstest erfolgreich.
[2020.04.18-20:28:31] [I] Teste DNS Namensaufloesung ...
[2020.04.18-20:28:31] [I] DNS Namensaufloesung erfolgreich.
[2020.04.18-20:28:31] [I] Aktualisiere Pi-hole Gravity /etc/pihole/gravity.list ...
[2020.04.18-20:30:10] [I] Pi-hole Gravity Update exitcode: 0
[2020.04.18-20:30:10] [I] Teste DNS Namensaufloesung ...
[2020.04.18-20:30:20] [I] DNS Namensaufloesung erfolgreich.
[2020.04.18-20:30:20] [I] Erstelle Aenderungs-Gravityliste /tmp/svpihole/gravity_diff.list ...
[2020.04.18-20:30:35] [I] Aenderungs-Gravityliste mit 4 Eintraegen erstellt.
[2020.04.18-20:30:35] [I] Erstelle PiHole Gravity Update Bericht/Statistik 2020.04.18-203035 ...
[2020.04.18-20:30:35] [I] Pi-hole Gravity Update Bericht/Statistik /var/log/svpihole/updatePihole.stats.log erstellt.
[2020.04.18-20:30:35] [I] E-Mail Pi-hole Gravity Update Bericht 2020.04.18-203035 wird an pihole@oma.xy versendet ...
[2020.04.18-20:30:37] [I] E-Mailversand an pihole@oma.xy erfolgreich.
[2020.04.18-20:30:37] [I] Ende | Logfile: /var/log/svpihole/updatePihole.sh.log

Script updatePihole.sh:


#!/bin/bash

# Script: updatePihole.sh
# Version: 1.0.0 - initial [Zelo72]

# Aufrufparameter: optional E-Mailadresse, wird diese uebergeben, wird ein Abschlussbericht via Mail verschickt.
#                  Aufruf: sudo ./updatePihole.sh rootoma@seniorenstift.xy <-- mit Mailversand
#                          sudo ./updatePihole.sh                       <-- ohne Mailversand

# Prüfen ob das Script als root ausgefuehrt wird
if [ "$(id -u)" != "0" ]; then
   echo "Das Script muss mit Rootrechten ausgeführt werden!"
   exit 1
fi

# *** Initialisierung ***

# Logging initialisieren
logDir=/var/log/svpihole
log=$logDir/updatePihole.sh.log
mkdir -p $logDir

# Hilfsfunktion zum loggen
writeLog() {
   echo -e "[$(date +'%Y.%m.%d-%H:%M:%S')]" "$*" | tee -a $log
}
writeLog "[I] Start | Logfile: $log"

# Tempverzeichnis initialisieren
tmp=/tmp/svpihole
writeLog "[I] Initialisiere Tempverzeichnis $tmp ..."
mkdir -p $tmp
cd $tmp || exit

# Variablen fuer Dateien
piholeDir=/etc/pihole
gravListPihole=$piholeDir/gravity.list
gravListBeforeUpdate=$tmp/gravity_before_update.list
gravListDiff=$tmp/gravity_diff.list
logStats=$logDir/updatePihole.stats.log

# Variablen fuer "Gesundheitsstatus": -1: Undefiniert / 0: true / >0: false
piholeUpdateOK=-1
piholeGravUpdateOK=-1
dnsTestOK=-1
inetTestOK=-1
rebootRequired=1

# *** Hilfsfunktionen ***

delimiter() {
   echo ""
}

status() {
   case "$*" in
   -1)
      echo "UNDEFINIERT #$*"
      ;;
   0)
      echo "JA #$*"
      ;;
   1 | *)
      echo "NEIN #$*"
      ;;
   esac
}

# Internetverbindung testen
checkinet() {
   writeLog "[I] Teste Internetverbindung ..."
   if ! (ping -c1 8.8.8.8 >/dev/null); then
      writeLog "[E] Keine Internetverbindung! Das Script wird beendet!"
      inetTestOK=1
      exit 1
   fi
   writeLog "[I] Internetverbindungstest erfolgreich."
   inetTestOK=0
   return 0
}

# DNS-Namensaufloesung testen
checkdns() {
   writeLog "[I] Teste DNS Namensaufloesung ..."
   if ! (ping -c1 google.de >/dev/null); then
      writeLog "[E] Keine DNS Namensaufloesung moeglich!"
      dnsTestOK=1
      return 1
   fi
   writeLog "[I] DNS Namensaufloesung erfolgreich."
   dnsTestOK=0
   return 0
}

# *** Pi-hole Update ***

# Internetverbindung / DNS testen
checkinet # besteht keine Internetverbindung wird das Script mit exitcode 1 beendet
checkdns
delimiter

# Nur Sonntags, die Raspberry Pakete und den Pi-hole selbst updaten.
if test "$(date "+%w")" -eq 0; then # Sonntags?
   # Raspberry Pakete updaten
   writeLog "[I] Raspberry Pakete updaten ..."
   apt-get update
   apt-get -y upgrade
   delimiter

   # Raspberry Pakete bereinigen
   writeLog "[I] Raspberry Pakete bereinigen ..."
   apt-get -y autoremove
   apt-get -y clean
   delimiter

   # Pi-hole updaten
   writeLog "[I] Pi-hole updaten ..."
   pihole -up
   piholeUpdateOK=$?
   writeLog "[I] Pi-hole Update exitcode: $piholeUpdateOK"
   delimiter

   # Pruefen ob durch die Updates ein Reboot erforderlich ist
   writeLog "[I] Pruefe ob ein Reboot erforderlich ist ..."
   if [ -f /var/run/reboot-required ]; then
      writeLog "[W] REBOOT nach Update erforderlich!"
      echo "*************************"
      echo "R E B O O T erforderlich!"
      echo "*************************"
      rebootRequired=0
   fi
   delimiter
fi

# *** Pi-hole Gravity Update ***

# AKtuelle Gravity Liste vom Pi-hole zwischenspeichern und
# Pi-hole Gravity aktualisieren
writeLog "[I] Aktualisiere Pi-hole Gravity $gravListPihole ..."
cp $gravListPihole $gravListBeforeUpdate
pihole -g # Pi-hole Gravity aktualisieren
piholeGravUpdateOK=$?
writeLog "[I] Pi-hole Gravity Update exitcode: $piholeGravUpdateOK"
delimiter

# DNS nach Gravity Update testen
checkdns
delimiter

# Aktualisierte Pi-hole Gravityliste mit Gravityliste vor der Aktualisierung
# vergleichen und Aenderungen (hinzugefuegte/geloeschte Eintraege) in
# $gravListDiff Datei zur weiteren Auswertung speichern
writeLog "[I] Erstelle Aenderungs-Gravityliste $gravListDiff ..."
diff $gravListPihole $gravListBeforeUpdate | grep '[><]' >$gravListDiff
writeLog "[I] Aenderungs-Gravityliste mit $(wc <$gravListDiff -l) Eintraegen erstellt."
delimiter
delimiter

# *** Pi-hole Gravity Update Bericht/Statistik ***

# Id für Pi-hole Gravity Update Bericht erzeugen
id=$(date +"%Y.%m.%d-%H%M%S")

# Gravity Update Bericht erzeugen und in die unter $logStats angegebene Datei schreiben.
writeLog "[I] Erstelle PiHole Gravity Update Bericht/Statistik $id ..."
delimiter
(
   echo "Pi-hole Gravity Update Bericht: $id"
   echo ""
   echo "# Pi-hole Gesundheitsstatus #"
   echo ""
   echo "Reboot erforderlich: $(status $rebootRequired)"
   echo "Internetverbindung (OK? #Exitcode): $(status $inetTestOK)"
   echo "DNS Test (OK? #Exitcode): $(status $dnsTestOK)"
   echo "Pi-hole Update (OK? #Exitcode): $(status $piholeUpdateOK)"
   echo "Pi-hole Gravity (OK? #Exitcode): $(status $piholeGravUpdateOK)"
   echo ""
   echo "# Pi-hole Statistik #"
   echo ""
   echo "Domains Gravitylist: $(wc <$gravListPihole -l)"
   echo "Domains Blacklist: $(wc <${piholeDir}/blacklist.txt -l)"
   echo "RegEx-Filter Blacklist: $(wc <${piholeDir}/regex.list -l)"
   echo "Domains Whitelist: $(wc <${piholeDir}/whitelist.txt -l)"
   echo ""
   echo "Anzahl Blocklisten: $(wc <${piholeDir}/adlists.list -l)"
   echo ""
   echo "# Pi-hole Gravity Updatestatistik #"
   echo ""
   echo "(+): $(grep -c '<' $gravListDiff) hinzugefuegte Domains"
   echo "(-): $(grep -c '>' $gravListDiff) geloeschte Domains"
   echo "(S): $(wc <$gravListDiff -l) insgesamt geaenderte Domains"
   echo ""
   echo "(+) Hinzugefuegte Domains (Top 50):"
   grep -m50 '<' $gravListDiff
   echo ""
   echo "(-) Geloeschte Domains (Top 50):"
   grep -m50 '>' $gravListDiff
) | tee $logStats #Ausgaben innerhalb von () in die $logStats Datei schreiben
writeLog "[I] Pi-hole Gravity Update Bericht/Statistik $logStats erstellt."
delimiter

# *** E-Mail Versand des Update Berichtes ***

# Aufrufparameter 1
email="$1"

# Mail mit Gravity Update Bericht wird nur versendet wenn beim Aufruf des Scriptes eine
# Mailadresse mit uebergeben wurde!
if [ -n "$email" ]; then
   writeLog "[I] E-Mail Pi-hole Gravity Update Bericht $id wird an $email versendet ..."
   mail <$logStats -s "Pi-hole Gravity Update Bericht $id" "$email"

   # Pruefen ob der E-Mailversand fehlgeschlagen ist
   if [ $? -ne 0 ]; then
      writeLog "[E] E-Mailversand an $email fehlgeschlagen!"
   else
      writeLog "[I] E-Mailversand an $email erfolgreich."
   fi
   delimiter
fi
writeLog "[I] Ende | Logfile: $log"

Das Script läuft bei mir täglich um 02:00 Uhr als cron.

Gruß, Gerd

BulldozerPete commented 4 years ago

@Zelo72 Danke Gerd! Finde ich super wie Du und @AleksCee mich hier unterstützen!

Lädst Du Dein Skript mit Anleitung ins /dev mal hoch? Ich probiere das dann mal aus und gebe Feedback. Da bin ich bestimmt nicht der einzige.

ghost commented 4 years ago

Kein Problem, ich hatte Zeit @BulldozerPete :) Ich habe versucht das Script so gut wie möglich zu kommentieren.

PullRequest ist raus ...

BulldozerPete commented 4 years ago

Wie lautet der Befehl das Skript auf den Pi per Konsole zu laden? Oder erstelle ich einfach mit nano /updatePihole.sh das Skript?

Wie kann ich das Update Intervall ändern? Das sollte ja diese Zeile sein: if test "$(date "+%w")" -eq 0; then # Sonntags? auf täglich 06:00 Uhr?

Oder wird gravity jeden Tag aber der pi + pi hole nur am Sonntag aktualisiert?

Wenn das Skript mit rootrechten ausgeführt wird, dann muss das auch in den crontab.e?

ghost commented 4 years ago

Also du kannst dir das Script einfach mit nano /home/pi/updatePihole.sh erstellen und dann das Script aus dem Beitrag rein kopieren. Danach mit chmod +x /home/pi/updatePihole.sh das Script ausführbar machen.

Aufruf über sudo ./updatePihole.sh oder mit Mailversand sudo ./updatePihole.sh rootoma@abcd.xy.

Um das Script täglich um xx:xx Uhr laufen zu lassen musst du einen cron job erstellen. Dabei wird die Gravity zum cron Zeitpunkt geupdated und zusätzlich jeden Sonntag die Raspberry Pakete und Co aktualisiert (also das was innerhalb des if test ... ist).

Für den cron kopierst du dir das Script am besten nach /root/, also sudo cp /home/pi/updatePihole.sh /root. Falls du das Script vorher noch nicht ausführbar gemacht hast, dann noch chmod +x /root/updatePihole.sh aufrufen.

Jetzt mit sudo crontab -e einen cron job erstellen und unten folgende Zeile einfügen um den job täglich um 06:00 Uhr laufen zu lassen:

0 6 * * * /root/updatePihole.sh >/dev/null 2>&1

Datei speichern und schließen. Fertig.

BulldozerPete commented 4 years ago

Ich installiere das morgen mal und schreibe dann eine Anleitung. Ich werde Dich als Ersteller nennen, ok?

AleksCee commented 4 years ago

@Zelo72 zwei Anmerkungen: das wc -l auf die adlists.list zählt auch die leerzeilen und die auskommentierten listen mit. Ein grep -Evc '^#|^$' adlists.list wäre besser, denke ich. Das Filter alle Zeilen die mit # anfangen oder leer sind raus.

Und zu dem Top 50 Domains. Das hatte ich am Anfang auch mal, da ist dann leider nur immer der Mail-Spam-Filter bei strato drauf angesprungen und hat die Mail nicht durchgeleitet wegen UglyURLs oder verbracht auf phishing.

ghost commented 4 years ago

@BulldozerPete Brauchst mich aber nicht nennen. Werde aber auch noch eine Beschreibung oben im Script hinterlegen. Bin aber noch nicht dazu gekommen.

@AleksCee Danke, werde ich anpassen, habe ich nicht drüber nachgedacht. Der GMX-Spamfilter hat auch schon dicke Backen bekommen wegen den Domains in der Mail. Ich glaube ich nehme die raus ... ^^

BulldozerPete commented 4 years ago

Okay Ich gebe Dir dann Feedback zu Deinen Anleitungen.

Finde ich im übrigen super, dass der Code schon vor dem merge in das Repository gereviewed wird! Dann kommt bestimmt bald Version 1.1

ghost commented 4 years ago

Ist angepasst @AleksCee, habe noch ein paar andere Kleinigkeiten bereinigt:

1.0.1 - [Zelo72/AleksCee]

AleksCee commented 4 years ago

@Zelo72 sieht cool aus. Habe es auch gleich mal übernommen und meine Version ersetzt. Hinter dem DNS Check nach dem Update habe ich noch nen sleep reingenommen, da ich festgestellt habe, dass sofort nach dem restart des DNS die Anfragen nicht immer sofort gehen.

Und da ich gerne sehe was der Paketdienst macht (wenn er schon komplett automatisch läuf) im cron auch nicht nach dev/null umgeleitet, um die Ausgaben komplett zu bekommen.

BulldozerPete commented 4 years ago

@Zelo72 Ich bin gerade dabei den Mailversand nach Deiner Anleitung einzurichten.

Irgendwas scheine ich aber falsch zu machen:

msmtp: /home/pi/.msmtprc: line 15: account oma@zuhause.de not (yet) defined
mail: Sending data to /usr/bin/msmtp -t failed: Process exited with a non-zero status
mail: cannot send message: Process exited with a non-zero status
BulldozerPete commented 4 years ago

@Zelo72 Das Skript läuft bei mir!

[2020.04.19-18:52:40] [I] Pi-hole Gravity Update exitcode: 0
[2020.04.19-18:52:40] [I] Teste DNS Namensaufloesung ...
ping: google.de: Temporary failure in name resolution
[2020.04.19-18:52:50] [E] Keine DNS Namensaufloesung moeglich!
[2020.04.19-18:52:50] [I] Erstelle Aenderungs-Gravityliste /tmp/svpihole/gravity_diff.list ...
[2020.04.19-18:53:04] [I] Aenderungs-Gravityliste mit 1672 Eintraegen erstellt.
[2020.04.19-18:53:05] [I] Erstelle PiHole Gravity Update Bericht/Statistik 2020.04.19-185305 ...
Pi-hole Gravity Update Bericht: 2020.04.19-185305

# Pi-hole Gesundheitsstatus #

Reboot erforderlich: NEIN
Internetverbindung: OK
DNS Test: FEHLER #Exitcode:1
Pi-hole Update: OK
Pi-hole Gravity Update: OK

# Pi-hole Statistik #

Domains Gravitylist: 5190008
Domains Blacklist: 0
RegEx-Filter Blacklist: 22
Domains Whitelist: 15

Anzahl Blocklisten: 61

# Pi-hole Gravity Updatestatistik #

(+): 924 hinzugefuegte Domains
(-): 748 geloeschte Domains
(S): 1672 insgesamt geaenderte Domains
[2020.04.19-18:53:10] [I] Pi-hole Gravity Update Bericht/Statistik /var/log/svpihole/updatePihole.stats.log erstellt.
[2020.04.19-18:53:10] [I] Ende | Logfile: /var/log/svpihole/20200419_updatePihole.sh.log

Den DNS-Fehler verstehe ich aber nicht. Habe Unbound installiert. Hängt das damit zusammen?

AleksCee commented 4 years ago

Du hast den Script mit dem Parameter aufgerufen, dass er eine Mail schrieben soll, ich dachte du wollest das nicht? Und wenn dann musst du eine gültige Adresse nutzen, ich denke oma@zuhause.de wird nicht deine Adresse sein?

Zu dem DNS. Das ist ja mein Einwand oben gewesen. Vor dem zweiten Test noch ein sleep 30 rein, weil DNS nicht sofort wieder läuft nach dem Start. Der muss sich erst „zurecht ruckeln“. Also vor dem zweiten dnscheck einfach ein sleep 30 schreiben.

BulldozerPete commented 4 years ago

Wollte das mal ausprobieren. oma@zuhause.de ist natürlich nicht meine richtige Mailadresse.

AleksCee commented 4 years ago

Ist denn in deiner msmtprc der Account und der default account die selber Adresse?

BulldozerPete commented 4 years ago

Ja. Jetzt suche ich die Zeile für den zweiten checkdsn. Zeile 107?

AleksCee commented 4 years ago

Der Fehler sagt aber was anderes. :-) evtl. ein Tippfehler?

BulldozerPete commented 4 years ago

Da waren tatsächlich Schreibfehler.

Jetzt erhalte ich folgende Meldung:

echo "Inhalt der E-Mail" | mail -s "Betreff" oma@zuhause.de
msmtp: authentication failed (method PLAIN)
msmtp: server message: 535-5.7.8 Username and Password not accepted. Learn more at
msmtp: server message: 535 5.7.8  https://support.google.com/mail/?p=BadCredentials l4sm11955971wrw.25 - gsmtp
msmtp: could not send mail (account default from /home/pi/.msmtprc)
AleksCee commented 4 years ago

Da steht jetzt User oder Passwort falsch, ist da auch ein Tippfehler drin? Oder nutzt du bei Google zwei Wege Authentifizierung? Dann musst du dir ein extra App-Passwort für den Account erstellen. Steht aber auch alles bei dem Link der oben in deinem Fehler angegeben wurde: https://support.google.com/mail/?p=BadCredentials

BulldozerPete commented 4 years ago

Passwort ist in beiden Dateien korrekt. Und eine zwei Faktor-Authentifizierung nutze ich nicht.

AleksCee commented 4 years ago

Gut, der Fehler ist aber sehr eindeutig, da wird dir wohl niemand groß helfen können ohne die Konfiguration zu sehen und somit auch das Passwort, wenn du sagst das es richtig ist, Google aber sagt das es falsch ist.

BulldozerPete commented 4 years ago

Ich habe mal den Zugriff von "weniger sicheren Apps" erlaubt und teste das mal. Funktioniert auch nicht.

Ich glaube ich habe es gefunden: cannot log to /var/log/msmtp/msmtp.log: cannot open: No such file or directory

ghost commented 4 years ago

Ich glaube ich habe es gefunden: cannot log to /var/log/msmtp/msmtp.log: cannot open: No such file or directory

Systemweit (root): sudo nano /etc/msmtprc

Benutzerdefiniert (pi): nano ~/.msmtprc

Lösche mal logfile aus beiden Konfigurationen: logfile /var/log/msmtp/msmtp.log

ghost commented 4 years ago

@Zelo72 sieht cool aus. Habe es auch gleich mal übernommen und meine Version ersetzt. Hinter dem DNS Check nach dem Update habe ich noch nen sleep reingenommen, da ich festgestellt habe, dass sofort nach dem restart des DNS die Anfragen nicht immer sofort gehen.

Und da ich gerne sehe was der Paketdienst macht (wenn er schon komplett automatisch läuf) im cron auch nicht nach dev/null umgeleitet, um die Ausgaben komplett zu bekommen.

Hallo Alex, habe in meiner lokalen Version einen sleep 30 eingebaut und falls der DNS danach nicht reagiert, haue ich ihm noch mal ein pihole restartdns um die Ohren. Des Weiteren habe ich, wenn das Script als Cron läuft beim pihole Befehl ein exitcode 127 (findet pihole nicht), führe ich das Teil als root in der Console aus findet er pihole. Bin ich dumm? Sehr seltsam ...