added soa nameserver validator

This commit is contained in:
olegphenomenon 2022-01-06 13:45:15 +02:00
parent 3f0c1211da
commit 57e653e9e6
3 changed files with 77 additions and 20 deletions

View file

@ -32,6 +32,10 @@ class ValidateDnssecJob < ApplicationJob
def iterate_nameservers(domain)
domain.nameservers.each do |n|
result_nameserver_validation = SoaNameserverQuery.validate(domain_name: domain.name, hostname: n.hostname)
return unless result_nameserver_validation
validate(hostname: n.hostname, domain: domain)
notify_contacts(domain)

View file

@ -0,0 +1,49 @@
module SoaNameserverQuery
include Dnsruby
extend self
def validate(domain_name:, hostname:)
resolver = create_resolver(hostname)
answers = resolver.query(domain_name, 'SOA', 'IN')
answers.answer.each do |a|
if a.serial.nil?
logger.info "No serial number of nameserver found"
return false
end
serial_number = a.serial.to_s
p "-------------- >>"
p "serial number #{serial_number} of #{hostname} - domain name: #{domain_name}"
p "<< --------------"
true
end
rescue StandardError => e
logger.error e.message
logger.error "failed #{hostname} validation of #{domain_name} domain name"
false
end
private
def create_resolver(nameserver)
resolver = Dnsruby::Resolver.new
resolver.retry_times = 3
resolver.recurse = 0 # Send out non-recursive queries
# disable caching otherwise SOA is cached from first nameserver queried
resolver.do_caching = false
resolver.nameserver = nameserver
resolver
end
def logger
@logger ||= Rails.logger
end
end