Package: fail2ban
Version: 1.1.0-8
Severity: normal

Dear Maintainer,


   * What led up to the situation?
I noticed the issue after the trixie update, however it may have been in the 
bookworm version also already, without me noticing it.


   * What exactly did you do (or not do) that was effective (or
     ineffective)?
When you add a banned IP to the recidive jail, the IP is added, and an error is 
logged to fail2ban.log. This also happens when the banned IPs are re-added to 
the recidive jail when fail2ban is started.

The error is:

2025-08-12 23:20:46,008 fail2ban.actions        [191971]: NOTICE  [recidive] 
Ban 91.210.179.185
2025-08-12 23:20:46,047 fail2ban.utils          [191971]: ERROR   7fcd1d583360 
-- exec: nft add table inet f2b-table
nft -- add chain inet f2b-table f2b-chain \{ type filter hook input priority -1 
\; \}
nft add set inet f2b-table addr-set-recidive \{ type ipv4_addr\; \}

nft add rule inet f2b-table f2b-chain meta l4proto \{ all \} ip saddr 
@addr-set-recidive reject

2025-08-12 23:20:46,047 fail2ban.utils          [191971]: ERROR   7fcd1d583360 
-- stderr: 'Error: syntax error, unexpected all'
2025-08-12 23:20:46,047 fail2ban.utils          [191971]: ERROR   7fcd1d583360 
-- stderr: 'add rule inet f2b-table f2b-chain meta l4proto { all } ip saddr 
@addr-set-recidive reject'
2025-08-12 23:20:46,048 fail2ban.utils          [191971]: ERROR   7fcd1d583360 
-- stderr: '                                                 ^^^'
2025-08-12 23:20:46,048 fail2ban.utils          [191971]: ERROR   7fcd1d583360 
-- returned 1
2025-08-12 23:20:46,048 fail2ban.actions        [191971]: ERROR   Failed to 
execute ban jail 'recidive' action 'nftables' info 'ActionInfo({'ip': 
'91.210.179.185', 'family': 'inet4', 'fid': <function 
Actions.ActionInfo.<lambda> at 0x7fcd1f05e020>, 'raw-ticket': <function 
Actions.ActionInfo.<lambda> at 0x7fcd1f05e7a0>})': Error starting action 
Jail('recidive')/nftables: 'Script error'


   * What was the outcome of this action?
Many errors added to the log fail2ban.log. The IPs _are_ added to the jail, 
it's just that this error is also logged. And because I had about 818 IPs in 
the recidive jail, that's a lot of errors that are not needed.


   * What outcome did you expect instead?
The error shuold not be logged. I checked the jail with fail2ban-client get 
recidive banned and the correct IPs are listed, so they seem ot have been 
re-added correctly.


Thanks for all the awesome work for fail2ban in Debian.

With kind regards, Erik

-- System Information:
Debian Release: 13.0
  APT prefers stable-updates
  APT policy: (500, 'stable-updates'), (500, 'stable-security'), (500, 'stable')
Architecture: amd64 (x86_64)

Kernel: Linux 6.12.38+deb13-amd64 (SMP w/4 CPU threads; PREEMPT)
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8), 
LANGUAGE=en_US:en
Shell: /bin/sh linked to /usr/bin/dash
Init: systemd (via /run/systemd/system)

Versions of packages fail2ban depends on:
ii  python3          3.13.5-1
ii  python3-systemd  235-1+b6

Versions of packages fail2ban recommends:
ii  iptables            1.8.11-2
ii  nftables            1.1.3-1
pn  python3-pyinotify   <none>
pn  python3-setuptools  <none>
ii  whois               5.6.3

Versions of packages fail2ban suggests:
ii  bsd-mailx [mailx]            8.1.2-0.20220412cvs-1.1
pn  monit                        <none>
ii  rsyslog [system-log-daemon]  8.2504.0-1
pn  sqlite3                      <none>

-- Configuration Files:
/etc/fail2ban/action.d/complain.conf changed:
[INCLUDES]
before = helpers-common.conf
[Definition]
debug = 0
norestored = 1
actionstart =
actionstop =
actioncheck =
actionban = oifs=${IFS};
            RESOLVER_ADDR="%(addr_resolver)s"
            if [ "<debug>" -gt 0 ]; then echo "try to resolve $RESOLVER_ADDR"; 
fi
            ADDRESSES=$(dig +short -t txt -q $RESOLVER_ADDR | tr -d '"')
            IFS=,; ADDRESSES=$(echo $ADDRESSES)
            IFS=${oifs}
            IP=<ip>
            if [ ! -z "$ADDRESSES" ]; then
                ( printf %%b "<message>\n"; date '+Note: Local timezone is %%z 
(%%Z)'; 
                  printf %%b "\nLines containing failures of <ip> (max 
<grepmax>)\n";
                  %(_grep_logs)s;
                ) | <mailcmd> "Abuse from <ip>" <mailargs> $ADDRESSES
            fi
