Custom blocklist per-client #5781

Open
opened 2026-03-04 06:35:07 -05:00 by deekerman · 17 comments
Owner

Originally created by @DevonTM on GitHub (Sep 23, 2025).

Prerequisites

  • I have checked the Wiki and Discussions and found no answer

  • I have searched other issues and found no duplicates

  • I want to request a feature or enhancement and not ask a question

The problem

I would like to use a different blocklist for specific clients instead of only relying on the global setting. For example, I want to create a client profile for children and apply this blocklist to block adult sites.

Proposed solution

Add an option (e.g., a new tab or section) in the client settings to specify custom blocklists.

Alternatives considered and additional information

No response

Originally created by @DevonTM on GitHub (Sep 23, 2025). ### Prerequisites - [x] I have checked the [Wiki](https://github.com/AdguardTeam/AdGuardHome/wiki) and [Discussions](https://github.com/AdguardTeam/AdGuardHome/discussions) and found no answer - [x] I have searched other issues and found no duplicates - [x] I want to request a feature or enhancement and not ask a question ### The problem I would like to use a different blocklist for specific clients instead of only relying on the global setting. For example, I want to create a client profile for children and apply [this blocklist](https://cdn.jsdelivr.net/gh/hagezi/dns-blocklists@latest/adblock/nsfw.txt) to block adult sites. ### Proposed solution Add an option (e.g., a new tab or section) in the client settings to specify custom blocklists. ### Alternatives considered and additional information _No response_
Author
Owner

@PANICBUTT0N commented on GitHub (Sep 23, 2025):

Seconding this request. There are several domains and services I would like to block on my smart TV that I would still like to be able to access on other devices.

@PANICBUTT0N commented on GitHub (Sep 23, 2025): Seconding this request. There are several domains and services I would like to block on my smart TV that I would still like to be able to access on other devices.
Author
Owner

@Dynamic5912 commented on GitHub (Sep 23, 2025):

Use custom filtering rules with clientID's or ctag's to block the domains on those devices only

@Dynamic5912 commented on GitHub (Sep 23, 2025): Use custom filtering rules with clientID's or ctag's to block the domains on those devices only
Author
Owner

@PANICBUTT0N commented on GitHub (Sep 23, 2025):

Use custom filtering rules with clientID's or ctag's to block the domains on those devices only

This is much less convenient, though. The whole point of blocklists is to be able to have a regularly updated repository of domains to block, instead of regularly manually pasting in hundreds of thousands of lines of custom filters. If global blocklists are supported, I don't see why per-client blocklists is an unreasonable request.

@PANICBUTT0N commented on GitHub (Sep 23, 2025): > Use custom filtering rules with clientID's or ctag's to block the domains on those devices only This is much less convenient, though. The whole point of blocklists is to be able to have a regularly updated repository of domains to block, instead of regularly manually pasting in hundreds of thousands of lines of custom filters. If global blocklists are supported, I don't see why per-client blocklists is an unreasonable request.
Author
Owner

@theschles commented on GitHub (Sep 23, 2025):

Use custom filtering rules with clientID's or ctag's to block the domains on those devices only

@Dynamic5912 please explain to me how per-client-blocking is supposed to work -- because at this point, IT'S NOT WORKING.

AdguardHome Version: v0.107.66

My current blocklist @@||google.com^$important @@||accounts.youtube.com^$important ||agenciamaisvoce.com^$important ||caterhamcars.com^$important ||daimleragemea.germany-2.evergage.com^$important ||doodle4google.com^$important ||doodles.google.com^$important ||doodles.google^$important ||eavesdropthenashame.com^$important ||f1.com^$important ||ferrari.com^$important ||formula1.com^$important ||formulaonedigitalmedia.germany-2.evergage.com^$important ||games.googleapis.com^$important ||gameswhitelisted.googleapis.com^$important ||lamborghini.com^$important ||mclaren.com^$important ||morgan-motor.com^$important ||play.googleapis.com^$important ||porsche.cloud^$important ||porsche.com^$important ||porsche.matomo.cloud^$important ||tiktok.com^$important ||watchliveformula1.com^$important ||withgoogle.com^$important

As you might have guessed from the above list, my son Morgan is obsessed with high-speed automotive racing -- to the detriment of his homework and grades.

He has a school Chromebook -- which is why I have to allow-list google.com and accounts.youtube.com -- or he can't log into his school account.

I have a Client named 'Morgan' -- with the Chromebook's DHCP reserved IP address listed in the Identifier list.

The above block-list works -- I verify this at the bottom of the "Custom filtering rules" page in the 'Check the filtering' section.

However, it blocks ALL Clients on the network for the above sites. I just want it to block Morgan's computers for the above site list.

