Hi Andy,

The bind logs is from hostname rambutan/rambutan4. I did not specify the IP address for bind9 as it is set to listen to any. 

If I set the listen to specific, bind9 would fail to listen. Example.

13-Apr-2023 23:00:07.711 network: info: no longer listening
on 2001:ba8:1f1:f0b5::2#53
13-Apr-2023 23:00:07.711 network: info: no longer listening
on fe80::216:5eff:fe00:5f5%2#53
13-Apr-2023 23:03:41.664 network: info: no longer listening
on 127.0.0.1#53
13-Apr-2023 23:03:41.664 network: info: no longer listening
on 85.119.83.49#53
13-Apr-2023 23:03:41.664 network: info: no longer listening
on 85.119.82.135#53
13-Apr-2023 23:03:41.664 network: info

Anyhow, the defaults for the ufw was to deny incoming and deny outgoing. Below is the iptables -L output.

Chain INPUT (policy DROP)
target     prot opt source               destination

ufw-before-logging-input  all  --  anywhere             anyw
here
ufw-before-input  all  --  anywhere             anywhere

ufw-after-input  all  --  anywhere             anywhere

ufw-after-logging-input  all  --  anywhere             anywh
ere
ufw-reject-input  all  --  anywhere             anywhere

ufw-track-input  all  --  anywhere             anywhere


Chain FORWARD (policy DROP)
target     prot opt source               destination

ufw-before-logging-forward  all  --  anywhere             an
ywhere            
ufw-before-forward  all  --  anywhere             anywhere
         
ufw-after-forward  all  --  anywhere             anywhere

ufw-after-logging-forward  all  --  anywhere             any
where
ufw-reject-forward  all  --  anywhere             anywhere

ufw-track-forward  all  --  anywhere             anywhere


Chain OUTPUT (policy DROP)
target     prot opt source               destination

ufw-before-logging-output  all  --  anywhere             any
where
ufw-before-output  all  --  anywhere             anywhere

ufw-after-output  all  --  anywhere             anywhere

ufw-after-logging-output  all  --  anywhere             anyw
here
ufw-reject-output  all  --  anywhere             anywhere

ufw-track-output  all  --  anywhere             anywhere


Chain ufw-after-forward (1 references)
target     prot opt source               destination


Chain ufw-after-input (1 references)
target     prot opt source               destination

ufw-skip-to-policy-input  udp  --  anywhere             anyw
here             udp dpt:netbios-ns
ufw-skip-to-policy-input  udp  --  anywhere             anyw
here             udp dpt:netbios-dgm
ufw-skip-to-policy-input  tcp  --  anywhere             anyw
here             tcp dpt:netbios-ssn
ufw-skip-to-policy-input  tcp  --  anywhere             anyw
here             tcp dpt:microsoft-ds
ufw-skip-to-policy-input  udp  --  anywhere             anyw
here             udp dpt:bootps
ufw-skip-to-policy-input  udp  --  anywhere             anyw
here             udp dpt:bootpc
ufw-skip-to-policy-input  all  --  anywhere             anyw
here             ADDRTYPE match dst-type BROADCAST

Chain ufw-after-logging-forward (1 references)
target     prot opt source               destination


Chain ufw-after-logging-input (1 references)
target     prot opt source               destination


Chain ufw-after-logging-output (1 references)
target     prot opt source               destination


Chain ufw-after-output (1 references)
target     prot opt source               destination


Chain ufw-before-forward (1 references)
target     prot opt source               destination

ACCEPT     all  --  anywhere             anywhere
  ctstate RELATED,ESTABLISHED
ACCEPT     icmp --  anywhere             anywhere
  icmp destination-unreachable
ACCEPT     icmp --  anywhere             anywhere
  icmp time-exceeded
ACCEPT     icmp --  anywhere             anywhere
  icmp parameter-problem
ACCEPT     icmp --  anywhere             anywhere
  icmp echo-request
ufw-user-forward  all  --  anywhere             anywhere


Chain ufw-before-input (1 references)
target     prot opt source               destination

ACCEPT     all  --  anywhere             anywhere

ACCEPT     all  --  anywhere             anywhere
  ctstate RELATED,ESTABLISHED
ufw-logging-deny  all  --  anywhere             anywhere
         ctstate INVALID
DROP       all  --  anywhere             anywhere
  ctstate INVALID
ACCEPT     icmp --  anywhere             anywhere
  icmp destination-unreachable
ACCEPT     icmp --  anywhere             anywhere
  icmp time-exceeded
ACCEPT     icmp --  anywhere             anywhere
  icmp parameter-problem
ACCEPT     icmp --  anywhere             anywhere
  icmp echo-request
ACCEPT     udp  --  anywhere             anywhere
  udp spt:bootps dpt:bootpc
ufw-not-local  all  --  anywhere             anywhere

