File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -13,7 +13,10 @@ RUN set -eux; \
1313 bind-tools \
1414 bind-dnssec-tools \
1515 openssl \
16- tzdata; \
16+ tzdata \
17+ fail2ban \
18+ iptables \
19+ ip6tables; \
1720 tar -C / -Jxpf /tmp/s6-overlay-noarch.tar.xz; \
1821 tar -C / -Jxpf /tmp/s6-overlay-x86_64.tar.xz; \
1922 rm -rf /tmp/* /var/cache/apk/* /etc/bind/*; \
@@ -22,6 +25,8 @@ RUN set -eux; \
2225COPY ./bind /etc/bind
2326COPY ./services.d /etc/services.d
2427COPY ./cont-init.d /etc/cont-init.d
28+ COPY ./fail2ban/jail.local /etc/fail2ban/jail.local
29+ COPY ./fail2ban/filter.d /etc/fail2ban/filter.d
2530
2631RUN chmod +x /etc/services.d/*/run /etc/cont-init.d/*
2732
Original file line number Diff line number Diff line change 11logging {
22 channel default_log { syslog daemon; severity info; print-severity yes; print-category yes; print-time yes; };
33 channel errors_log { syslog daemon; severity warning; print-severity yes; print-category yes; print-time yes; };
4+ channel security_file {
5+ file "/var/log/named/security.log" versions 3 size 10m;
6+ severity dynamic;
7+ print-severity yes;
8+ print-category yes;
9+ print-time yes;
10+ };
411
512 category default { default_log; };
613 category config { default_log; };
7- category security { errors_log; };
8- category xfer-in { default_log; };
9- category xfer-out { default_log; };
14+ category security { errors_log; security_file; };
15+ category xfer-in { default_log; security_file; };
16+ category xfer-out { default_log; security_file; };
1017 category update { default_log; };
1118 category dnssec { default_log; };
1219 category queries { default_log; };
Original file line number Diff line number Diff line change 1+ #! /bin/sh
2+
3+ log () {
4+ echo " [$( date ' +%Y-%m-%d %H:%M:%S' ) ] $1 "
5+ }
6+
7+ [ " ${FAIL2BAN_ENABLED:- false} " = " true" ] || { log " fail2ban disabled, skipping setup" ; exit 0; }
8+
9+ log " Create fail2ban runtime directories"
10+ mkdir -p /run/fail2ban /var/lib/fail2ban /var/log/fail2ban
11+
12+ log " Create named log directory"
13+ mkdir -p /var/log/named
14+ chown named:named /var/log/named
15+
16+ log " Pre-create security log so fail2ban can monitor it from startup"
17+ touch /var/log/named/security.log
18+ chown named:named /var/log/named/security.log
Original file line number Diff line number Diff line change 1+ # Fail2ban filter for BIND9 / named security events
2+ #
3+ # Catches:
4+ # - Refused recursive queries (query cache denied)
5+ # - Refused zone transfers
6+ # - Bad/unauthorized RNDC requests
7+
8+ [Definition]
9+
10+ _daemon = named
11+
12+ failregex = ^%(__prefix_line)s\s*client(?:\s+@\w+)?\s+<HOST>#\d+\s+(?:\(\S+\)\s+)?:\s*(?:view\s+\S+:\s+)?query \(cache\) '.*' denied\s*$
13+ ^%(__prefix_line)s\s*client(?:\s+@\w+)?\s+<HOST>#\d+\s*:\s*(?:view\s+\S+:\s+)?(?:transfer of '.*': REFUSED|zone transfer '.*' denied)\s*$
14+ ^%(__prefix_line)s\s*client(?:\s+@\w+)?\s+<HOST>#\d+\s*:\s*request has invalid signature\s*$
15+
16+ ignoreregex =
17+
18+ # Log format example:
19+ # 30-May-2026 10:15:23.456 security: client @0x7f1234567890 192.168.1.100#54321 (example.com): query (cache) 'example.com/ANY/IN' denied
Original file line number Diff line number Diff line change 1+ [DEFAULT]
2+ # Ban duration: 1 hour
3+ bantime = 3600
4+ # Scan last 10 minutes for offenses
5+ findtime = 600
6+ # Default max retries before ban
7+ maxretry = 5
8+
9+ [named-security]
10+ enabled = true
11+ filter = named-security
12+ logpath = /var/log/named/security.log
13+ # Ban after 3 violations (refused queries / zone transfer attempts)
14+ maxretry = 3
15+ bantime = 3600
16+ banaction = iptables-allports
Original file line number Diff line number Diff line change 1+ #! /bin/sh
2+ [ " ${FAIL2BAN_ENABLED:- false} " = " true" ] || { echo " fail2ban disabled" ; exec tail -f /dev/null; }
3+ exec fail2ban-server -f -x -s /run/fail2ban/fail2ban.sock 2>&1
Original file line number Diff line number Diff line change @@ -7,6 +7,10 @@ services:
77 - " 53:53/tcp"
88 # - "953:953/tcp"
99 restart : always
10+ environment :
11+ - FAIL2BAN_ENABLED=false
12+ cap_add :
13+ - NET_ADMIN
1014 volumes :
1115 - bind_keys:/var/cache/bind/keys
1216 - ./bind:/etc/bind
You can’t perform that action at this time.
0 commit comments