I won’t descripe what pDNS is, just the nitty gritty setup. I have chosen PassiveDNS from Edward Bjarte FjellskÃ¥l as my pDNS software of choice and here is how you set it up:
as root do:
apt-get install git-core binutils-dev libldns1 libldns-dev libpcap-dev
git clone git://github.com/gamelinux/passivedns.git
cd passivedns/src/
make
optional:
make install
If you want to start it up manually, you can write (using 16 MB mem, increase to your needs):
./passivedns -i eth0 -S 16 -l /var/log/passivedns.log -L /var/log/passivedns-nx.log -P 86400 -X 46CDNOPRSTMnx -D
(Note: “-D” lets it run as daemon)
You will see /var/log/passivedns.log quickly populate now, that’s it! :-) The raw logs will look something like this:
1391544435.431674||127.0.0.1||8.8.8.8||IN||wordpress.org.||A||66.155.40.249||168||1
1391544435.431674||127.0.0.1||8.8.8.8||IN||wordpress.org.||A||66.155.40.250||168||1
1391544444.563846||127.0.0.1||8.8.8.8||IN||akismet.com.||A||66.135.58.59||187||1
1391544444.563846||127.0.0.1||8.8.8.8||IN||akismet.com.||A||66.135.58.60||187||1
1391544444.564107||127.0.0.1||8.8.8.8||IN||codex.wordpress.org.||A||66.155.40.241||3672||1
1391544444.584109||127.0.0.1||8.8.8.8||IN||planet.wordpress.org.||CNAME||wordpress.org.||10561||1
1391544639.743394||127.0.0.1||8.8.8.8||IN||plus.google.com.||A||173.194.113.69||200||1
1391544639.743394||127.0.0.1||8.8.8.8||IN||plus.google.com.||A||173.194.113.66||200||1
1391544639.743394||127.0.0.1||8.8.8.8||IN||plus.google.com.||A||173.194.113.73||200||1
1391544639.743394||127.0.0.1||8.8.8.8||IN||plus.google.com.||A||173.194.113.64||200||1
1391544639.743394||127.0.0.1||8.8.8.8||IN||plus.google.com.||A||173.194.113.68||200||1
1391544639.743394||127.0.0.1||8.8.8.8||IN||plus.google.com.||A||173.194.113.72||200||1
1391544639.743394||127.0.0.1||8.8.8.8||IN||plus.google.com.||A||173.194.113.65||200||1
1391544639.743394||127.0.0.1||8.8.8.8||IN||plus.google.com.||A||173.194.113.71||200||1
1391544639.743394||127.0.0.1||8.8.8.8||IN||plus.google.com.||A||173.194.113.67||200||1
1391544639.743394||127.0.0.1||8.8.8.8||IN||plus.google.com.||A||173.194.113.70||200||1
1391544639.743394||127.0.0.1||8.8.8.8||IN||plus.google.com.||A||173.194.113.78||200||1
1391544640.098157||127.0.0.1||8.8.8.8||IN||github.com.||A||192.30.252.131||7||1
1391544640.216162||127.0.0.1||8.8.8.8||IN||ssl-google-analytics.l.google.com.||A||173.194.112.30||299||1
Okay, bonus part, put it all in a MySQL Database:
Install datetime perl module
apt-get install libdatetime-perl
Create a pDNS MySQL user, database and password:
GRANT USAGE ON *.* TO 'pdns'@'localhost' IDENTIFIED BY 'pdns';
GRANT SELECT,CREATE,INSERT,UPDATE ON pdns.* TO 'pdns'@'localhost';
flush privileges;
CREATE DATABASE pdns;
(in passivedns directory, with passivedns daemon running do)
cd tools
perl pdns2db.pl --file /var/log/passivedns.log
Now the data is put into MySQL. You can check it using “echo “select * from pdns limit 10;” | mysql -updns -ppdns -hlocalhost pdns“.
It will look something like:
ID QUERY MAPTYPE RR ANSWER TTL COUNT FIRST_SEEN LAST_SEEN
38 www.google.com A IN 173.194.116.211 296 1 2014-02-04 16:42:06 2014-02-04 16:42:06
39 www.google.com A IN 173.194.116.209 296 1 2014-02-04 16:42:06 2014-02-04 16:42:06
40 www.google.com A IN 173.194.116.210 296 1 2014-02-04 16:42:06 2014-02-04 16:42:06
41 www.google.com A IN 173.194.116.208 296 1 2014-02-04 16:42:06 2014-02-04 16:42:06
42 www.google.com A IN 173.194.116.212 296 1 2014-02-04 16:42:06 2014-02-04 16:42:06
44 plus.google.com A IN 173.194.112.36 299 1 2014-02-04 16:42:06 2014-02-04 16:42:06
45 plus.google.com A IN 173.194.112.32 299 1 2014-02-04 16:42:06 2014-02-04 16:42:06
46 plus.google.com A IN 173.194.112.33 299 1 2014-02-04 16:42:06 2014-02-04 16:42:06
47 plus.google.com A IN 173.194.112.41 299 1 2014-02-04 16:42:06 2014-02-04 16:42:06
48 plus.google.com A IN 173.194.112.38 299 1 2014-02-04 16:42:06 2014-02-04 16:42:06
49 plus.google.com A IN 173.194.112.46 299 1 2014-02-04 16:42:06 2014-02-04 16:42:06
50 plus.google.com A IN 173.194.112.37 299 1 2014-02-04 16:42:06 2014-02-04 16:42:06
51 plus.google.com A IN 173.194.112.34 299 1 2014-02-04 16:42:06 2014-02-04 16:42:06
52 plus.google.com A IN 173.194.112.39 299 1 2014-02-04 16:42:06 2014-02-04 16:42:06
53 plus.google.com A IN 173.194.112.40 299 1 2014-02-04 16:42:06 2014-02-04 16:42:06
54 plus.google.com A IN 173.194.112.35 299 1 2014-02-04 16:42:06 2014-02-04 16:42:06
Here is a post which describes how to add logging of client IPs into the MySQL DB.