You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Ubuntu系统下Bind9 DNS配置白名单:仅允许指定网站访问,屏蔽其余所有网络连接

Ubuntu系统下Bind9 DNS配置白名单:仅允许指定网站访问,屏蔽其余所有网络连接

兄弟,我来帮你搞定这个Bind9的白名单配置问题!之前你试了RPZ和转发没成功,大概率是配置细节没做对,我给你一步步捋清楚:

先确认Bind9状态

首先确保你的Bind9是正常运行的,先查状态:

sudo systemctl status bind9

如果没启动就先启动:

sudo systemctl start bind9

顺便设个开机自启,省得重启后还要手动开:

sudo systemctl enable bind9

第一步:创建RPZ白名单区域文件

RPZ(Response Policy Zone)是Bind官方推荐的黑白名单实现方式,咱们用它来做白名单。在/etc/bind/目录下新建一个RPZ配置文件,比如rpz-whitelist.db

sudo nano /etc/bind/rpz-whitelist.db

把下面的内容粘贴进去,记得替换成你要允许的网站:

$TTL    604800
@       IN      SOA     localhost. root.localhost. (
                              2         ; Serial,每次修改文件后把这个数字+1
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;
@       IN      NS      localhost.

; ========== 这里是你的白名单网站 ==========
google.com.    IN      A       8.8.8.8  # 替换成网站的真实IP,或者用CNAME也行
github.com.    IN      A       140.82.113.3
www.baidu.com. IN      CNAME   www.a.shifen.com.  # 有些网站用CNAME更灵活
; 可以继续添加更多你需要允许的域名,包括子域名

; ========== 屏蔽所有其他域名 ==========
*       IN      A       0.0.0.0  # 所有非白名单域名解析到无效IP,无法访问

保存退出(nano里按Ctrl+O,回车,再Ctrl+X)。

第二步:修改Bind主配置文件

接下来修改Bind的主配置/etc/bind/named.conf.options,把RPZ和转发配置加进去:

sudo nano /etc/bind/named.conf.options

把内容改成这样(注意替换你的局域网网段,比如192.168.1.0/24):

options {
        directory "/var/cache/bind";

        // 允许你的客户端网段查询解析,替换成你的局域网IP段
        recursion yes;
        allow-recursion { 127.0.0.1; 192.168.1.0/24; };
        allow-query { 127.0.0.1; 192.168.1.0/24; };

        // 配置转发器,把白名单域名的解析请求转发到公共DNS(比如谷歌的8.8.8.8)
        forwarders {
                8.8.8.8;
                8.8.4.4;
        };
        forward only;

        // 启用RPZ规则,指向咱们刚才创建的白名单区域
        response-policy {
                zone "rpz-whitelist";
        };
};

// 引入RPZ白名单区域文件
zone "rpz-whitelist" {
        type master;
        file "/etc/bind/rpz-whitelist.db";
        allow-query { none; }; // 禁止外部查询这个白名单区域,保证安全
};

保存退出。

第三步:验证配置并重启服务

先检查配置文件的语法是否正确,避免出错:

sudo named-checkconf  # 检查主配置
sudo named-checkzone rpz-whitelist /etc/bind/rpz-whitelist.db  # 检查RPZ区域文件

如果没有报错,就重启Bind9让配置生效:

sudo systemctl restart bind9

第四步:在客户端测试效果

把客户端的DNS服务器地址改成你的Bind服务器的IP,然后测试:

  • 访问白名单里的网站,比如ping google.com,应该能正常解析到正确IP并连通
  • 访问非白名单网站,比如ping yahoo.com,应该会解析到0.0.0.0,无法访问

一些重要注意事项

  • 子域名需要单独添加:比如如果要允许mail.google.com,得在RPZ文件里单独加一条记录,不然默认会被屏蔽
  • 网站IP可能变化:如果用A记录,定期检查网站的官方IP;用CNAME会更灵活,自动跟随目标IP变化
  • 修改RPZ文件后要更新Serial号:每次修改白名单,把文件里的Serial数字加1,然后重启Bind或者用sudo rndc reload重载配置
  • 确保客户端网段正确:allow-recursionallow-query里的网段一定要包含你的客户端IP,不然客户端无法使用这个DNS服务

备注:内容来源于stack exchange,提问作者Imran Ikram

火山引擎 最新活动