From 7da9e64c27cda4147a6262ff8846e923c9979496 Mon Sep 17 00:00:00 2001 From: Daniel Date: Wed, 8 Apr 2020 14:07:59 +0200 Subject: [PATCH] Save blocked DNS queries --- nameserver/nameserver.go | 9 ++++++--- network/connection.go | 7 +++---- network/dns.go | 5 +++-- 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/nameserver/nameserver.go b/nameserver/nameserver.go index c2ee2ef3..f4b10fa7 100644 --- a/nameserver/nameserver.go +++ b/nameserver/nameserver.go @@ -195,11 +195,11 @@ func handleRequest(ctx context.Context, w dns.ResponseWriter, query *dns.Msg) er case network.VerdictBlock: tracer.Infof("nameserver: %s blocked, returning nxdomain", conn) returnNXDomain(w, query) - // FIXME: save denied dns connection + conn.Save() // save blocked request return nil case network.VerdictDrop: tracer.Infof("nameserver: %s dropped, not replying", conn) - // FIXME: save denied dns connection + conn.Save() // save dropped request return nil } @@ -218,7 +218,7 @@ func handleRequest(ctx context.Context, w dns.ResponseWriter, query *dns.Msg) er if rrCache == nil { tracer.Infof("nameserver: %s implicitly denied by filtering the dns response, returning nxdomain", conn) returnNXDomain(w, query) - // FIXME: save denied dns connection + conn.Save() // save blocked request return nil } @@ -265,5 +265,8 @@ func handleRequest(ctx context.Context, w dns.ResponseWriter, query *dns.Msg) er _ = w.WriteMsg(m) tracer.Debugf("nameserver: returning response %s%s to %s", q.FQDN, q.QType, conn.Process()) + // save dns request as open + network.SaveOpenDNSRequest(conn) + return nil } diff --git a/network/connection.go b/network/connection.go index 1577d5c8..5a0626c3 100644 --- a/network/connection.go +++ b/network/connection.go @@ -71,7 +71,6 @@ func NewConnectionFromDNSRequest(ctx context.Context, fqdn string, ip net.IP, po Started: timestamp, Ended: timestamp, } - saveOpenDNSRequest(dnsConn) return dnsConn } @@ -218,8 +217,8 @@ func (conn *Connection) SaveWhenFinished() { conn.saveWhenFinished = true } -// save saves the link object in the storage and propagates the change. -func (conn *Connection) save() { +// Save saves the connection in the storage and propagates the change through the database system. +func (conn *Connection) Save() { if conn.ID == "" { // dns request @@ -336,7 +335,7 @@ func (conn *Connection) packetHandler() { // must not be locked, will deadlock with cleaner functions if conn.saveWhenFinished { conn.saveWhenFinished = false - conn.save() + conn.Save() } // submit trace logs log.Tracer(pkt.Ctx()).Submit() diff --git a/network/dns.go b/network/dns.go index 2b0f2301..88ca7be3 100644 --- a/network/dns.go +++ b/network/dns.go @@ -26,7 +26,8 @@ func removeOpenDNSRequest(pid int, fqdn string) { delete(openDNSRequests, key) } -func saveOpenDNSRequest(conn *Connection) { +// SaveOpenDNSRequest saves a dns request connection that was allowed to proceed. +func SaveOpenDNSRequest(conn *Connection) { openDNSRequestsLock.Lock() defer openDNSRequestsLock.Unlock() @@ -65,7 +66,7 @@ func writeOpenDNSRequestsToDB() { for id, conn := range openDNSRequests { conn.Lock() if conn.Ended < threshold { - conn.save() + conn.Save() delete(openDNSRequests, id) } conn.Unlock()