{"id":85,"date":"2024-08-29T10:00:00","date_gmt":"2024-08-29T10:00:00","guid":{"rendered":"https:\/\/netguide.io\/network\/pi-hole-whitelist-eintraege-hinzufuegen-ohne-admin-zugang\/"},"modified":"2026-08-14T19:26:19","modified_gmt":"2026-08-14T19:26:19","slug":"pi-hole-whitelist-eintraege-hinzufuegen-ohne-admin-zugang","status":"publish","type":"post","link":"https:\/\/netguide.io\/network\/de\/pi-hole-whitelist-eintraege-hinzufuegen-ohne-admin-zugang\/","title":{"rendered":"Pi-hole Whitelist-Eintr\u00e4ge hinzuf\u00fcgen ohne Admin-Zugang"},"content":{"rendered":"<div id=\"netgu-1003169287\" class=\"netgu-before-content netgu-entity-placement\"><script async src=\"\/\/pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js?client=ca-pub-6258556257245998\" crossorigin=\"anonymous\"><\/script><ins class=\"adsbygoogle\" style=\"display:block;\" data-ad-client=\"ca-pub-6258556257245998\" \ndata-ad-slot=\"3494115342\" \ndata-ad-format=\"auto\"><\/ins>\n<script> \n(adsbygoogle = window.adsbygoogle || []).push({}); \n<\/script>\n<\/div>\n<p class=\"wp-block-paragraph\">Wer <strong>Pi-hole Whitelist-Eintr\u00e4ge hinzuf\u00fcgen<\/strong> m\u00f6chte, ohne jedes Mal den Admin zu bem\u00fchen, steht vor einem typischen Problem im Familiennetzwerk: Blockiert Pi-hole eine harmlose Domain, kann nur die Person mit Admin-Zugang zur Weboberfl\u00e4che sie freigeben. In diesem Guide zeigen wir dir, wie du mit dem quelloffenen Projekt \u201ePihole Simple Whitelist&#8221; eine schlanke Weboberfl\u00e4che einrichtest, \u00fcber die auch Mitbewohner und Familienmitglieder eine Domain selbst freischalten k\u00f6nnen &ndash; ganz ohne Zugriff auf das eigentliche Pi-hole-Adminpanel.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Pi-hole<\/strong> ist ein netzwerkweiter Werbeblocker, der als DNS-Sinkhole arbeitet und Werbung sowie Tracker f\u00fcr alle Ger\u00e4te im Netzwerk blockiert. L\u00e4uft der Blocker auf einem Raspberry Pi oder einem anderen Linux-Server, filtert er den DNS-Verkehr zentral. Wie du Pi-hole von Grund auf aufsetzt, erkl\u00e4ren wir im Guide <a href=\"\/network\/de\/pi-hole-installieren-dns-werbeblocker\/\">Pi-hole installieren: DNS-Werbeblocker einrichten<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Das Problem: False-Positives im Haushalt<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Mit den offiziellen Blocklisten treten nur selten Fehlblockaden (False-Positives) auf. Sobald du aber zus\u00e4tzliche, aggressivere Blocklisten einbindest, kann es schnell passieren, dass einzelne Webseiten nicht mehr richtig laden oder komplett unerreichbar sind. Als Pi-hole-Admin ist die Domain zwar in wenigen Sekunden auf die Whitelist gesetzt &ndash; alle anderen im Haushalt m\u00fcssen jedoch warten, bis du dich darum k\u00fcmmerst. Genau hier setzt eine simple Self-Service-L\u00f6sung an.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Die L\u00f6sung: Pi-hole Simple Whitelist<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Pihole Simple Whitelist ist ein kleines Open-Source-Projekt von <a href=\"https:\/\/github.com\/zigzag1001\/pihole-Simple-Whitelist?tab=readme-ov-file\" target=\"_blank\" rel=\"noopener\">zigzag1001 auf GitHub<\/a>. Es stellt eine minimalistische Weboberfl\u00e4che bereit, \u00fcber die jede Person im Netzwerk eine Domain auf die Whitelist setzen kann, ohne Zugang zum Pi-hole-Adminbereich zu ben\u00f6tigen. Zus\u00e4tzlich l\u00e4sst sich das Blocking optional f\u00fcr einige Minuten pausieren.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"581\" src=\"https:\/\/netguide.io\/network\/wp-content\/uploads\/sites\/10\/2026\/08\/Pihole-Simple-Whitelist-1024x581-1.png\" alt=\"Weboberfl\u00e4che von Pihole Simple Whitelist zum Freigeben von Domains\" class=\"wp-image-147\" srcset=\"https:\/\/netguide.io\/network\/wp-content\/uploads\/sites\/10\/2026\/08\/Pihole-Simple-Whitelist-1024x581-1.png 1024w, https:\/\/netguide.io\/network\/wp-content\/uploads\/sites\/10\/2026\/08\/Pihole-Simple-Whitelist-1024x581-1-300x170.png 300w, https:\/\/netguide.io\/network\/wp-content\/uploads\/sites\/10\/2026\/08\/Pihole-Simple-Whitelist-1024x581-1-768x436.png 768w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Bild: <a href=\"https:\/\/github.com\/zigzag1001\/pihole-Simple-Whitelist?tab=readme-ov-file\" target=\"_blank\" rel=\"noopener\">Github.com\/zigzag1001<\/a><\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Pi-hole Simple Whitelist installieren<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Die Installation erfolgt direkt auf dem Server, auf dem Pi-hole l\u00e4uft. \u00d6ffne dazu eine SSH-Verbindung oder ein Terminal und folge den Schritten. Zuerst wechselst du in eine Root-Shell:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"sudo su\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color: #24292e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #B392F0\">sudo<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">su<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Wechsle anschlie\u00dfend in das Webverzeichnis deines Servers:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"cd \/var\/www\/html\/\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color: #24292e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #79B8FF\">cd<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">\/var\/www\/html\/<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Lege einen Ordner f\u00fcr die Whitelist-Anwendung an und wechsle hinein:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"mkdir whitelist\ncd whitelist\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color: #24292e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #B392F0\">mkdir<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">whitelist<\/span><\/span>\n<span class=\"line\"><span style=\"color: #79B8FF\">cd<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">whitelist<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Lade nun die drei ben\u00f6tigten Dateien des Projekts direkt aus dem GitHub-Repository herunter:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"curl -O https:\/\/raw.githubusercontent.com\/zigzag1001\/pihole-Simple-Whitelist\/main\/whitelist-add.php \\\n     -O https:\/\/raw.githubusercontent.com\/zigzag1001\/pihole-Simple-Whitelist\/main\/style.css \\\n     -O https:\/\/raw.githubusercontent.com\/zigzag1001\/pihole-Simple-Whitelist\/main\/index.html\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color: #24292e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #B392F0\">curl<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">-O<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">https:\/\/raw.githubusercontent.com\/zigzag1001\/pihole-Simple-Whitelist\/main\/whitelist-add.php<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">\\<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">     <\/span><span style=\"color: #79B8FF\">-O<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">https:\/\/raw.githubusercontent.com\/zigzag1001\/pihole-Simple-Whitelist\/main\/style.css<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">\\<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">     <\/span><span style=\"color: #79B8FF\">-O<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">https:\/\/raw.githubusercontent.com\/zigzag1001\/pihole-Simple-Whitelist\/main\/index.html<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Passwort-Hash ermitteln<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Damit das optionale Pausieren des Blockings funktioniert, ben\u00f6tigt das Skript den Hash deines Pi-hole-Webinterface-Passworts. Diesen liest du so aus:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"cat \/etc\/pihole\/setupVars.conf | grep WEBPASSWORD\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color: #24292e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #B392F0\">cat<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">\/etc\/pihole\/setupVars.conf<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">|<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">grep<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">WEBPASSWORD<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u00d6ffne danach die Datei <code>whitelist-add.php<\/code> im Editor und trage den ermittelten Hash bei der Variable <code>$auth<\/code> ein (im Original in Zeile 16):<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"nano whitelist-add.php\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color: #24292e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #B392F0\">nano<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">whitelist-add.php<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Speichern mit <strong>STRG + O<\/strong>, schlie\u00dfen mit <strong>STRG + X<\/strong>. Danach erreichst du die Oberfl\u00e4che im Browser unter <code>http:\/\/pi.hole\/whitelist\/<\/code> &ndash; und jeder im Netzwerk kann Domains selbst freigeben.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">So funktioniert das Whitelist-Skript<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Das Herzst\u00fcck ist die Datei <code>whitelist-add.php<\/code>. Sie nimmt POST-Anfragen der Weboberfl\u00e4che entgegen und ruft im Hintergrund die Pi-hole-Kommandozeile auf. Je nach Aktion listet sie bereits freigegebene Domains, pausiert das Blocking oder setzt eine neue Domain auf die Whitelist. Vor dem Whitelisting pr\u00fcft ein regul\u00e4rer Ausdruck, ob die Eingabe \u00fcberhaupt wie eine g\u00fcltige Domain aussieht:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"&lt;?php\nif ($_SERVER['REQUEST_METHOD'] == 'POST') {\n    if (isset($_POST['action']) &amp;&amp; $_POST['action'] === 'list') {\n        \/\/ List whitelisted domains\n        $command = &quot;sudo pihole -w -l | awk '{print $1, $2}'&quot;;\n\n        $output = [];\n        exec\u200b(&quot;$command 2&gt;&amp;1&quot;, $output);\n\n        echo &quot;&lt;pre&gt;&quot; . implode(&quot;\\n&quot;, $output) . &quot;&lt;\/pre&gt;&quot;;\n    } elseif (isset($_POST['action']) &amp;&amp; $_POST['action'] === 'disable') {\n        \/\/ https:\/\/www.crosstalksolutions.com\/the-worlds-greatest-pi-hole-and-unbound-tutorial-2023\/\n\n        $XMin = 5; \/\/ Minutes to disable blocking\n        $XSec = $XMin * 60;\n        $auth = &quot;YOUR_PASSWORD_HASH&quot;; \/\/ `cat \/etc\/pihole\/setupVars.conf | grep WEBPASSWORD`\n\n        $command = &quot;curl -s \\&quot;http:\/\/localhost\/admin\/api.php?disable={$XSec}&amp;auth={$auth}\\&quot;&quot;;\n\n        $output = [];\n        $returnVar = 0;\n        exec\u200b(&quot;$command 2&gt;&amp;1&quot;, $output, $returnVar);\n\n        if ($returnVar === 0) {\n            echo &quot;Disabled blocking for $XMin minutes. &quot;. implode(' ', $output);\n            $t=time();\n            $d=date(&quot;M-d H:i e&quot;,$t);\n            error_log(&quot;Disabled by {$_SERVER['REMOTE_ADDR']} - {$d}\\n&quot;, 3, &quot;\/var\/log\/pihole_disabled.log&quot;);\n        } else {\n            echo &quot;Failed. Blocking not disabled. Output: &quot; . implode(' ', $output);\n        }\n    } else {\n        \/\/ Whitelist a domain\n        $t=time();\n        $d=date(&quot;M-d H:i e&quot;,$t);\n        $domain = escapeshellarg($_POST['domain']);\n        $regex_domain = &quot;\/[a-zA-Z0-9-]+(\\.[a-zA-Z0-9-]+)*\\.[a-zA-Z]{2,6}\/&quot;;\n        $is_match = preg_match($regex_domain, $domain);\n        if ($is_match == 1) {\n            $command = &quot;sudo pihole -w $domain --comment \\&quot;{$_SERVER['REMOTE_ADDR']} - {$d}\\&quot;&quot;;\n\n            $output = [];\n            $returnVar = 0;\n            exec\u200b(&quot;$command 2&gt;&amp;1&quot;, $output, $returnVar);\n\n            if ($returnVar === 0) {\n                echo &quot;Domain $domain has been successfully whitelisted.&quot;;\n            } else {\n                echo &quot;Failed to whitelist domain $domain. Output: &quot; . implode(' ', $output);\n            }\n        } else {\n            echo &quot;Domain input is wrong.&quot;;\n        }\n    }\n}\n?&gt;\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color: #24292e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F97583\">&lt;?<\/span><span style=\"color: #E1E4E8\">php<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">if<\/span><span style=\"color: #E1E4E8\"> ($_SERVER[<\/span><span style=\"color: #9ECBFF\">&#39;REQUEST_METHOD&#39;<\/span><span style=\"color: #E1E4E8\">] == <\/span><span style=\"color: #9ECBFF\">&#39;POST&#39;<\/span><span style=\"color: #E1E4E8\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #E1E4E8\"> (<\/span><span style=\"color: #B392F0\">isset($_POST[<\/span><span style=\"color: #B392F0\">&#39;action&#39;<\/span><span style=\"color: #B392F0\">]<\/span><span style=\"color: #E1E4E8\">) &amp;&amp; $_POST[<\/span><span style=\"color: #B392F0\">&#39;action&#39;<\/span><span style=\"color: #B392F0\">]<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">===<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">&#39;list&#39;<\/span><span style=\"color: #E1E4E8\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #B392F0\">\/\/<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">List<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">whitelisted<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">domains<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        $command <\/span><span style=\"color: #9ECBFF\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">&quot;sudo pihole -w -l | awk &#39;{print <\/span><span style=\"color: #79B8FF\">$1<\/span><span style=\"color: #9ECBFF\">, <\/span><span style=\"color: #79B8FF\">$2<\/span><span style=\"color: #9ECBFF\">}&#39;&quot;<\/span><span style=\"color: #E1E4E8\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        $output <\/span><span style=\"color: #9ECBFF\">=<\/span><span style=\"color: #E1E4E8\"> [];<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #79B8FF\">exec<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #B392F0\">&quot;<\/span><span style=\"color: #E1E4E8\">$command<\/span><span style=\"color: #B392F0\"> 2&gt;&amp;1&quot;<\/span><span style=\"color: #B392F0\">,<\/span><span style=\"color: #E1E4E8\"> $output);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #79B8FF\">echo<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">&quot;&lt;pre&gt;&quot;<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">.<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">implode<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #B392F0\">&quot;\\n&quot;<\/span><span style=\"color: #B392F0\">,<\/span><span style=\"color: #E1E4E8\"> $output) <\/span><span style=\"color: #9ECBFF\">.<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">&quot;&lt;\/pre&gt;&quot;<\/span><span style=\"color: #E1E4E8\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    } elseif (<\/span><span style=\"color: #B392F0\">isset($_POST[<\/span><span style=\"color: #B392F0\">&#39;action&#39;<\/span><span style=\"color: #B392F0\">]<\/span><span style=\"color: #E1E4E8\">) &amp;&amp; $_POST[<\/span><span style=\"color: #B392F0\">&#39;action&#39;<\/span><span style=\"color: #B392F0\">]<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">===<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">&#39;disable&#39;<\/span><span style=\"color: #E1E4E8\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #B392F0\">\/\/<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">https:\/\/www.crosstalksolutions.com\/the-worlds-greatest-pi-hole-and-unbound-tutorial-2023\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        $XMin <\/span><span style=\"color: #9ECBFF\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">5<\/span><span style=\"color: #E1E4E8\">; <\/span><span style=\"color: #B392F0\">\/\/<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">Minutes<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">to<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">disable<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">blocking<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        $XSec <\/span><span style=\"color: #9ECBFF\">=<\/span><span style=\"color: #E1E4E8\"> $XMin <\/span><span style=\"color: #79B8FF\">*<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">60<\/span><span style=\"color: #E1E4E8\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        $auth <\/span><span style=\"color: #9ECBFF\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">&quot;YOUR_PASSWORD_HASH&quot;<\/span><span style=\"color: #E1E4E8\">; <\/span><span style=\"color: #B392F0\">\/\/<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">`<\/span><span style=\"color: #B392F0\">cat<\/span><span style=\"color: #9ECBFF\"> \/etc\/pihole\/setupVars.conf <\/span><span style=\"color: #F97583\">|<\/span><span style=\"color: #9ECBFF\"> <\/span><span style=\"color: #B392F0\">grep<\/span><span style=\"color: #9ECBFF\"> WEBPASSWORD`<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        $command <\/span><span style=\"color: #9ECBFF\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">&quot;curl -s <\/span><span style=\"color: #79B8FF\">\\&quot;<\/span><span style=\"color: #9ECBFF\">http:\/\/localhost\/admin\/api.php?disable={<\/span><span style=\"color: #E1E4E8\">$XSec<\/span><span style=\"color: #9ECBFF\">}&amp;auth={<\/span><span style=\"color: #E1E4E8\">$auth<\/span><span style=\"color: #9ECBFF\">}<\/span><span style=\"color: #79B8FF\">\\&quot;<\/span><span style=\"color: #9ECBFF\">&quot;<\/span><span style=\"color: #E1E4E8\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        $output <\/span><span style=\"color: #9ECBFF\">=<\/span><span style=\"color: #E1E4E8\"> [];<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        $returnVar <\/span><span style=\"color: #9ECBFF\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #79B8FF\">exec<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #B392F0\">&quot;<\/span><span style=\"color: #E1E4E8\">$command<\/span><span style=\"color: #B392F0\"> 2&gt;&amp;1&quot;<\/span><span style=\"color: #B392F0\">,<\/span><span style=\"color: #E1E4E8\"> $output<\/span><span style=\"color: #9ECBFF\">,<\/span><span style=\"color: #E1E4E8\"> $returnVar);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #E1E4E8\"> ($returnVar === 0) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            <\/span><span style=\"color: #79B8FF\">echo<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">&quot;Disabled blocking for <\/span><span style=\"color: #E1E4E8\">$XMin<\/span><span style=\"color: #9ECBFF\"> minutes. &quot;.<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">implode<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #B392F0\">&#39; &#39;<\/span><span style=\"color: #B392F0\">,<\/span><span style=\"color: #E1E4E8\"> $output);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            $t=time();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            $d=date(<\/span><span style=\"color: #B392F0\">&quot;M-d H:i e&quot;<\/span><span style=\"color: #B392F0\">,$t<\/span><span style=\"color: #E1E4E8\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            <\/span><span style=\"color: #B392F0\">error_log(<\/span><span style=\"color: #B392F0\">&quot;Disabled by {<\/span><span style=\"color: #E1E4E8\">$_SERVER<\/span><span style=\"color: #B392F0\">[&#39;REMOTE_ADDR&#39;]} - {<\/span><span style=\"color: #E1E4E8\">$d<\/span><span style=\"color: #B392F0\">}\\n&quot;<\/span><span style=\"color: #B392F0\">,<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">3<\/span><span style=\"color: #9ECBFF\">,<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">&quot;\/var\/log\/pihole_disabled.log&quot;<\/span><span style=\"color: #E1E4E8\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        } <\/span><span style=\"color: #F97583\">else<\/span><span style=\"color: #E1E4E8\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            <\/span><span style=\"color: #79B8FF\">echo<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">&quot;Failed. Blocking not disabled. Output: &quot;<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">.<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">implode<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #B392F0\">&#39; &#39;<\/span><span style=\"color: #B392F0\">,<\/span><span style=\"color: #E1E4E8\"> $output);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    } <\/span><span style=\"color: #F97583\">else<\/span><span style=\"color: #E1E4E8\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #B392F0\">\/\/<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">Whitelist<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">a<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">domain<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        $t=time();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        $d=date(<\/span><span style=\"color: #B392F0\">&quot;M-d H:i e&quot;<\/span><span style=\"color: #B392F0\">,$t<\/span><span style=\"color: #E1E4E8\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        $domain <\/span><span style=\"color: #9ECBFF\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">escapeshellarg<\/span><span style=\"color: #E1E4E8\">($_POST[<\/span><span style=\"color: #9ECBFF\">&#39;domain&#39;<\/span><span style=\"color: #E1E4E8\">]);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        $regex_domain <\/span><span style=\"color: #9ECBFF\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">&quot;\/[a-zA-Z0-9-]+(\\.[a-zA-Z0-9-]+)*\\.[a-zA-Z]{2,6}\/&quot;<\/span><span style=\"color: #E1E4E8\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        $is_match <\/span><span style=\"color: #9ECBFF\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">preg_match<\/span><span style=\"color: #E1E4E8\">($regex_domain, $domain);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #E1E4E8\"> ($is_match == 1) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            $command <\/span><span style=\"color: #9ECBFF\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">&quot;sudo pihole -w <\/span><span style=\"color: #E1E4E8\">$domain<\/span><span style=\"color: #9ECBFF\"> --comment <\/span><span style=\"color: #79B8FF\">\\&quot;<\/span><span style=\"color: #9ECBFF\">{<\/span><span style=\"color: #E1E4E8\">$_SERVER<\/span><span style=\"color: #9ECBFF\">[&#39;REMOTE_ADDR&#39;]} - {<\/span><span style=\"color: #E1E4E8\">$d<\/span><span style=\"color: #9ECBFF\">}<\/span><span style=\"color: #79B8FF\">\\&quot;<\/span><span style=\"color: #9ECBFF\">&quot;<\/span><span style=\"color: #E1E4E8\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            $output <\/span><span style=\"color: #9ECBFF\">=<\/span><span style=\"color: #E1E4E8\"> [];<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            $returnVar <\/span><span style=\"color: #9ECBFF\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            <\/span><span style=\"color: #79B8FF\">exec<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #B392F0\">&quot;<\/span><span style=\"color: #E1E4E8\">$command<\/span><span style=\"color: #B392F0\"> 2&gt;&amp;1&quot;<\/span><span style=\"color: #B392F0\">,<\/span><span style=\"color: #E1E4E8\"> $output<\/span><span style=\"color: #9ECBFF\">,<\/span><span style=\"color: #E1E4E8\"> $returnVar);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            <\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #E1E4E8\"> ($returnVar === 0) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">                <\/span><span style=\"color: #79B8FF\">echo<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">&quot;Domain <\/span><span style=\"color: #E1E4E8\">$domain<\/span><span style=\"color: #9ECBFF\"> has been successfully whitelisted.&quot;<\/span><span style=\"color: #E1E4E8\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            } <\/span><span style=\"color: #F97583\">else<\/span><span style=\"color: #E1E4E8\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">                <\/span><span style=\"color: #79B8FF\">echo<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">&quot;Failed to whitelist domain <\/span><span style=\"color: #E1E4E8\">$domain<\/span><span style=\"color: #9ECBFF\">. Output: &quot;<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">.<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">implode<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #B392F0\">&#39; &#39;<\/span><span style=\"color: #B392F0\">,<\/span><span style=\"color: #E1E4E8\"> $output);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        } <\/span><span style=\"color: #F97583\">else<\/span><span style=\"color: #E1E4E8\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            <\/span><span style=\"color: #79B8FF\">echo<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">&quot;Domain input is wrong.&quot;<\/span><span style=\"color: #E1E4E8\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">?&gt;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Sicherheitshinweise: Whitelist ohne Admin-Zugang absichern<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Weil das Skript Systembefehle mit erh\u00f6hten Rechten ausf\u00fchrt, solltest du es ausschlie\u00dflich im lokalen Netzwerk erreichbar machen &ndash; niemals offen im Internet. Beachte dabei:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Der hinterlegte Passwort-Hash liegt im Klartext in der PHP-Datei. Sch\u00fctze das Verzeichnis mit passenden Dateirechten.<\/li>\n\n\n\n<li>Gib die Oberfl\u00e4che nur im Heimnetz frei und ver\u00f6ffentliche sie nicht \u00fcber eine Portweiterleitung. F\u00fcr sicheren Fernzugriff eignet sich stattdessen ein VPN wie in unserem Guide zu <a href=\"\/network\/de\/tailscale-synology-fernzugriffe-auf-synology-nas-ohne-portfreigabe\/\">Tailscale f\u00fcr Fernzugriff ohne Portfreigabe<\/a>.<\/li>\n\n\n\n<li>Die Domain-Pr\u00fcfung per Regex ist grundlegend. In einer vertrauensw\u00fcrdigen Familienumgebung ist das ausreichend, in gr\u00f6\u00dferen Netzen solltest du zus\u00e4tzliche Zugriffsbeschr\u00e4nkungen setzen.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Fazit<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Mit Pihole Simple Whitelist gibst du allen im Haushalt die M\u00f6glichkeit, f\u00e4lschlich blockierte Domains selbst freizuschalten &ndash; ohne den Umweg \u00fcber den Admin und ohne Zugriff auf das eigentliche Pi-hole-Panel. Die Einrichtung dauert nur wenige Minuten, senkt sp\u00fcrbar den Support-Aufwand und macht aggressive Blocklisten im Familienalltag deutlich praxistauglicher. Wichtig bleibt: Betreibe die Oberfl\u00e4che nur im lokalen Netzwerk und sichere den Zugriff sinnvoll ab.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">H\u00e4ufige Fragen (FAQ)<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Kann man in Pi-hole Whitelist-Eintr\u00e4ge wirklich ohne Admin-Zugang hinzuf\u00fcgen?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Ja. Mit dem Projekt Pihole Simple Whitelist richtest du eine eigene Weboberfl\u00e4che unter <code>http:\/\/pi.hole\/whitelist\/<\/code> ein. \u00dcber diese kann jede Person im Netzwerk eine Domain freigeben, ohne sich am Pi-hole-Adminbereich anmelden zu m\u00fcssen.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Ist das f\u00fcr ein normales Heimnetzwerk sicher?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">In einem vertrauensw\u00fcrdigen Heimnetz ja, solange die Oberfl\u00e4che nicht ins Internet ver\u00f6ffentlicht wird. Da das Skript Befehle mit erh\u00f6hten Rechten ausf\u00fchrt, sollte es niemals per Portweiterleitung \u00f6ffentlich erreichbar sein. F\u00fcr Fernzugriff nutzt du besser ein VPN.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Wozu wird der Passwort-Hash ben\u00f6tigt?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Der Hash des Webinterface-Passworts wird nur f\u00fcr die optionale Funktion gebraucht, das Blocking f\u00fcr einige Minuten zu pausieren. Zum reinen Whitelisten von Domains ist er nicht zwingend erforderlich. Du liest ihn mit <code>cat \/etc\/pihole\/setupVars.conf | grep WEBPASSWORD<\/code> aus.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Auf welchem System l\u00e4uft die Whitelist-Oberfl\u00e4che?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Die Dateien werden direkt auf dem Server abgelegt, auf dem Pi-hole l\u00e4uft &ndash; typischerweise unter <code>\/var\/www\/html\/whitelist<\/code>. Voraussetzung ist ein funktionierender Webserver mit PHP-Unterst\u00fctzung.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Was passiert bei einer ung\u00fcltigen Domain-Eingabe?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Das Skript pr\u00fcft die Eingabe mit einem regul\u00e4ren Ausdruck. Sieht die Eingabe nicht wie eine g\u00fcltige Domain aus, wird sie abgelehnt und die Meldung \u201eDomain input is wrong&#8221; ausgegeben, statt einen Befehl auszuf\u00fchren.<\/p>\n<div id=\"netgu-3700785278\" class=\"netgu-after-content netgu-entity-placement\"><script async src=\"\/\/pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js?client=ca-pub-6258556257245998\" crossorigin=\"anonymous\"><\/script><ins class=\"adsbygoogle\" style=\"display:block;\" data-ad-client=\"ca-pub-6258556257245998\" \ndata-ad-slot=\"4559785002\" \ndata-ad-format=\"auto\"><\/ins>\n<script> \n(adsbygoogle = window.adsbygoogle || []).push({}); \n<\/script>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>Pi-hole Whitelist-Eintr\u00e4ge hinzuf\u00fcgen ohne Admin-Zugang: So richtest du mit Pihole Simple Whitelist eine Oberfl\u00e4che ein, \u00fcber die jeder Domains freigibt.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_uag_custom_page_level_css":"","site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[1],"tags":[],"class_list":["post-85","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"uagb_featured_image_src":{"full":false,"thumbnail":false,"medium":false,"medium_large":false,"large":false,"1536x1536":false,"2048x2048":false},"uagb_author_info":{"display_name":"Tobias Pries","author_link":"https:\/\/netguide.io\/network\/author\/tobias-pries\/"},"uagb_comment_info":0,"uagb_excerpt":"Pi-hole Whitelist-Eintr\u00e4ge hinzuf\u00fcgen ohne Admin-Zugang: So richtest du mit Pihole Simple Whitelist eine Oberfl\u00e4che ein, \u00fcber die jeder Domains freigibt.","brizy_media":[],"_links":{"self":[{"href":"https:\/\/netguide.io\/network\/wp-json\/wp\/v2\/posts\/85","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/netguide.io\/network\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/netguide.io\/network\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/netguide.io\/network\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/netguide.io\/network\/wp-json\/wp\/v2\/comments?post=85"}],"version-history":[{"count":1,"href":"https:\/\/netguide.io\/network\/wp-json\/wp\/v2\/posts\/85\/revisions"}],"predecessor-version":[{"id":149,"href":"https:\/\/netguide.io\/network\/wp-json\/wp\/v2\/posts\/85\/revisions\/149"}],"wp:attachment":[{"href":"https:\/\/netguide.io\/network\/wp-json\/wp\/v2\/media?parent=85"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/netguide.io\/network\/wp-json\/wp\/v2\/categories?post=85"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/netguide.io\/network\/wp-json\/wp\/v2\/tags?post=85"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}