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 364
34
2 830
153
40
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.
 
Bardzo dziękuje @pigers za stawiennictwo. Mam sieci WiFi zarządzana z poziomu caps mana i ccr1009-8, na którym mam do dyspozycji GB ramu.
W sieci mam max. Około 20 urządzeń, z czego 8 to stacje robocze.
Fajnie byłoby hostowac taki zbiór na githabie dla mocnych sprzętów mikrotika.
Update poszedl...
@Silas Mariusz czy jestes wstanie mi pomoc w konwersji listy pod mikrotika ?
Panowie w jaki sposób można wyciąć reklamy z wp.pl?
 
Jak nie chce Ci się za bardzo kombinować to polecam zainteresować sie AdGuard – najbardziej zaawansowana blokada reklam na świecie!
przy płatnej licencji ma się również aplikację na tel która blokuje reklamy w każdej aplikacji, na PC itp. Wada taka ze trzeba mieć klienta na każdym urządzeniu zainstalowany. Korzystałem na Qnapie, w wersji free (dostępna w sklepie qnapclub), która działa i filtruje Twoją sieć, ale niestety co do stron PL słabo sobie radził.

Przykład z darmowego dodatku do przeglądarki:
upload_2021-3-30_11-56-56.png


wersja płatna, daje dodatkowo możliwość edycji css dla strony co daje dodatkowe możliwości zmiany wyglądu strony www pod swoje potrzeby. Osobiście nie spotkałem nic lepszego do tej pory.
 
na ten moment korzystam z https://mikrotikconfig.com/firewall/ (plus Best scripts for firewall and router protection - MikroTik)
ale za chwile uciekam w UTMa - czekam tylko na przypływ gotówki ;)

popatrzyłem na liste filtrów MT od @MajkiIT - dużo roboty żeby przenieść do niej te duże filtry.

przykład listy MT
Kod:
# This scrip adds malware IP addresses to an address-list (list created: Tue Mar 30 08:15:04 2021)
/ip firewall address-list
add list=addressListMalware address="95.216.13.196" comment="addMalwareIPs CertyficateIT_Malware"
add list=addressListMalware address="103.94.157.5" comment="addMalwareIPs CertyficateIT_Malware"
add list=addressListMalware address="192.145.239.40" comment="addMalwareIPs CertyficateIT_Malware"
add list=addressListMalware address="185.61.153.106" comment="addMalwareIPs CertyficateIT_Malware"
add list=addressListMalware address="207.58.136.190" comment="addMalwareIPs CertyficateIT_Malware"
add list=addressListMalware address="5.23.50.121" comment="addMalwareIPs CertyficateIT_Malware"
add list=addressListMalware address="198.54.125.159" comment="addMalwareIPs CertyficateIT_Malware"
add list=addressListMalware address="85.187.154.178" comment="addMalwareIPs CertyficateIT_Malware"

przykład z all_ads
Kod:
d.ifengimg.com
img.mp.itc.cn
api.meishesdk.com
h5.m.taobao.com
161.117.97.84
114.54.23.116
fr.app.chat.global.xiaomi.net
tracking.intl.miui.com
data.mistat.intl.xiaomi.com
lb-im-11-1803639322.ap-southeast-1.elb.amazonaws.com

jak widzisz jest tam mieszanina adresów IP i nazwa i regexpów (nie ma w przykładzie) - nie spodziewałbym się szybko takiej grubej listy - za dużo roboty - już wolę ładować to przez pihole.

z nudów zrobiłem tyle
Bash:
# zaciagnij plik
wget "https://raw.githubusercontent.com/MajkiIT/polish-ads-filter/master/polish-pihole-filters/all_ads_filters.txt"
# żegnajcie komentarze
sed '/^#/d' all_ads_filters.txt  > yolo.txt
# żegnajcie 127.0.0.1 i 0.0.0.0
cat yolo.txt | sed 's/127.0.0.1//g' | sed 's/0.0.0.0//g' > yolo2.txt
# życie jest przyjemniejsze bez duplikatów
sort -u yolo2.txt > yolo3.txt
# i co dalej ??
 
Ale zajebiście, pisz co kupisz. Lubię takie nowinki i zabawę w konfiguracje. Kumpel w szpitalu ostatnio kupował FortiGate za ponad 70 koła. Tam to jest zabawa;]
 

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

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