Page 1 of 1

Please help with custom rule

Posted: 12 Nov 2022, 22:07
by luisfalcon
A little help here guys.

I created an extremely simple wordpress plugin that creates log of failed login attempts, this way I can target only a brute force attack and not a webmaster login into several sites in an hour for normal work (this is a server with more than a thousand wordpress sites)

I can make the log any way I want, but so far I am appending a timestamp and the ip of the failed login attempt remote host, as an example:

failed-logins.log

Code: Select all

2022-11-12 18:14:32 192.34.9.3
2022-11-12 18:15:35 170.45.32.2
2022-11-12 18:18:25 238.170.22.1
I don't need to filter these, because ALL of them are already a failed login, so, How would a CSF rule look like?
Also, if you have any suggestion on the log format, please let me hear them.

Re: Please help with custom rule

Posted: 13 Nov 2022, 14:26
by Sergio
The first thing to do is to add the log URL in csf configuration file at "CUSTOM1_LOG = "; once you have saved the exact url, per example /var/log/mylog, then you can proceed to create the REGEX rule and add it to /usr/local/csf/bin/

Once you have added the rule to that file, you have to restart LFD not the Firewall just LFD.

Inside the file /usr/local/csf/bin/ you will find an example of how to create the rule.

The rule that you want is very simple, so, something like this can be set:

Code: Select all

# SECMAS BLOCKING WP LOGGING

	if (($lgfile eq $config{CUSTOM1_LOG}) and ($line =~ /^\S+\s\S+\s(\S+)$/i)) {
		return ("",$1,"SECMAS_WPBLOCK","1","1");
	}
	
The last thing that you should check accordingly to the instructions inside /usr/local/csf/bin/ is rule part at the end that reads:
,"1","1");
as you have to set it accordingly on how you have set LF_SELECT in your CSF main FireWall.

Sergio

Re: Please help with custom rule

Posted: 17 Nov 2022, 05:59
by luisfalcon
It worked!, thank you!

Re: Please help with custom rule

Posted: 17 Nov 2022, 06:49
by luisfalcon
Thanks for all your help,

Honestly I tried to find the answer using regex101.com but couldn't.
What if I want to add more information to the log but I want csf to ignore it?
Maybe something like: ignore the rest of the line after the ip address

Something like this:

Code: Select all

2022-11-12 18:14:32 192.34.9.3 https://site1.com (the site url or any other info not related with csf but useful to have in the log)
2022-11-12 18:15:35 170.45.32.2 https://site2.com (or any other info not related with csf but useful to have in the log)
2022-11-12 18:18:25 238.170.22.1  https://www.site3.com (or any other info not related with csf but useful to have in the log)
Thanks in advance for your time.

Re: Please help with custom rule

Posted: 17 Nov 2022, 12:43
by Sergio
The rule that I wrote was very simple accordingly to the LOG lines that you wrote:

Code: Select all

/^\S+\s\S+\s(\S+)$/
If you want to get more info from the LOG line that you create you have to tweak my rule, remembering that anything inside parenthesis "(" ")" will be saved as $1, $2, etc.

Example:
2022-11-12 18:14:32 192.34.9.3 https://site1.com (the site url or any other info not related with csf but useful to have in the log)

My rule could be modified to:

Code: Select all

/^\S+\s\S+\s(\S+)\shttps?:\/(\S+) /
then you should modify the part that is saved in the FireWall log to:

Code: Select all

return ("$2",$1,"SECMAS_WPBLOCK","1","1");
Then CSF log will show something like this:
192.34.9.3 # lfd (SECMAS_WPBLOCK) site1.com 192.34.9.3 (US/United States/): 1 in the last 3600 secs - Thu Nov 17 23:56:32 2022
The new full rule will be:

Code: Select all

# SECMAS BLOCKING WP LOGGING

	if (($lgfile eq $config{CUSTOM1_LOG}) and ($line =~ /^\S+\s\S+\s(\S+)\shttps?:\/(\S+) /i)) {
		return ("$2",$1,"SECMAS_WPBLOCK","1","1");
	}
	
Sergio

Re: Please help with custom rule

Posted: 25 Nov 2022, 05:19
by luisfalcon
Got it, thanks for your help

Re: Please help with custom rule

Posted: 25 Nov 2022, 14:06
by Sergio
your welcome :)