1.要点

1.响应策略区域(Response policy zones
bind9创建rpz 用于过滤本地客户端发起的dns查询,通过制定的规则过滤掉某些域名,通常返回 NXDOMAIN
详见 https://cloud.tencent.com/developer/article/2168926
2.获取 ad 域名记录表 来源 https://antiad.net/
可用于 bind9 rpz使用 https://antiad.net/domains.txt

2.配置rpz

  1. /etc/bind/named.conf.options 添加 responsepolicy
    options{

    #responsepolicy{zone “rpz”;}; # 增加响应策略
    #推荐这条
    responsepolicy { zone “rpz”; } qnamewaitrecurse no;

    };

  2. 创建 rpz zone
    zone “rpz”{
    type master;
    file “/etc/bind/db.rpz”;
    allowupdate{none;};
    allowtransfer{none;}; #如果存在多台bind 可用于主从同步改rpz zone
    allowquery{any;};
    };

  3. 创建 rpz日志(可选)
    channel rpzlog {
    file “/var/log/named/rpz.logversions unlimited size 100m;
    printtime yes;
    printcategory yes;
    printseverity yes;
    severity info;
    };
    category rpz { rpzlog; };

  4. 创建 /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.

3.拦截ad域名

  1. 测试
    添加域名 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
    dig 返回 status NXDOMAIN
    拦截原理就是db.rpz 添加 域名 然后创建别名到 .
    格式
    DOMAIN CNAME .
    *.DOMAIN CNAME .

4.anti-ad.net

域名收集了大量的ad域名 可用于bind9的链接 https://anti-ad.net/domains.txt
下载制作db.rpz 识别格式即可

  1. 脚本 bind-updateadrpz.sh
#!/bin/sh

#set -x

#原理 定义一组域名 然后 本地定义CNAME 到 . 或@ 让该域名 解析失败
#如需要屏蔽的域名 test.combind 创建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

值得注意

  1. #使用保留指定行数的方法 —————————–
    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-clientip CNAME rpz-drop.
这个条目用于拦截本地子网某个地址发起的dns请求
如果 追加需要保留的条目需要修改head行数
head -11 /etc/bind/db.rpz

  1. 文件中的OLD_ADDOMAIN_MD5 用于记录版本domain.txt的md5值,如果从未执行更新则该值为0(默认)
    下载domain.txt md5值NEWMD5 如果与OLDMD5 不一致 则会更新 /etc/bind/db.rpz文件,并将新的md5值记录到脚本的OLD_ADDOMAIN_MD5

  2. .添加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进行投诉反馈,一经查实,立即删除

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注