• Hi, Pleskians! We are running a UX testing of our upcoming product intended for server management and monitoring.
    We would like to invite you to have a call with us and have some fun checking our prototype. The agenda is pretty simple - we bring new design and some scenarios that you need to walk through and succeed. We will be watching and taking insights for further development of the design.
    If you would like to participate, please use this link to book a meeting. We will sent the link to the clickable prototype at the meeting.
  • (Plesk for Windows):
    MySQL Connector/ODBC 3.51, 5.1, and 5.3 are no longer shipped with Plesk because they have reached end of life. MariaDB Connector/ODBC 64-bit 3.2.4 is now used instead.
  • Our UX team believes in the in the power of direct feedback and would like to invite you to participate in interviews, tests, and surveys.
    To stay in the loop and never miss an opportunity to share your thoughts, please subscribe to our UX research program. If you were previously part of the Plesk UX research program, please re-subscribe to continue receiving our invitations.
  • The Horde webmail has been deprecated. Its complete removal is scheduled for April 2025. For details and recommended actions, see the Feature and Deprecation Plan.

Question Plesk firewall - CrowdSec iptables interaction

andg

New Pleskian
Server operating system version
Debian 10
Plesk version and microupdate number
Plesk Obsidian 18.0.68 Update #2
Hi,
after successfully configuring crowdsec in a bare metal server I tested it with Plesk.
Turned off fail2ban, installed crowdsec with iptables bouncer and created a few custom rules.
All seem good except that if I update Plesk firewall rules and apply the update CrowdSec rules in iptables are no longer enforced.
Listing iptables rules
Before:
Code:
Chain CROWDSEC_CHAIN (1 references)
target     prot opt source               destination         
DROP       all  --  anywhere             anywhere             match-set crowdsec-blacklists-1 src
DROP       all  --  anywhere             anywhere             match-set crowdsec-blacklists-0 src
After a plesk firewall rule got updated
Code:
Chain CROWDSEC_CHAIN (0 references)
target     prot opt source               destination         
DROP       all  --  anywhere             anywhere             match-set crowdsec-blacklists-1 src
DROP       all  --  anywhere             anywhere             match-set crowdsec-blacklists-0 src

So as you can see it gets 0 references. Doing a systemctl restart crowdsec-firewall-bouncer fixes the problem.
Would it be possible to trigger a script after the firewall is updated? Or to integrate them better in other ways?
Also I've yet to test what happens after a server restart but think should be ok. Will update about it!
Thanks!
 
A quick note on triggering scripts after the firewall is updated:

First a caveat - I am still stuck on an older release of Obsidian 18.0.31, and the newer versions of Plesk Obsidian, the firewall UI and controls are much improved, and I'm actually not 100% certain if iptables is still updated in the same way or if it has been improved speed wise, but this should give you some ideas that may help fire things off when you need them.

I had a need to leverage the event manager to trigger a script when the firewall is updated - and it does fire, but it fires immediately after creating the new firewall rules and creating the updated firewall-active.sh script that actually updates iptables, when you hit apply, but this is well before that script has actually completed depending on the speed of your system and the amount of rules. So you might run into issues if you want to fire events immediately after that event is triggered, especially if you are going to manipulate iptables further, and if you have a large number of entries in your firewall and fail2ban already, given that there is a sleep 1, in between each execution if you are using a version of iptables <1.4.20, and the native sleep in newer versions is not much faster - you might not be triggering things when you actually want them to be triggered.

To work around this, as I wanted an update when the full script had finished and iptables was fully updated. So, I wrote a script that watches for the completion of the firewall-new.sh script, so you can call this script from the event manager and then have it fire off whatever you really want to happen once the firewall-new.sh has actually completed updating. Unclear if newer versions of Obsidian are triggered the same way or if they might have moved to a method that fires once everything is complete, not just the kickoff of the firewall-new.sh script.

So this does exactly that, monitors firewall-new.sh for completion, and also updates your shell with status info with some nice coloring and the overall execution time which can be helpful to gauge things. I typically trigger this by hand from an ssh session, but you can easily strip out the output/echo's or route it to /dev/null/ and just keep the loop that watches for completion of the firewall-new.sh script, but it may be useful for your use case or a good starting point to get you going.

Code:
fin="false"
start=`date +%s%N`
RED='\033[0;31m'
YEL='\033[1;33m'
ORNG='\033[0;33m'
CYN='\033[0;36m'
WHT='\033[1;37m'
NC='\033[0m' # No Color

echo -ne "${ORNG}$(date)${NC}\n";
echo -ne "${RED}Plesk Firewall/IPtables updating${NC}";

while [ $fin = "false" ]
do
ret=$(ps auxf | grep -i 'firewall-new.sh' | grep -v grep)
if [[ -z "$ret" ]]; then
    echo -en "\n${WHT}Update complete - ";  
    fin="true"
    end=`date +%s%N`
    nanos=`expr $end - $start`
    minutes=`expr $nanos / 60000000000`
    echo -e "Execution time:${NC}\n ${CYN}$nanos nanoseconds - $minutes minutes${NC}"
    exit 1
else
    echo -ne "${YEL}.${NC}";
fi
sleep 5
done
 
Back
Top