Android: blokace wildcard domén

Hamparle

  • ****
  • 365
  • junior developer ucho
    • Zobrazit profil
    • E-mail
Android: blokace wildcard domén
« kdy: 05. 03. 2021, 22:10:29 »
Hledám určitý způsob blokování domén pro android.

Co ne:
-způsob hosts / Adaway je problematický v tom, že blokuje jen přesné hostnames a
-ublock origin : nevýhoda, že  funguje jen v browseru.

Co ano:
 - (klíčové) aby to umělo wildcard matchování: aby pro blokaci a.b.com a b.b.com stačilo napsat b.com
- (advanced) - aby to umělo adservice.google.*
-bonus : passthrough pro hotspot funkci (tzn aby zařízení připojená přes wifi nebo USB hotspot  při využití DNS hotspotu
  měly aplikovanou stejnou filtraci)

Samozřejmě rozumím způsobu+principu DNS vs hosts VS VPN  (ta třetí možnost lokální VPN, ale o tom nic nevím a mám předsudek že je to nevýkonné).  :
- že blokace dle DNS funguje jen, když se je ptáno toho DNS, když se ptá jiného DNS, tak je to vniveč
- že hosts blokace fungujuje jen při "místním systémovém" zjišťováním gethostbynameatd() a že neumí wildcard


A aby tu fungovalo na jakékoli síti (různé wifi, mobilní data).

Jaké řešení tedy zvolit?   Je jasné, že když aplikace bude komunikovat s vlastním DNS (ledaže by byl port 53 blokován)  nebo byl překlad v aplikaci natvrtdo, s tím holt nic udělat nejde.
Vychází mi z toho něco jako místní "hosts-like" chování, tzn i když z DHCP přijde jakýkoli DNS server, tak aby lokální překlad fungoval přes nějaký lokální DNS, který ovšem umí wildcard.




Tzn Local VPN se mi nepozdává (pokud tam není nějaká feature, že přes VPN jde pouze port 53)  a hosts-file má omezení wildcard.

Někde na slant.com jsem viděl srování těchto nástrojů :
https://www.slant.co/topics/4567/~ad-blockers-for-android

Je tam něco takového, co hledám? Jaký směr řešení by byl správný? něco, co nějak pro každé připojení k síti například automagicky přepíše DNS server na 127.0.0.1?  Je něco takového v provozu?

A nebo zatracuji VPN řešení blokace zbytečně? Jak se snese s dalším VPN? Jde řetězit? Jde přes VPN vše nebo jen DNS volitelně?
« Poslední změna: 06. 03. 2021, 00:11:23 od Petr Krčmář »


Re:Android: blokace wildcard domén
« Odpověď #1 kdy: 07. 03. 2021, 08:07:53 »
A co takhle Pi-Hole používám k velkému spokojenosti. Nasazeno v síti jako lokální DHCP, (i když není podmínkou).

Hamparle

  • ****
  • 365
  • junior developer ucho
    • Zobrazit profil
    • E-mail
android "personal DNS filter" - zkušenosti - port 53 a root
« Odpověď #2 kdy: 09. 03. 2021, 14:02:10 »
Vyzkoušel jsem https://www.zenz-solutions.de/personaldnsfilter-wp/. Provozuji v režimu BEZ VPN na LineageOS.
Mám k tomu několik postřehů a dotazů

1. WILDCARD domény

- hledaná vlastnost wildcard blokování mi funguje i bez nutnosti psát znak *.
v souboru s hosty:
Kód: [Vybrat]
# Add your own additional hosts here!
# Supports Blacklist, whitelist and map to custom IP

# Format for Blacklist: 1 host name per line (sample below).
# Wildcard Character "*" can be used for host blocking.
# Host name and all sub domains will be blocked.

sample4711.justasample.com
- z toho jsem pochopil, že pro wildcard blokování je nutné zadat *.něco.com nebo *něco.com. Ale funguje to tak že i při zadání něco.com to blokuje i subdomény . Je to takto v pořádku? (Ačkoli takto se chová i dnsmasq)


2. Funguje pouze v nastavení "Režim root bez lokální VPN" (implikuje Režim DNS proxy bez lokální VPN).


Pokud totiž volbu "Režim root bez lokální VPN" vypnu program se tváří že běží, ale žádné blokování nefunguje a hlásí 0 connections. V logu nevidím žádné přidání iptables pravidel, jen pouze DNSFilterProxy running on 5300

Přehlédl jsem něco?    Je nutné někde přenastavit DNS port manuálně?
Díval jsem se v lineageOS na Nastavení: Sít & Net : Rozšířené - sourkomé DNS:Vypnuto/AUto/Ručně: tam ale nelze vyplnit 127.0.0.1:5300... ani localhost:5300. A v případě localhost " mi nejde internet"



3. volba "Režim root bez lokální VPN" neumožňuje port 53 pro upstream server. Čím to? souvisí to s iptables pravidly?


 rootModeOnAndroid = true|false - used  by Android version.
# When dnsProxyOnAndroid is enabled, root mode will also open port 53 and route local DNS traffic to this.
# In root mode could also act as DNS filter Proxy within the local network.
# NOTE! this mode does not allow port 53 for upstream DNS Server
rootModeOnAndroid = false

v logu se totiž s touto volbou ukáže i
Kód: [Vybrat]
iptables -t nat -A PREROUTING -p udp -dport 53 -j REDIRECT --to-port 5300
Hádám že to bude nějaká smyčka v iptables, kdy se autorovi nepodařilo zablokovat port 53 a zároveň použít pro upstream port 53 nebo to fakt technicky nejde? Nebo jiné vysvětlení? Ostatně myslím, že to by problém být neměl





(komentovaný cfg soubor) - je vhodné si otevřít vedle




Zde je obrázek s nastavením, ale je to starší screenshot, kde není volba "Povolit pouze požadavky lokálního proxy DNS". , ale to myslím, že mě netrápí, jelikož to jen přidá pravidla ip{6,}tables -A OUTPUT  -p {udp,tcp}--dpt 53 -J DROP



Existuje nějaká alternativa?
Rekapitulace dotazů :
2. Proč to nefunguje v režimu DNSproxy bez rootu (bez volby "Režim root bez lokální VPN" ale s volbou "DNS proxy bez lokal VPN")
3.proč při provozu "Režim root bez lokální VPN" nelze mít upstream server na portu 53?


Bokem:
Funguje to i v souběhu s AdAway (což by měl být jen přechroustaný hosts soubor) - co je zablokováno v AdAway ani nejde do dns a neloguje se v personalDNSfiltru.

Hamparle

  • ****
  • 365
  • junior developer ucho
    • Zobrazit profil
    • E-mail
Re:Android: blokace wildcard domén
« Odpověď #3 kdy: 12. 03. 2021, 17:07:28 »
Věděli byste odpovědi na tyto palčivé otázky? Více méně by to mělo být generické bez ohledu na použitý SW ale jen jde o architekturu DNS,API, funkčnosti u androidu,  ta zdánlivá nefunkčnost DNS na portu 5300 bez root režimu. A nebo je potřeba nastavit nějaký další krok?

A ta nemožnost použít port 53 v root režimu není zásadní, akorát jsem to chtěl použít pro ověření , zda to funguje jak má.