I've tried to just specify the Client 'Morgan' for the above, e.g.:

||caterhamcars.com^$important,client='Morgan'
or
||caterhamcars.com^$client='Morgan',important

And in either case, caterhamcars.com is then NO LONGER BLOCKED FOR ANY CLIENT on the the network -- which I can confirm with the 'Check the filtering' section on the bottom of the 'Custom blocking rules' page.

HELP!?!?

@theschles commented on GitHub (Sep 23, 2025): > Use custom filtering rules with clientID's or ctag's to block the domains on those devices only @Dynamic5912 please explain to me how per-client-blocking is supposed to work -- because at this point, IT'S NOT WORKING. AdguardHome Version: v0.107.66 <details> <summary>My current blocklist</summary> @@||google.com^$important @@||accounts.youtube.com^$important ||agenciamaisvoce.com^$important ||caterhamcars.com^$important ||daimleragemea.germany-2.evergage.com^$important ||doodle4google.com^$important ||doodles.google.com^$important ||doodles.google^$important ||eavesdropthenashame.com^$important ||f1.com^$important ||ferrari.com^$important ||formula1.com^$important ||formulaonedigitalmedia.germany-2.evergage.com^$important ||games.googleapis.com^$important ||gameswhitelisted.googleapis.com^$important ||lamborghini.com^$important ||mclaren.com^$important ||morgan-motor.com^$important ||play.googleapis.com^$important ||porsche.cloud^$important ||porsche.com^$important ||porsche.matomo.cloud^$important ||tiktok.com^$important ||watchliveformula1.com^$important ||withgoogle.com^$important </details> As you might have guessed from the above list, my son Morgan is obsessed with high-speed automotive racing -- to the detriment of his homework and grades. He has a school Chromebook -- which is why I have to allow-list google.com and accounts.youtube.com -- or he can't log into his school account. I have a Client named 'Morgan' -- with the Chromebook's DHCP reserved IP address listed in the Identifier list. The above block-list works -- I verify this at the bottom of the "Custom filtering rules" page in the 'Check the filtering' section. However, it blocks ALL Clients on the network for the above sites. I just want it to block Morgan's computers for the above site list. I've tried to just specify the Client 'Morgan' for the above, e.g.: `||caterhamcars.com^$important,client='Morgan'` or `||caterhamcars.com^$client='Morgan',important` And in either case, `caterhamcars.com` is then NO LONGER BLOCKED FOR ANY CLIENT on the the network -- which I can confirm with the 'Check the filtering' section on the bottom of the 'Custom blocking rules' page. HELP!?!?
Author
Owner

@Dynamic5912 commented on GitHub (Sep 24, 2025):

Is the client saved as a persistent client in AGH?

@Dynamic5912 commented on GitHub (Sep 24, 2025): Is the client saved as a persistent client in AGH?
Author
Owner

@theschles commented on GitHub (Sep 24, 2025):

Is the client saved as a persistent client in AGH?

@Dynamic5912 Yes

Image
@theschles commented on GitHub (Sep 24, 2025): > Is the client saved as a persistent client in AGH? @Dynamic5912 Yes <img width="1222" height="328" alt="Image" src="https://github.com/user-attachments/assets/2034327b-e438-4667-9a4d-525aebc9d96a" />
Author
Owner

@Dynamic5912 commented on GitHub (Sep 24, 2025):

Being a Chromebook - can you even see DNS logs for it in AGH?

It could have DOH set at the OS or Browser level that's bypassing your AGH

@Dynamic5912 commented on GitHub (Sep 24, 2025): Being a Chromebook - can you even see DNS logs for it in AGH? It could have DOH set at the OS or Browser level that's bypassing your AGH
Author
Owner

@theschles commented on GitHub (Sep 24, 2025):

Being a Chromebook - can you even see DNS logs for it in AGH?

It could have DOH set at the OS or Browser level that's bypassing your AGH

@Dynamic5912 yes his query history is there -- that's how I know what sites to block.

BTW:

  • At my router I block port 53 requests (DNS) from his Chromebook IP address.
  • I also forced his Chromebook configuration to use the DNS settings from the DHCP server -- and that DNS server is my AGH instance.
  • So the only way he can anything done is to go through AGH.
@theschles commented on GitHub (Sep 24, 2025): > Being a Chromebook - can you even see DNS logs for it in AGH? > > It could have DOH set at the OS or Browser level that's bypassing your AGH @Dynamic5912 yes his query history is there -- that's how I know what sites to block. BTW: * At my router I block port 53 requests (DNS) from his Chromebook IP address. * I also forced his Chromebook configuration to use the DNS settings from the DHCP server -- and that DNS server is my AGH instance. * So the only way he can anything done is to go through AGH.
Author
Owner

