1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
|
local function prepare_cache()
cache.open(100*MB)
cache.clear()
local ffi = require('ffi')
local c = kres.context().cache
local passthru_addr = '\127\0\0\9'
rr_passthru = kres.rrset(todname('rpzpassthru.'), kres.type.A, kres.class.IN, 2147483647)
assert(rr_passthru:add_rdata(passthru_addr, #passthru_addr))
assert(c:insert(rr_passthru, nil, ffi.C.KR_RANK_SECURE + ffi.C.KR_RANK_AUTH))
c:commit()
end
local check_answer = require('test_utils').check_answer
local function test_rpz()
check_answer('"CNAME ." return NXDOMAIN',
'nxdomain.', kres.type.A, kres.rcode.NXDOMAIN)
check_answer('"CNAME *." return NODATA',
'nodata.', kres.type.A, kres.rcode.NOERROR, {})
check_answer('"CNAME *. on wildcard" return NODATA',
'nodata.nxdomain.', kres.type.A, kres.rcode.NOERROR, {})
check_answer('"CNAME rpz-drop." be dropped',
'rpzdrop.', kres.type.A, kres.rcode.SERVFAIL)
check_answer('"CNAME rpz-passthru" return A rrset',
'rpzpassthru.', kres.type.A, kres.rcode.NOERROR, '127.0.0.9')
check_answer('"A 192.168.5.5" return local A rrset',
'rra.', kres.type.A, kres.rcode.NOERROR, '192.168.5.5')
check_answer('"A 192.168.6.6" with suffixed zone name in owner return local A rrset',
'rra-zonename-suffix.', kres.type.A, kres.rcode.NOERROR, '192.168.6.6')
check_answer('"A 192.168.7.7" with suffixed zone name in owner return local A rrset',
'testdomain.rra.', kres.type.A, kres.rcode.NOERROR, '192.168.7.7')
check_answer('non existing AAAA on rra domain return NODATA',
'rra.', kres.type.AAAA, kres.rcode.NOERROR, {})
check_answer('"A 192.168.8.8" and domain with uppercase and lowercase letters',
'case.sensitive.', kres.type.A, kres.rcode.NOERROR, '192.168.8.8')
check_answer('"A 192.168.8.8" and domain with uppercase and lowercase letters',
'CASe.SENSItivE.', kres.type.A, kres.rcode.NOERROR, '192.168.8.8')
check_answer('two AAAA records',
'two.records.', kres.type.AAAA, kres.rcode.NOERROR,
{'2001:db8::2', '2001:db8::1'})
end
local function test_rpz_soa()
check_answer('"CNAME ." return NXDOMAIN (SOA origin)',
'nxdomain-fqdn.', kres.type.A, kres.rcode.NXDOMAIN)
check_answer('"CNAME *." return NODATA (SOA origin)',
'nodata-fqdn.', kres.type.A, kres.rcode.NOERROR, {})
end
net.ipv4 = false
net.ipv6 = false
prepare_cache()
policy.add(policy.rpz(policy.DENY, 'policy.test.rpz'))
policy.add(policy.rpz(policy.DENY, 'policy.test.rpz.soa'))
return {
test_rpz,
test_rpz_soa,
}
|