Closed BulldozerPete closed 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
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
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?
Was soll die Zeile "getent hosts nas.fritz.box" bedeuten? Meine Oma hat keine FritzBox.
Ich fasse zusammen:
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.
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.
Wie rufe ich einen Test auf?
./pihole_updater
Der Test wirft einen Fehler: ./pihole_updater: line 19: mail: command not found
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
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:
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 :)
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]
Kann ich das auch ohne die Mailfunktion nutzen?
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.
@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.
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.
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 !
Im log von Sonntag sollte dann auch stehen ob der pi neue Linux Pakete Updates möchte.
Nächster Schritt: Das Skript von @H4ckZ aus #235 einbinden. Wie mache ich das?
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?
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.
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?
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.
Ich weiß, deswegen möchte ich ja die Sammlung der Blocklisten erweitern.
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
@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.
Kein Problem, ich hatte Zeit @BulldozerPete :) Ich habe versucht das Script so gut wie möglich zu kommentieren.
PullRequest ist raus ...
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?
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.
Ich installiere das morgen mal und schreibe dann eine Anleitung. Ich werde Dich als Ersteller nennen, ok?
@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.
@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 ... ^^
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
Ist angepasst @AleksCee, habe noch ein paar andere Kleinigkeiten bereinigt:
1.0.1 - [Zelo72/AleksCee]
@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.
@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
@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?
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.
Wollte das mal ausprobieren. oma@zuhause.de ist natürlich nicht meine richtige Mailadresse.
Ist denn in deiner msmtprc der Account und der default account die selber Adresse?
Ja. Jetzt suche ich die Zeile für den zweiten checkdsn. Zeile 107?
Der Fehler sagt aber was anderes. :-) evtl. ein Tippfehler?
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)
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
Passwort ist in beiden Dateien korrekt. Und eine zwei Faktor-Authentifizierung nutze ich nicht.
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.
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
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
@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 ...
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