Projekt Pi-hole – blokowanie reklam, ale bez Pi-hole, za to w samym Mikrotiku

Silas Mariusz

rm -rf /
Help us, GOD!
5 Kwiecień 2008
10 210
31
2 313
153
39
Nowy Sącz
forum.qnap.net.pl
QNAP
TS-x77
Ethernet
1 GbE
Ostatni wpis na blogu @grzenio oraz temat na forum Projekt - Bezpieczne i wolne od reklam przeglądanie stron Web (Internet - Filtrowanie treści) [piszę...] wywołały spore zainteresowanie blokowaniem reklam za pomocą Pi-hole, który można uruchomić na QNAP.

Jak działa Pi-hole?
Pi-hole to nic innego jak blokowanie reklam w internecie, ale w przeciwieństwie do filtrowania treści (które jest bardziej skuteczne), blokuje on zapytania do domen, które odpowiedzialne są za linki do reklam. Jest to dość wystarczająca metoda, aby przeglądać współczesny internet dość swobodnie.

abrianchristner.io_content_images_2019_03_pihole_traditional_dns_1024x630.png

Pytanie czy warto?
Warto!


Ale w temacie blokowania reklam padły też słowa...

Penerros napisał:
Sprzedaj Asusa, kup Mikrotika...

pigers napisał:
ta zakochaj sie w MT, potem cokolwiek innego jest ... po prostu za biedne


Co to ten Mikrotik?
Mikrotik - mamy na myśli routery, które pozwalają na odrobine skryptowania.

I tak właśnie ja też zrobiłem. Listy z Pi-hole przekonwertowałem w notatniku na format dla Mikrotik. A więc mam blokowanie reklam z Pi-Hole, bez Pi-hole na samym Mikrotiku.

@_Toem zadał mi pytanie jak często aktualizowana jest moja lista. Odp. do tej pory w ogóle :)
Ale dziś napisałem konwerter na kolanie w bashu. Możesz korzystać z moich list lub postawić mój konwerter na QNAP lub dowolnym innym Linuxie i uruchamiać go z harmonogramu cron. Zatem jeśli masz router Mikrotik, to możesz też filtrować reklamy w internecie bez potrzeby instalacji Pi-hole.


Co musisz zrobić w Mikrotik aby blokować reklamy w internecie?
  1. Połącz sie z Mikrotik za pomocą Winbox

  2. Uruchom terminal

  3. Pobierz skrypt dodający inne skrypty oraz harmonogram:
    Kod:
    /tool fetch url="http://pool.qnapclub.pl/projects/tools/mikrotik-pihole-adlists/mikrotik_adblock_updater.rsc" mode=http;

  4. Uruchom pobrany skrypt:
    Kod:
    /import mikrotik_adblock_updater.rsc

    upload_2020-2-22_14-45-0.png


  5. Przejdź do zakładki System > Scripts i z listy:
    • Zaznacz DownloadAdsBlockList i kliknij Run Script

    • Zaznacz ReplaceAdsBlockList i kliknij Run Script

  6. Voila
    upload_2020-2-22_15-0-46.png

To właściwie tyle, jeśli chcesz używać mojej listy.



Jeśli chcesz używać własne listy, albo postawić sobie updater samemu, to do udziału sieciowego Web na QNAP'ie postaw skrypt i uruchamiaj go z crontaba (o crontabie czytaj w innym temacie na forum)
Bash:
cd /share/Public
wget http://pool.qnapclub.pl/projects/tools/mikrotik-pihole-adlists/adlst_updater.sh
chmod +x adlst_updater.sh
./adlst_updater.sh
Zostanie wygenerowany plik mikrotik_pihole_adlists.rsc, który nalezy aktualizować w Mikrotiku za pomocą innego skryptu:
(pamiętaj aby podstawić adres URL do skryptu na Twoim QNAP)
Kod:
# Script which will download the drop list as a text file
/system script add name="DownloadAdsBlockList" source={
/tool fetch url="http://pool.qnapclub.pl/projects/tools/mikrotik-pihole-adlists/mikrotik_pihole_adlists.rsc" mode=http;
:log info "Downloaded mikrotik_pihole_adlists.rsc from pool.qnapclub.pl";
}

# Script which will Remove old AdsBlockList list and add new one
/system script add name="ReplaceAdsBlockList" source={
/ip dns static remove [find where ttl=600w]
/import file-name=mikrotik_pihole_adlists.rsc;
:log info "Removed old AdsBlockList records and imported new list";
}

# Schedule the download and application of the AdsBlockList list
/system scheduler add comment="Download AdsBlock list" interval=1d \
  name="DownloadAdsBlockListList" on-event=DownloadAdsBlockList \
  start-date=jan/01/1970 start-time=08:15:39
/system scheduler add comment="Apply AdsBlock List" interval=1d \
  name="InstallAdsBlockListList" on-event=ReplaceAdsBlockList \
  start-date=jan/01/1970 start-time=08:20:39



Co jest źródłem listy blokowanych adresów?
Przyjrzyjcie się na nagłówek mojego konwertera pi-hole:
Bash:
#!/bin/sh