@theschles commented on GitHub (Sep 24, 2025):

@Dynamic5912 if you'd like to see it with your own two eyes, I can set up a screenshare. Today I'm available for the next 2-1/2 hours (until 18:00 Pacific). I can publish a Zoom / Google Meet / pick-your-preferred-screenshare-link here at a private repo that's only accessible to the two of us.

@theschles commented on GitHub (Sep 24, 2025): @Dynamic5912 if you'd like to see it with your own two eyes, I can set up a screenshare. Today I'm available for the next 2-1/2 hours (until 18:00 Pacific). I can publish a Zoom / Google Meet / pick-your-preferred-screenshare-link [here at a private repo](https://github.com/theschles/Dynamic5912/blob/main/README.md) that's only accessible to the two of us.
Author
Owner

@theschles commented on GitHub (Sep 25, 2025):

@Dynamic5912 I'm available most of the day if you'd like me to set up a screenshare.

@theschles commented on GitHub (Sep 25, 2025): @Dynamic5912 I'm available most of the day if you'd like me to set up a screenshare.
Author
Owner

@Dynamic5912 commented on GitHub (Sep 25, 2025):

Add a client identifier to the persistent device with the same name as the device name.

Then see if the blocking rule works.

@Dynamic5912 commented on GitHub (Sep 25, 2025): Add a client identifier to the persistent device with the same name as the device name. Then see if the blocking rule works.
Author
Owner

@theschles commented on GitHub (Sep 26, 2025):

Add a client identifier to the persistent device with the same name as the device name.

Then see if the blocking rule works.

By "device name", do you mean hostname?

And you're suggesting to add that "device name" (hostname) to the "Identifiers" section for his particular client -- which currently has the IP addresses for his Chromebook and his personal laptop?

Image

Or are you suggesting that the "Custom filtering rule" be along the lines of:
||caterhamcars.com^$important,client='<hostname>'
or
||caterhamcars.com^$important,client='<IP address of his Chromebook>'
?

@theschles commented on GitHub (Sep 26, 2025): > Add a client identifier to the persistent device with the same name as the device name. > > Then see if the blocking rule works. By "device name", do you mean `hostname`? And you're suggesting to add that "device name" (`hostname`) to the "Identifiers" section for his particular client -- which currently has the IP addresses for his Chromebook and his personal laptop? <img width="651" height="249" alt="Image" src="https://github.com/user-attachments/assets/52c5669d-7185-4d84-ad8f-4fc84ef99390" /> Or are you suggesting that the "Custom filtering rule" be along the lines of: `||caterhamcars.com^$important,client='<hostname>'` or `||caterhamcars.com^$important,client='<IP address of his Chromebook>'` ?
Author
Owner

@Dynamic5912 commented on GitHub (Sep 26, 2025):

Add as an identifier to the client, yes

@Dynamic5912 commented on GitHub (Sep 26, 2025): Add as an identifier to the client, yes
Author
Owner

@hero-rareheart commented on GitHub (Oct 15, 2025):

This isn't going to show up because GitHub is stupid and shadow banned my account for nothing, but I also would like this feature. I have a specific client I want following a whitelist and all the other clients following a set of blacklists.

@hero-rareheart commented on GitHub (Oct 15, 2025): This isn't going to show up because GitHub is stupid and shadow banned my account for nothing, but I also would like this feature. I have a specific client I want following a whitelist and all the other clients following a set of blacklists.
Author
Owner

@theschles commented on GitHub (Oct 21, 2025):

This isn't going to show up because GitHub is stupid and shadow banned my account for nothing, but I also would like this feature. I have a specific client I want following a whitelist and all the other clients following a set of blacklists.

Hi @hero-rareheart -- I can see your post

@theschles commented on GitHub (Oct 21, 2025): > This isn't going to show up because GitHub is stupid and shadow banned my account for nothing, but I also would like this feature. I have a specific client I want following a whitelist and all the other clients following a set of blacklists. Hi @hero-rareheart -- I can see your post
Author
Owner

@mostpinkest commented on GitHub (Nov 10, 2025):

Possible duplicate of #435

@mostpinkest commented on GitHub (Nov 10, 2025): Possible duplicate of #435
Author
Owner

@fegauthier-paragon commented on GitHub (Mar 2, 2026):

I did a PR for that feature.

https://github.com/AdguardTeam/AdGuardHome/pull/8274

@fegauthier-paragon commented on GitHub (Mar 2, 2026): I did a PR for that feature. https://github.com/AdguardTeam/AdGuardHome/pull/8274
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
starred/AdGuardHome#5781
No description provided.