ACCEPT     udp  --  anywhere             224.0.0.251
  udp dpt:mdns
ACCEPT     udp  --  anywhere             239.255.255.250
  udp dpt:1900
ufw-user-input  all  --  anywhere             anywhere


Chain ufw-before-logging-forward (1 references)
target     prot opt source               destination


Chain ufw-before-logging-input (1 references)
target     prot opt source               destination


Chain ufw-before-logging-output (1 references)
target     prot opt source               destination


Chain ufw-before-output (1 references)
target     prot opt source               destination

ACCEPT     all  --  anywhere             anywhere

ACCEPT     all  --  anywhere             anywhere
  ctstate RELATED,ESTABLISHED
ufw-user-output  all  --  anywhere             anywhere


Chain ufw-logging-allow (0 references)
target     prot opt source               destination


Chain ufw-logging-deny (2 references)
target     prot opt source               destination


Chain ufw-not-local (1 references)
target     prot opt source               destination

RETURN     all  --  anywhere             anywhere
  ADDRTYPE match dst-type LOCAL
RETURN     all  --  anywhere             anywhere
  ADDRTYPE match dst-type MULTICAST
RETURN     all  --  anywhere             anywhere
  ADDRTYPE match dst-type BROADCAST
ufw-logging-deny  all  --  anywhere             anywhere
         limit: avg 3/min burst 10
DROP       all  --  anywhere             anywhere


Chain ufw-reject-forward (1 references)
target     prot opt source               destination


Chain ufw-reject-input (1 references)
target     prot opt source               destination


Chain ufw-reject-output (1 references)
target     prot opt source               destination


Chain ufw-skip-to-policy-forward (0 references)
target     prot opt source               destination

DROP       all  --  anywhere             anywhere


Chain ufw-skip-to-policy-input (7 references)
target     prot opt source               destination

DROP       all  --  anywhere             anywhere


Chain ufw-skip-to-policy-output (0 references)
target     prot opt source               destination

DROP       all  --  anywhere             anywhere


Chain ufw-track-forward (1 references)
target     prot opt source               destination


Chain ufw-track-input (1 references)
target     prot opt source               destination


Chain ufw-track-output (1 references)
target     prot opt source               destination


Chain ufw-user-forward (1 references)
target     prot opt source               destination


Chain ufw-user-input (1 references)
target     prot opt source               destination

           tcp  --  anywhere             rambutan.zystro.xyz
  tcp dpt:22 ctstate NEW recent: SET name: DEFAULT side:
source mask: 255.255.255.255
ufw-user-limit  tcp  --  anywhere             rambutan.zystr
o.xyz  tcp dpt:22 ctstate NEW recent: UPDATE seconds: 30
hit_count: 6 name: DEFAULT side: source mask: 255.255.255.25
5
ufw-user-limit-accept  tcp  --  anywhere             rambuta
n.zystro.xyz  tcp dpt:22
           tcp  --  anywhere             rambutan.zystro.xyz
  tcp dpt:ssh ctstate NEW recent: SET name: DEFAULT side: so
urce mask: 255.255.255.255
ufw-user-limit  tcp  --  anywhere             rambutan.zystr
o.xyz  tcp dpt:ssh ctstate NEW recent: UPDATE seconds: 30 hi
t_count: 6 name: DEFAULT side: source mask: 255.255.255.255
ufw-user-limit-accept  tcp  --  anywhere             rambuta
n.zystro.xyz  tcp dpt:ssh
ACCEPT     udp  --  anywhere             anywhere
  udp dpt:domain
ACCEPT     tcp  --  anywhere             anywhere
  tcp dpt:domain

Chain ufw-user-limit (2 references)
target     prot opt source               destination

REJECT     all  --  anywhere             anywhere
  reject-with icmp-port-unreachable

Chain ufw-user-limit-accept (2 references)
target     prot opt source               destination

ACCEPT     all  --  anywhere             anywhere


Chain ufw-user-logging-forward (0 references)
target     prot opt source               destination

RETURN     all  --  anywhere             anywhere


Chain ufw-user-logging-input (0 references)
target     prot opt source               destination

RETURN     all  --  anywhere             anywhere


Chain ufw-user-logging-output (0 references)
target     prot opt source               destination

RETURN     all  --  anywhere             anywhere


Chain ufw-user-output (1 references)
target     prot opt source               destination

ACCEPT     tcp  --  anywhere             rambutan.zystro.xyz
  tcp dpt:22
ACCEPT     udp  --  anywhere             anywhere
  udp dpt:ntp
ACCEPT     tcp  --  anywhere             anywhere
  tcp dpt:http
ACCEPT     tcp  --  anywhere             anywhere
  tcp dpt:https
ACCEPT     tcp  --  anywhere             anywhere
  tcp dpt:domain