actionunban =
addr_resolver = <ip-rev>abuse-contacts.abusix.org
message = Dear Sir/Madam,\n\nWe have detected abuse from the IP address $IP, 
which according to a abusix.com is on your network. We would appreciate if you 
would investigate and take action as appropriate.\n\nLog lines are given below, 
but please ask if you require any further information.\n\n(If you are not the 
correct person to contact about this please accept our apologies - your e-mail 
address was extracted from the whois record by an automated process.)\n\n This 
mail was generated by Fail2Ban.\nThe recipient address of this report was 
provided by the Abuse Contact DB by abusix.com. abusix.com does not maintain 
the content of the database. All information which we pass out, derives from 
the RIR databases and is processed for ease of use. If you want to change or 
report non working abuse contacts please contact the appropriate RIR. If you 
have any further question, contact abusix.com directly via email 
(i...@abusix.com). Information about the Abuse Contact Database can be found 
here: https://abusix.com/global-reporting/abuse-contact-db\nabusix.com is 
neither responsible nor liable for the content or accuracy of this message.\n
logpath = /dev/null
mailcmd = mail -s
mailargs =

/etc/fail2ban/action.d/dshield.conf changed:
[Definition]
norestored = 1
actionstart =
actionstop = if [ -f <tmpfile>.buffer ]; then
                 cat <tmpfile>.buffer | <mailcmd> "FORMAT DSHIELD USERID 
<userid> TZ `date +%%z | sed 's/\([+-]..\)\(..\)/\1:\2/'` Fail2Ban" <mailargs> 
<dest>
                 date +%%s > <tmpfile>.lastsent
             fi
             rm -f <tmpfile>.buffer <tmpfile>.first
actioncheck =
actionban = TZONE=`date +%%z | sed 's/\([+-]..\)\(..\)/\1:\2/'`
            DATETIME="`perl -e '@t=localtime(<time>);printf "%%4d-%%02d-%%02d 
%%02d:%%02d:%%02d",1900+$t[5],$t[4]+1,$t[3],$t[2],$t[1],$t[0]'` $TZONE"
            PROTOCOL=`awk '{IGNORECASE=1;if($1=="<protocol>"){print $2;exit}}' 
/etc/protocols`
            if [ -z "$PROTOCOL" ]; then PROTOCOL=<protocol>; fi
            printf %%b 
"$DATETIME\t<userid>\t<failures>\t<ip>\t<srcport>\t<myip>\t<port>\t$PROTOCOL\t<tcpflags>\n"
 >> <tmpfile>.buffer
            NOW=`date +%%s`
            if [ ! -f <tmpfile>.first ]; then
                echo <time> | cut -d. -f1 > <tmpfile>.first
            fi
            if [ ! -f <tmpfile>.lastsent ]; then
                echo 0 > <tmpfile>.lastsent
            fi
            LOGAGE=$(($NOW - `cat <tmpfile>.first`))
            LASTREPORT=$(($NOW - `cat <tmpfile>.lastsent`))
            LINES=$( wc -l <tmpfile>.buffer | awk '{ print $1 }' )
            if [ $LINES -ge <lines> && $LASTREPORT -gt <minreportinterval> ] || 
[ $LOGAGE -gt <maxbufferage> ]; then
                cat <tmpfile>.buffer | <mailcmd> "FORMAT DSHIELD USERID 
<userid> TZ $TZONE Fail2Ban" <mailargs> <dest>
                rm -f <tmpfile>.buffer <tmpfile>.first
                echo $NOW > <tmpfile>.lastsent
            fi
actionunban = if [ -f <tmpfile>.first ]; then
                  NOW=`date +%%s`
                  LOGAGE=$(($NOW - `cat <tmpfile>.first`))
                  if [ $LOGAGE -gt <maxbufferage> ]; then
                      cat <tmpfile>.buffer | <mailcmd> "FORMAT DSHIELD USERID 
<userid> TZ `date +%%z | sed 's/\([+-]..\)\(..\)/\1:\2/'` Fail2Ban" <mailargs> 
<dest>
                      rm -f <tmpfile>.buffer <tmpfile>.first
                      echo $NOW > <tmpfile>.lastsent
                  fi
              fi
[Init]
port = ???
userid = 0
myip = `ip -4 addr show dev eth0 | grep inet | head -n 1 | sed -r 's/.*inet 
([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}).*/\1/'`
protocol = tcp
lines = 50
minreportinterval = 3600
maxbufferage = 21600
srcport = ???
tcpflags =
mailcmd = mail -s
mailargs =
dest = repo...@dshield.org
tmpfile = /var/run/fail2ban/tmp-dshield

/etc/fail2ban/action.d/mail-buffered.conf changed:
[Definition]
norestored = 1
actionstart = printf %%b "Hi,\n
              The jail <name> has been started successfully.\n
              Output will be buffered until <lines> lines are available.\n
              Regards,\n
              Fail2Ban"|mail -s "[Fail2Ban] <name>: started on <fq-hostname>" 
