> We're straying from the original problem, but have you considered sshguard?
No. I initially looked for something like fail2ban, but after some
working with it on ubuntu and regular problems with its sqlite
database I decided to just try something primitive and clear.
All I have to do is to change the oneliner to give me the right ip addresses.
If I want to do something special with these addresses I only have to
change my script.sh file.
I am just testing all this and may be missing something critical but
the results look good for me.

On Mon Aug 26 11:06:12 2024, Zé Loff wrote:
> On Mon, Aug 26, 2024 at 11:27:02AM +0300, Maksim Rodin wrote:
> > Hello,
> > Here is my ugly script in testing which uses a postgres table to track bad 
> > guys in
> > authlog and pf to lock them forever.
> > ---
> > #! /bin/ksh
> > MAX_RETRIES=2
> > function finish_serving {
> >        echo "Finish serving";
> >        exit 0;
> > }
> > function add_entry {
> >        psql -U ecounter -d ecounter_db -q -c "merge into entry_counter \
> >            as ec using (select '$1' as e) on ec.entry = \
> >            e when matched and ec.count < $MAX_RETRIES then \
> >            update set count = count + 1 when not matched then \
> >            insert (entry, count) values ('$1', 1);";
> >        RESULT=$(psql -U ecounter -d ecounter_db -t -c "select entry from \
> >            entry_counter where entry = '$1' and count >= $MAX_RETRIES;");
> >        if [[ -n $RESULT ]]; then
> >            echo "pfctl add to table $RESULT";
> >            /sbin/pfctl -vvt bad_ips -T add $RESULT;
> >            /sbin/pfctl -vvk $RESULT;
> >            NET=$(echo $RESULT  | awk -F. '{print $1 "." $2 ".0.0/16"}');
> >            echo "pfctl add to table $NET";
> >            /sbin/pfctl -vvt bad_ips -T add $NET;
> >            /sbin/pfctl -vvk $NET;
> >            RESULT="";
> >            NET="";
> >        fi
> > }
> > trap finish_serving SIGINT
> > echo Start serving...
> > while read line;
> >        do add_entry $line;
> > done
> > ---
> > 
> > And an ugly oneliner to make it do the job in real time:
> > ---
> > tail -fn0 /var/log/authlog | grep -E \
> >     --line-buffered 'Failed password' | grep -Eo \
> >     --line-buffered '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}'\
> >     | ksh script.sh
> > ---
> > 
> > On Sat Aug 24 00:38:11 2024, Joel Carnat wrote:
> > > 
> > > > 
> > > > Le 23 août 2024 à 17:12, Peter N. M. Hansteen <pe...@bsdly.net> a écrit 
> > > > :
> > > > 
> > > > On Fri, Aug 23, 2024 at 12:54:20PM +0200, Joel Carnat wrote:
> > > >> I have a server which gets flooded with unsolicited HTTP requests. So 
> > > >> far, I use relayd filters to identify those requests and block them, 
> > > >> at relayd level. It works as they never reach the web server but 
> > > >> relayd is still working to block them.
> > > >> 
> > > >> I thought of parsing relayd logs to get those IPs and add them to a pf 
> > > >> block table, using an automated script.
> > > > 
> > > > If the problem is that there are a lot of requests from the same hosts 
> > > > coming in rapid-fire, it is
> > > > possible that state tracking rules with overloading could be the thing 
> > > > to try.
> > > > 
> > > > The other thing that comes to mind is to put together something that 
> > > > parses the logs
> > > > and adds offenders to a table of addresses that PF will block.
> > > > 
> > > > Something along the lines of what is described in 
> > > > https://nxdomain.no/~peter/forcing_the_password_gropers_through_a_smaller_hole.html
> > > > (also prettified but tracked at 
> > > > https://bsdly.blogspot.com/2017/04/forcing-password-gropers-through.html)
> > > > could be what you need (some assembly required, obviously).
> > > > 
> > > > - Peter
> > > 
> > > Unfortunately, those are not single IP spamming. It looks more like 
> > > infected computers and/or computer farms sending individual requests at 
> > > "normal" rate. There are just thousands of them.
> > > 
> > > The only way to identify them is by looking at User-Agent and/ou HTTP 
> > > requests body. So pf only won’t be enough there.
> > > 
> > > I thought I could use some matching relayd rules that would tag the 
> > > connections so that pf blocks them. But it seems pftag is not made for 
> > > this.
> > > 
> > > Writing a script and feed it using syslog is doable. But I hoped I could 
> > > use only relayd and pf.
> > 
> > -- 
> > Best regards
> > Maksim Rodin
> > 
> > С уважением,
> > Родин Максим
> > 
> 
> We're straying from the original problem, but have you considered sshguard?
> 
> 
> -- 
>  

-- 
Best regards
Maksim Rodin

Reply via email to