# exclude microsoft windows connectivity test domains
EXCL_WHITELIST="'(excl.domain.example|v.wpimg.pl|msftncsi.com|msftconnecttest.com|login.live.com|windowsupdate.com|displaycatalog.mp.microsoft.com|dl.delivery.mp.microsoft.com|sls.update.microsoft.com)'"
EXCL_DEFAULTS="'(localhost|localdomain|local|router|broadcast)'"

adlists_online=( "http://pool.qnapclub.pl/projects/tools/mikrotik-pihole-adlists/list_crack_adobe.txt" )
adlists_online+=( "http://pool.qnapclub.pl/projects/tools/mikrotik-pihole-adlists/list_crack_netsrang_xshell.txt" )
adlists_online+=( "http://pool.qnapclub.pl/projects/tools/mikrotik-pihole-adlists/list_microsoft_skype_ads.txt" )
adlists_online+=( "https://raw.githubusercontent.com/MajkiIT/polish-ads-filter/master/polish-pihole-filters/hostfile.txt" )
adlists_online+=( "https://raw.githubusercontent.com/xxcriticxx/.pl-host-file/master/hosts.txt" )
# add more external lists here line by line
#adlists_online+=( "http://..." )



# Get content from the lists
_script_file=mikrotik_pihole_adlists.rsc
rm -f $_script_file 2>/dev/null 1>/dev/null
rm -f "${_script_file}.tmp" 2>/dev/null 1>/dev/null
rm -f "${_script_file}.tmp.tmp" 2>/dev/null 1>/dev/null

