広告ブロックをbindで

bindの設定ファイル、named.confにincludeすれば良いだけ。リストのファイルを取得して、bindの設定ファイルの書式に変換する簡単な(汚い)phpで。この出力を/etc/named/named.nullとかに吐き出してinclude。

#!/usr/bin/php -q
<?php
define("URL", "https://280blocker.net/files/280blocker_domain_%d%02d.txt");
define("CONF_FMT", '    zone "%s" {
                type master;
                allow-query { localnet; };
                file "null.zone";
                allow-update { none; };
        };
');
$now = getdate();
$url = sprintf(URL, $now["year"], $now["mon"]);
$list = array_unique(file($url));
foreach($list as $l){
        $trimmed = preg_replace("/[\x01-\x1F\x80-\xFF]/", "", trim($l));
        if(strlen($trimmed) > 1){
                if(preg_match("/\w/", substr($trimmed, 0, 1) != "#")){
                        printf(CONF_FMT, $trimmed);
                }
        }
}
?>

追記:Pythonで書き直した