ACCEPT     udp  --  anywhere             anywhere
  udp dpt:domain



Regards,
-badli

From: Andy Smith via BitFolk Users <users@mailman.bitfolk.com>
Sent: Sunday, April 23, 2023 11:03:20 PM
To: users@mailman.bitfolk.com <users@mailman.bitfolk.com>
Cc: Andy Smith <andy@bitfolk.com>
Subject: [bitfolk] Re: question on bind9 listening.
 
Hi Badli,

On Sun, Apr 23, 2023 at 02:30:36AM +0000, Badli Al Rashid via BitFolk Users wrote:
> For powerdns axfr transfer to bind secondary yes.When the firewall was not open the logs shows the below. 0 bytes as I recall.
>
> 19-Apr-2023 07:44:41.419 xfer-in: info: 0x7f9a84a8d
> c00: transfer of 'testingforonedomain.com/IN' from
> 2400:8901::f03c:93ff:fe63:5988#53: Transfer complet
> ed: 0 messages, 0 records, 0 bytes, 23.208 secs

This isn't the full log. This is just the log line saying that the
transfer is over. Yes it did fail otherwise it would be more than 0
records. But the reason for its failure is in another log line or
lines.

DNS zone transfers are always pull-based, i.e. they are initiated by
the secondary server. The other lines will also be saying which IP
address your BIND server chose as its source address for the
transfer. That might not be the address you think it should be, if
your BIND host has multiple IP addresses.

> For opening port 53 incoming and outgoing on all the interface, no. When it is open and not set to a specific IP address the AXFR is completed
>
> 9-Apr-2023 07:44:41.727 xfer-in: info: zone testin
> gforonedomain.com/IN: Transfer started.
> 19-Apr-2023 07:44:41.967 xfer-in: info: 0x7f5d90e31
> 000: transfer of 'testingforonedomain.com/IN' from
> 2400:8901::f03c:93ff:fe63:5988#53: connected using
> 2400:8901::f03c:93ff:fe63:5988#53
> 19-Apr-2023 07:44:42.447 xfer-in: info: zone testin
> gforonedomain.com/IN: transferred serial 2023041905
> 19-Apr-2023 07:44:42.447 xfer-in: info: 0x7f5d90e31
> 000: transfer of 'testingforonedomain.com/IN' from
> 2400:8901::f03c:93ff:fe63:5988#53: Transfer status:
>  success
> 19-Apr-2023 07:44:42.447 xfer-in: info: 0x7f5d90e31
> 000: transfer of 'testingforonedomain.com/IN' from
> 2400:8901::f03c:93ff:fe63:5988#53: Transfer complet
> ed: 3 messages, 14 records, 512 bytes, 0.480 secs (
> 1066 bytes/sec) (serial 2023041905)

Okay so these are logs from your BIND server (on what IP address?)
that successfully did a transfer in from your PowerDNS server at
2400:8901::f03c:93ff:fe63:5988 for the zone
testingforonedomain.com.

> For firewall it is ufw. Ssh rule omit

I am not familiar with ufw myself so I'm on shakly ground here and
might need to ask to see the actual iptables rules, but…

>
> To Action From
> -- ------ ----
>
> 53/udp ALLOW Anywhere
>
> 53/tcp ALLOW Anywhere
>
> 53/udp (v6) ALLOW Anywhere (v6
> )
> 53/tcp (v6) ALLOW Anywhere (v6
> )
>
>
> 123/udp ALLOW OUT Anywhere
>
> 80/tcp ALLOW OUT Anywhere
>
> 443/tcp ALLOW OUT Anywhere
>
> 53/tcp ALLOW OUT Anywhere
>
> 53/udp ALLOW OUT Anywhere
>
> 123/udp (v6) ALLOW OUT Anywhere (v6
> )
> 80/tcp (v6) ALLOW OUT Anywhere (v6
> )
> 443/tcp (v6) ALLOW OUT Anywhere (v6
> )
> 53/tcp (v6) ALLOW OUT Anywhere (v6
> )
> 53/udp (v6) ALLOW OUT Anywhere (v6
> )

…it looks like you're being strict about what traffic an go OUT as
well as what can come IN.

Is the above rule set what you have when you are trying to restrict
things or is it what you consider to be "open"? I see you have rules
allowing anything to come IN to port 53 UDP and TCP so is this the
"open" configuration you are referring to?

If this is the "open" configuration, tell us what exact rules you
are adding to tighten it up.

I don't know if ufw adds the rules that try to do connection
tracking to link together established and related flows. Even if it
does, I don't know if that will be enough to capture all the DNS
traffic. Your BIND server is going to source UDP flows from random
ports, not just port 53.

You need to get your dropped packets to be logged and follow the
logs to see what is happening when a zone transfer fails to work.

Thanks,
Andy

--
https://bitfolk.com/ -- No-nonsense VPS hosting