1.要点
1.响应策略区域(Response policy zones)
在bind9创建rpz 用于过滤本地客户端发起的dns查询,通过制定的规则过滤掉某些域名,通常返回 NXDOMAIN
详见 https://cloud.tencent.com/developer/article/2168926
2.获取 ad 域名的记录表 来源 https://anti–ad.net/
可用于 bind9 rpz的 使用 https://anti–ad.net/domains.txt
2.配置rpz
-
/etc/bind/named.conf.options 添加 response–policy
options{
…
#response–policy{zone “rpz”;}; # 增加响应策略
#推荐这条
response–policy { zone “rpz”; } qname–wait–recurse no;
…
}; -
创建 rpz zone
zone “rpz”{
type master;
file “/etc/bind/db.rpz”;
allow–update{none;};
allow–transfer{none;}; #如果存在多台bind 可用于主从同步改rpz zone
allow–query{any;};
}; -
创建 rpz日志(可选)
channel rpzlog {
file “/var/log/named/rpz.log” versions unlimited size 100m;
print–time yes;
print–category yes;
print–severity yes;
severity info;
};
category rpz { rpzlog; };
$TTL 300
@ SOA localhost. hostmaster.yourdomain.lan. (
2020050400 ; Serial number
1h ; Refresh every minute
15m ; Retry every minute
30d ; Expire in 5 days
2h ; negative caching ttl 1 minute
)
NS localhost.
3.拦截ad域名
- 测试
添加域名 example.com 然后测试是否返回 NXDOMAIN
在 /etc/bind/db.rpz 追加
example.com CNAME .
*.example.com CNAME .
然后重载服务
sudo named-checkzone rpz /etc/bind/db.rpz
sudo rndc reload
测试 dig example.com
dig 返回 status NXDOMAIN
其拦截原理就是在 db.rpz 添加 域名 然后创建别名到 .
格式
DOMAIN CNAME .
*.DOMAIN CNAME .
4.anti-ad.net
该域名收集了大量的ad域名 可用于bind9的链接 https://anti-ad.net/domains.txt
下载并制作为 db.rpz 识别的格式即可
#!/bin/sh
#set -x
#原理 定义一组域名 然后 本地定义CNAME 到 . 或@ 让该域名 解析失败
#如需要屏蔽的域名 test.com 在bind 创建zone
#定义 test.com CNAME .
#以及 *.test.com CNAME .
#在named.conf options 配置 response-policy { zone "rpz"; } qname-wait-recurse no;
#zone "rpz"{
# type master;
# file "/etc/bind/db.rpz";
# allow-update{none;};
# allow-transfer{none;};
# allow-query{none;};
#};
#ad域名来源 https://anti-ad.net/domains.txt 会不定时更新,因此需要定时从该网站下载ad域名列表文件到rpz文件,保持域名屏蔽同步
URL="https://anti-ad.net/domains.txt"
#记录上次下载的domains.txt的md5 用于验证本次下载文件md5值是否一致,如果不一致表示domain列表有变化,需要执行更新操作,该值初始为0,需要每次执行时从当前脚本文件获取该值并同步写入
#该值初始化为0
OLD_ADDOMAIN_MD5=0
wget -t5 -w 5 -nd "${URL}" -q -O /tmp/bind-newad.txt
[ -e /tmp/bind-newad.txt ] || exit 1
NEWMD5=`md5sum /tmp/bind-newad.txt|awk -F " " '{print $1}'`
THISSCR=$(cd $(dirname $0);pwd)
THISSCR="$THISSCR/bind-update-adrpz.sh"
OLDMD5=`cat $THISSCR | grep -m 1 OLD_ADDOMAIN_MD5|awk -F "=" '{print $2}'`
#如果新旧md5值不一致 说明有变化
if [ "$OLDMD5" != "$NEWMD5" ]; then
TITLE=$(head -1 /tmp/bind-newad.txt)
[ "$TITLE" = "#TITLE=anti-AD" ] || exit 1
#删除#开头的行
sed -i '/^#/d' /tmp/bind-newad.txt
#每个行尾 追加 CNAME .
sed -i 's/$/ CNAME ./' /tmp/bind-newad.txt
#为每个条目添加 *.xxx 到下一行
cp /tmp/bind-newad.txt /tmp/bind-newad2.txt
sed -i 's/^/*./g' /tmp/bind-newad2.txt
cat /tmp/bind-newad.txt /tmp/bind-newad2.txt > /tmp/bind-newad3.txt
sort -u /tmp/bind-newad3.txt >/dev/null 2>&1
#不能追加到 /etc/bind/db.rpz.blacklist 否则会存在失效的域名,文件越来越大,仅仅跟domains.txt保持同步即可
#cat /tmp/bind-newad.txt|tee -a /etc/bind/db.rpz.blacklist
#以NS localhost.为界限 保留之前的内容
#KEEPLINE=$(grep -m 1 -n "NS localhost." /etc/bind/db.rpz|awk -F ":" '{print $1}')
#head -n $KEEPLINE /etc/bind/db.rpz|tee /etc/bind/db.rpz
#使用保留指定行数的方法 -----------------------------
head -10 /etc/bind/db.rpz > /tmp/db.rpz
cat /tmp/db.rpz>/etc/bind/db.rpz
cat /tmp/bind-newad3.txt>> /etc/bind/db.rpz
rm /tmp/bind-newad.txt /tmp/bind-newad2.txt /tmp/bind-newad3.txt /tmp/db.rpz
chown bind:bind /etc/bind/db.rpz
named-checkzone rpz /etc/bind/db.rpz ; [ $? -eq 0 ] && rndc reload
#向当前脚本更新 OLD_ADDOMAIN_MD5 值
exec sed -i "s/OLD_ADDOMAIN_MD5=$OLDMD5/OLD_ADDOMAIN_MD5=$NEWMD5/g" $THISSCR
fi
这个脚本用于从 https://anti-ad.net/domains.txt 下载最新的ad域名 然后根据
DOMAIN CNAME .
*.DOMAIN CNAME .
的样式 添加到 /etc/bind/db.rpz
值得注意
- #使用保留指定行数的方法 —————————–
head -10 /etc/bind/db.rpz > /tmp/db.rpz
用于保留 /etc/bind/db.rpz 的原本从开头到指定行数的内容
例如 /etc/bind/db.rpz 开头通常是
$TTL 300
@ SOA localhost. hostmaster.yourdomain.lan. (
2020050400 ; Serial number
1h ; Refresh every minute
15m ; Retry every minute
30d ; Expire in 5 days
2h ; negative caching ttl 1 minute
)
NS localhost.
如果 你有需要保留的内容应该添加到 NS localhost.之后的行
如
32.2.1.168.192.rpz-client–ip CNAME rpz-drop.
这个条目用于拦截本地子网某个地址发起的dns请求
如果 追加需要保留的条目需要修改head的行数
如 head -11 /etc/bind/db.rpz
-
文件中的OLD_ADDOMAIN_MD5 用于记录就版本domain.txt的md5值,如果从未执行过更新则该值为0(默认)
新下载的domain.txt md5值NEWMD5 如果与OLDMD5 不一致 则会更新 /etc/bind/db.rpz文件,并将新的md5值记录到脚本的OLD_ADDOMAIN_MD5 -
.添加到crontab 定时更新
1 1 * * 1 root /usr/bin/sh /usr/local/bin/bind-update-adrpz.sh
5. 测试
原文地址:https://blog.csdn.net/weixin_44053794/article/details/128597528
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_35548.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!