<dest>
actionstop = if [ -f <tmpfile> ]; then
                 printf %%b "Hi,\n
                 These hosts have been banned by Fail2Ban.\n
                 `cat <tmpfile>`
                 Regards,\n
                 Fail2Ban"|mail -s "[Fail2Ban] <name>: Summary from 
<fq-hostname>" <dest>
                 rm <tmpfile>
             fi
             printf %%b "Hi,\n
             The jail <name> has been stopped.\n
             Regards,\n
             Fail2Ban"|mail -s "[Fail2Ban] <name>: stopped on <fq-hostname>" 
<dest>
actioncheck = 
actionban = printf %%b "`date`: <ip> (<failures> failures)\n" >> <tmpfile>
            LINE=$( wc -l <tmpfile> | awk '{ print $1 }' )
            if [ $LINE -ge <lines> ]; then
                printf %%b "Hi,\n
                These hosts have been banned by Fail2Ban.\n
                `cat <tmpfile>`
                \nRegards,\n
                Fail2Ban"|mail -s "[Fail2Ban] <name>: Summary" <dest>
                rm <tmpfile>
            fi
actionunban = 
[Init]
name = default
lines = 5
tmpfile = /var/run/fail2ban/tmp-mail.txt
dest = root

/etc/fail2ban/action.d/mail-whois-lines.conf changed:
[INCLUDES]
before = mail-whois-common.conf
         helpers-common.conf
[Definition]
norestored = 1
actionstart = printf %%b "Hi,\n
              The jail <name> has been started successfully.\n
              Regards,\n
              Fail2Ban" | <mailcmd> "[Fail2Ban] <name>: started on 
<fq-hostname>" <dest>
actionstop = printf %%b "Hi,\n
             The jail <name> has been stopped.\n
             Regards,\n
             Fail2Ban" | <mailcmd> "[Fail2Ban] <name>: stopped on 
<fq-hostname>" <dest>
actioncheck = 
_ban_mail_content = ( printf %%b "Hi,\n
            The IP <ip> has just been banned by Fail2Ban after
            <failures> attempts against <name>.\n\n
            Here is more information about <ip> :\n"
            %(_whois_command)s;
            printf %%b "\nLines containing failures of <ip> (max <grepmax>)\n";
            %(_grep_logs)s;
            printf %%b "\n
            Regards,\n
            Fail2Ban" )
actionban = %(_ban_mail_content)s | <mailcmd> "[Fail2Ban] <name>: banned <ip> 
from <fq-hostname>" <dest>
actionunban = 
[Init]
mailcmd = mail -s
name = default
dest = root
logpath = /dev/null

/etc/fail2ban/action.d/mail-whois.conf changed:
[INCLUDES]
before = mail-whois-common.conf
[Definition]
norestored = 1
actionstart = printf %%b "Hi,\n
              The jail <name> has been started successfully.\n
              Regards,\n
              Fail2Ban"|mail -s "[Fail2Ban] <name>: started on <fq-hostname>" 
<dest>
actionstop = printf %%b "Hi,\n
             The jail <name> has been stopped.\n
             Regards,\n
             Fail2Ban"|mail -s "[Fail2Ban] <name>: stopped on <fq-hostname>" 
<dest>
actioncheck = 
actionban = printf %%b "Hi,\n
            The IP <ip> has just been banned by Fail2Ban after
            <failures> attempts against <name>.\n\n
            Here is more information about <ip> :\n
            `%(_whois_command)s`\n
            Regards,\n
            Fail2Ban"|mail -s "[Fail2Ban] <name>: banned <ip> from 
<fq-hostname>" <dest>
actionunban = 
[Init]
name = default
dest = root

/etc/fail2ban/action.d/mail.conf changed:
[Definition]
norestored = 1
actionstart = printf %%b "Hi,\n
              The jail <name> has been started successfully.\n
              Regards,\n
              Fail2Ban"|mail -s "[Fail2Ban] <name>: started  on <fq-hostname>" 
<dest>
actionstop = printf %%b "Hi,\n
             The jail <name> has been stopped.\n
             Regards,\n
             Fail2Ban"|mail -s "[Fail2Ban] <name>: stopped on <fq-hostname>" 
<dest>
actioncheck = 
actionban = printf %%b "Hi,\n
            The IP <ip> has just been banned by Fail2Ban after
            <failures> attempts against <name>.\n
            Regards,\n
            Fail2Ban"|mail -s "[Fail2Ban] <name>: banned <ip> from 
<fq-hostname>" <dest>
actionunban = 
[Init]
name = default
dest = root

/etc/fail2ban/fail2ban.conf changed:
[DEFAULT]
loglevel = INFO
logtarget = /var/log/fail2ban.log
syslogsocket = auto
socket = /var/run/fail2ban/fail2ban.sock
pidfile = /var/run/fail2ban/fail2ban.pid
dbfile = /var/lib/fail2ban/fail2ban.sqlite3
dbpurgeage = 2w
dbmaxmatches = 10
[Definition]
[Thread]


-- no debconf information

Reply via email to