手把手教你DIY一个DNS/HTTP带外查询工具


前段时间,cloadeye炒的沸沸扬扬,听说邀请码还挺贵的。算求了,花了一天时间自己DIY了一个简洁版,经过测试还是能用的。下面是具体的操作方法:

一、准备工作

  • 一个二级域名
  • 一个VPS

二、HTTP带外数据记录

默认情况下,Apache的日志是不入库的。需要修改httpd.conf,在LogFormat位置的地方添加如下代码:

  • 设置日志格式以及处理方式
1
LogFormat "INSERT INTO apachelog (ID, dateTime, IP, URL, code, host, userAgent, size, request) VALUES ( NULL , \"%{%Y-%m-%d %H:%M:%S}t\", \"%a\", \"%U\", \"%>s\", \" %{Host}i\", \"%{User-Agent}i\", %b, %T);" sqlcomm
 
CustomLog "| /usr/bin/mysql --user=root --password='******' --database=dns_http" sqlcomm

  • 设计数据库

  • 重启服务服务器之后,即可在数据库之中查看到访问日志

三、DNS带外数据记录

3.1 设置DNS记录

为什么要这么设置?因为我只有一台VPS,上面的意思就是为ns.xssyou.com添加一条A记录;为test.xssyou.com添加一条ns记录;上面的结果就是,当我查询.test.xssyou.com的DNS记录的时候,本地DNS服务器回到ns.xssyou.com去查询

3.2 VPS搭建DNS权威服务器

  • 安装bindDNS服务器

    1
    # yum -y install bind caching-nameserver
  • 修改配置文件/etc/named.conf如下图

  • 添加配置信息/etc/named.rfc1912.zone
1
zone "test.xssyou.com" in {
      type master;
      file "test.xssyou.com.zone";
};
  • 添加test.xssyou.com.zone文件
1
$TTL 0
       IN SOA  @ ns.xssyou.com. (
                                        0       ; serial
                                        0       ; refresh
                                        0       ; retry
                                        0       ; expire
                                        0 )     ; minimum
 
       IN      NS      ns.xssyou.com.
ns      IN      A       182.254.146.228
@       IN      A       1.1.1.1
a       IN      A       1.1.1.2
*       IN      A       8.8.8.8

3.3 数据监控入库

此时已经能够正常获取DNS的日志了,但是此时是获取不到日志的,需要进行如下操作

  • rndc status查看状态
  • rndc querylog开启日志
  • tail -f /var/log/messages动态查看DNS查询日志

最后,我写了一个Python脚本,动态捕获日志并入库。