From 5ee1cb2d7622fa33da55c89e5f367f2eb38bae6a Mon Sep 17 00:00:00 2001 From: Arkadietz Date: Sun, 2 Oct 2016 16:54:43 +0300 Subject: [PATCH] dnsbl.js Hello, This is update of the existing dnsbl.js. This patch allow you to use multiple databases insted of one. If you decide to include it to original source will be nice. Cheers :) --- dnsbl.js | 113 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 113 insertions(+) create mode 100644 dnsbl.js diff --git a/dnsbl.js b/dnsbl.js new file mode 100644 index 000000000..f3516a771 --- /dev/null +++ b/dnsbl.js @@ -0,0 +1,113 @@ +/** + * DNS Blacklist support + * + * Check the client against a blacklist before connection to an IRC server + */ + +var dns = require('dns'), + kiwiModules = require('../server/modules'); + + +// The available DNS zones to check against +//var bl_zones = { + //dronebl: '.dnsbl.dronebl.org' +//}; + +var bl_zones = [ + + '.dnsbl.dronebl.org', + '.tor.dnsbl.sectoor.de', + '.tor.kewlio.net.uk', + '.socks.dnsbl.sorbs.net', + '.dnsbl.dronebl.org', + '.rbl.efnet.org', + '.rbl.efnetrbl.org' + +]; + +// The DNS zone we should use +//var current_bl = 'dronebl'; + +var module = new kiwiModules.Module('DNSBL'); + +module.on('irc connecting', function (event, event_data) { + event.wait = true; + + var client_addr = event_data.connection.state.client.websocket.meta.real_address; + + //isBlacklisted(client_addr, function(is_blocked) { + //if (is_blocked) { + //var err = new Error('DNSBL blocked (' + client_addr + ')'); + //err.code = 'Blacklisted'; + + //event_data.connection.emit('error', err); + //event.preventDefault(); + //event.callback(); + + //} else { + //event.callback(); + //} + //}); + + //lets walk through our array - @ivo + for(i = 0; i < bl_zones.length; i++) { + + var host_lookup = reverseIp(client_addr) + bl_zones[i]; + + checkBlacklist(bl_zones[i], host_lookup, function(state, ip, blacklist) { + + if(state) { + + var err = new Error('DNSBL blocked (' + client_addr + ') on (' + blacklist + ''); + err.code = 'Blacklisted'; + + event_data.connection.emit('error', err); + event.preventDefault(); + event.callback(); + + } else event.callback(); + + }); + + } + +}); + +//we will check foreach host with that - @ivo +function checkBlacklist(blacklist, ip, callback) { + + dns.resolve4(ip, function(err, domain) { + + if (err) { + + callback(false, ip, blacklist); + + } else { + + callback(true, ip, blacklist); + + } + + }); + +} + +// The actual checking against the DNS blacklist +//function isBlacklisted(ip, callback) { + // var host_lookup = reverseIp(ip) + bl_zones[current_bl]; + + //dns.resolve4(host_lookup, function(err, domain) { + //if (err) { + // Not blacklisted + //callback(false); + //} else { + // It is blacklisted + //callback(true); + //} + //}); +//} + + +function reverseIp(ip) { + return ip.split('.').reverse().join('.'); +}