for ((i=0; i<${#adlists_online[@]}; i++)); do
        if [ $((${#adlists_online[@]}-$i)) -gt 1 ]; then
                curl -sL ${adlists_online[$i]} >> ${_script_file}.tmp
        else
                curl -sL ${adlists_online[$i]} >> ${_script_file}.tmp
        fi
        if [ $? -ne 0 ]; then
                echo "ERROR! Can't get online adlists:"
                echo "       ${adlists_online[$i]}"
                exit 1
        fi
done


# Convert to unix format
dos2unix ${_script_file}.tmp

# Expand aliases
#shopt -s expand_aliases

LC_ALL=C


# Help aliases
alias excl_defaults="egrep -v $EXCL_DEFAULTS"
alias excl_whitelist="egrep -v $EXCL_WHITELIST"

alias incl_ipaddr="egrep -e '([0-9]|[0-9][0-9]|[0-9][0-9][0-9])\.([0-9]|[0-9][0-9]|[0-9][0-9][0-9])\.([0-9]|[0-9][0-9]|[0-9][0-9][0-9])\.([0-9]|[0-9][0-9]|[0-9][0-9][0-9]).*'"

alias strip_comment="sed 's/#.*//'"
alias remove_empty_lines="sed -r '/^\s*$/d'"

alias excl_regex_rules="grep -v '\\$'"
alias incl_regex_rules="grep '\\$'"

# real cmd rule: sed -e 's/\\/\\\\/g' -e 's/\$//g'
alias conv_expr_2_rsc_fmt="sed -e 's/\\\/\\\\\\\/g' -e 's/\\$//g'"

alias conv_2_alphanumeric="tr -cd '[:alnum:]._\-\n-'"
alias conv_2_alphanumexpr="tr -cd '[:alnum:].+*[]_\-\\\(|^$)\n-'"


# Help func
prnt_col_2()
{
        awk '{print $2}'
}


# Convert plain name rules
cat ${_script_file}.tmp         \
        | remove_empty_lines    \
        | excl_whitelist        \
        | excl_defaults         \
        | incl_ipaddr           \
        | prnt_col_2            \
        | strip_comment         \
        | excl_regex_rules      \
        | conv_2_alphanumeric   \
        | sed -e 's/^/\/ip dns static add address=127.0.0.1 name=/i'    \
        | sed -e 's/$/ ttl=600w/i'                                      \
        >> "${_script_file}.tmp.tmp"

# Convert regexp name rules
cat ${_script_file}.tmp         \
        | remove_empty_lines    \
        | excl_whitelist        \
        | excl_defaults         \
        | incl_ipaddr           \
        | prnt_col_2            \
        | strip_comment         \
        | incl_regex_rules      \
        | conv_2_alphanumexpr   \
        | conv_expr_2_rsc_fmt   \
        | sed -e 's/^/\/ip dns static add address=127.0.0.1 regexp="/i' \
        | sed -e 's/$/" ttl=600w/i'                                     \
        >> "${_script_file}.tmp.tmp"

sync

# Sort and remove doubles - keep unique lines
sort -u "${_script_file}.tmp.tmp" > "${_script_file}"

rm -f ${_script_file}.tmp.tmp 2>/dev/null 1>/dev/null
rm -f ${_script_file}.tmp 2>/dev/null 1>/dev/null

Jak zauważycie listy źródłowe dodaje się w nagłówku: adlists_online+:-( "http://..." )

Mam nadzieje, że pomogłem wielu ;)

Pozdrówki dla fanów Mikrotików :)

PS. Logman na forum potrafi też informować po gadu-gadu działania na mikrotiku takie jak dzierżawa DHCP, niepoprawne logowanie do MT, etc. etc.
 
@Silas Mariusz Dziękuję, że dodałeś moje filtry, ale zastanawiam się czy nie lepsze by było użycie filtrów
https://raw.githubusercontent.com/MajkiIT/polish-ads-filter/master/polish-pihole-filters/all_ads_filters.txt bo zawierają wszystkie listy jakie przerabiam, czyli takie all in one.

Więcej filtrów jest na stronie ==>https://github.com/MajkiIT/polish-ads-filter/tree/master/polish-pihole-filters
 
  • Lubię to
Reakcje: Silas Mariusz
Na CCR1009-7G-1C przeszło :p , ale tak jak mówisz to sztuka dla sztuki. Można by bardziej użyć tego do blokowania podejrzanych stron lub dodawać wybrane listy.
 
No to się cieszę :D . W tych listach staram się spełnić potrzeby jak największej ilości osób. Jedna osoba chce filtracji wyskakujących okienek na stronach przed filmami a ktoś inny tak jak ty mniej reklam na polskich stronach a kolejna aby linki do trackingu były wycięte.

A o jakiś konkretnie apkach myślisz? Tak może będzie łatwiej :D
 
Sprawdzilem na hAP ac ... braklo pamieci. :p

Ja wiem, ze temat jest aby postawic adblockera na MT, ale czy faktycznie nie jest to sztuka dla sztuki tym bardziej ze postawienie pihole na dockerze rozwiazuje wszystkie problemy o jakich tutaj mowa?

BTW. MajkiIT robisz wspaniala robote. Dzieki!
 
@z-ka Ale chwała Wam, że kombinujecie i próbujecie coś zrobić. Nie krytykuje a doceniam starania i podziwiam. Im będzie więcej możliwości aby blokować reklamy to tym lepiej ktoś się zdecyduje. Dla mnie bomba i super pomysł. Dzięki za docenienie i cieszę się, że to co robię i reszta zespołu Wam się przydaje.
Zaskoczę Was bo ta podstawowa na Mt działa naprawdę dobrze.
No to dobrze ... jeśli to spełnia to twoje potrzeby to super a na pewno komuś też będzie to pasować.
 
Po wgraniu list (MT-ki się prztykały) rozpoczęły się poszukiwania co by tu zepsuć i tak testując- listy w MT zapisane jako AddressList -(wpisy w postaci nazwy) mały skrypt i wpisy do DNS- tylko te które zostały użyte w sieci. a tu dla ciekawych https://mikrotikforum.pl/viewtopic.php?f=1&t=119115 linka do problemu ;) ale to nie na tym forum, w końcu tu jest Qnap a tam MT
 
Czekajcie bo się pogubiłem !??
jeżeli z listy mamy np:
/ip dns static add address=127.0.0.1 name=ads.bluelithium.com ttl=600w

a zamiast niej robiąc wpis
/ip firewall address-list add address="ads.bluelithium.com" comment="ads.bluelithium.com" list=DNStatic
dostaje dodatkowo dynamicznie -informacyjnie
87.248.118.22 - ads.bluelithium.com
87.248.118.23 - ads.bluelithium.com
to i tak blokuję ads.bluelithium.com

No dobra co kombinujesz [pewnie można łatwiej]- a już - próbuje nauczyć MT-ka
Sprawdzam obecny IP czy jest na liście DNStatic (ważne 7dni) - a jeżeli jest to go cap do listy Temp i co dalej skrypt przegląda sobie listę Temp po wpisach czyli IP i dopasowuje do niego nazwę zapisana w liście DNStatic. Ooo jest to ciach wpis statyczny add address=127.0.0.1 name=nazwa-od-IP ttl=100w a przy okazji odchudzam stosowne AdresListy. Co to dało - a tyle w danym okresie (np 7 dni) jeżeli nie skorzystano to wpis znika, a gdyby skorzystano to jest już w dns-ie
jeżeli lista wzorcowa ma 6000 wpisów to DNS ma raptem 80 (na tą chwilę) -bo któryś user miał chęć zobaczyć przysłowiową "reklamę"
 

Mogą Cię zainteresować

U
  • Zamknięte
  • Pytanie
Odpowiedzi
0
Wyświetleń
965
Oh'Linux? Software hacking
Usunięty użytkownik pigers
U
U
  • Zamknięte
  • Przypięty
  • Pytanie
Pomoc Moje dockery
Odpowiedzi
2
Wyświetleń
{liczba}K
Kontenery Docker i LXD
Usunięty użytkownik pigers
U

Użytkownicy znaleźli tą stronę używając tych słów:

  1. adguard
  2. pi hole mikrotik
  3. pihole
  4. Monitoring
  5. mikrotik_pihole_adlists.rsc
  6. pihole mikrotik
  7. https://forum.qnap.net.pl/threads/pi-hole-%E2%80%93-blokowanie-reklam-ale-bez-pi-hole-za-to-w-samym-mikrotiku.27017/
  8. mikrotik pi hole
  9. pi-hole
  10. adblock