Please enable JavaScript to view this site.
Apache mod_cache provides a nice activity log as described in the following post: Website Acceleration - Apache Caching.
Note: I already have a hacker.conf file for blocking IP addresses that generate certain Apache errors: Protect Your Website with Fail2Ban When reviewing the log, I saw the signature of an attempted SQL injection. So I then wrote a simple script to scan the cache file, look for SQL injection attacks, and block the attacker.
The following is the contents of the new hacker2.conf file:
# Fail2Ban simple filter to block SQL injection attacks
[Definition]
resources = %%28|%%29|%%3C|%%3E|%%5B|%%5D|%%5E|%%7B|%%7D|%%2e%%2e|**|///|%%C3|[|]|<|>|-\ 301
failregex = ^.* /.*(%(resources)s).*$
ignoreregex = do_not_check_this_page.php
datepattern = {^LN-BEG}
[hacker2]
enabled = true
port = http,https
filter = hacker2
logpath = /var/log/apache2/cache.log
maxretry = 1
bantime = 1 day
Reload fail2ban:
You can check the status of the hacker2 jail by running this command:
You can obtain additional information on the queries that triggered a hit by running this second command:
I found the following match from IP address 185.164.121.186:
Per URL Decoder, this translates to:
An entry at Stackoverflow explains the purpose of the attack.
As a final note, you can pull up a list of all jailed IP addresses by running the following command:
sudo nano /etc/fail2ban/filter.d/hacker2.conf
Note: I already have a hacker.conf file for blocking IP addresses that generate certain Apache errors: Protect Your Website with Fail2Ban When reviewing the log, I saw the signature of an attempted SQL injection. So I then wrote a simple script to scan the cache file, look for SQL injection attacks, and block the attacker.
The following is the contents of the new hacker2.conf file:
Note: If you want to add a word such asThen go to /etc/fail2ban/jail.local and enter the following hacker2 jail - (The jail is set up to ban their IP address 1 day after one attempt):droptoresourcesabove for identification, and you want that word to be case insensitive, add it like so:
|(?i:drop)|
I also added HTTP status code of 301 (Moved Permanently) to the end of the resources list. Blocking any IP addresses that produce a status code of 301 takes out a lot of garbage. For instance, if you have enforced Strict Transport Security (HSTS), and a bot tries to go to port 80 instead of 443, the bot attempt will cause a 301 status code.
Reload fail2ban:
sudo fail2ban-client reload
You can check the status of the hacker2 jail by running this command:
sudo fail2ban-client status hacker2
You can obtain additional information on the queries that triggered a hit by running this second command:
sudo fail2ban-regex '/var/log/apache2/cache.log' /etc/fail2ban/filter.d/hacker2.conf --print-all-matched
I found the following match from IP address 185.164.121.186:
/entries.php?thread_id=%27nvOpzp;%20AND%201=1%20OR%20(%3C%27%22%3EiKO))
Per URL Decoder, this translates to:
/entries.php?thread_id='nvOpzp; AND 1=1 OR (<''>iKO))
An entry at Stackoverflow explains the purpose of the attack.
As a final note, you can pull up a list of all jailed IP addresses by running the following command:
sudo iptables -L --line-numbers
* posted by Robert on Fri, Sep 02, 2022
Reply 1:
Fail2ban currently does not work in Ubuntu 24.04. The new version of Ubuntu upgrades to Python 3.12,
which is missing the
There are two fixes available. The first is easier:
Fix 1: Install the following:
wget https://launchpad.net/ubuntu/+source/fail2ban/1.1.0-1/+build/28291332/+files/fail2ban_1.1.0-1_all.deb
sudo dpkg -i fail2ban_1.1.0-1_all.deb
Fix 2: Follow the steps below:
sudo mkdir /usr/lib/python3/dist-packages/fail2ban/compat
sudo apt install python3-setuptools
sudo fail2ban-client start
asynchatmodule. Fail2ban cannot function without this module.
There are two fixes available. The first is easier:
Fix 1: Install the following:
wget https://launchpad.net/ubuntu/+source/fail2ban/1.1.0-1/+build/28291332/+files/fail2ban_1.1.0-1_all.deb
sudo dpkg -i fail2ban_1.1.0-1_all.deb
Fix 2: Follow the steps below:
sudo mkdir /usr/lib/python3/dist-packages/fail2ban/compat
sudo wget -O /usr/lib/python3/dist-packages/fail2ban/compat/asynchat.py
https://github.com/fail2ban/fail2ban/raw/1024452fe1befeb5a0a014386a81ec183cd45bb5/fail2ban/compat/asynchat.py
sudo wget -O /usr/lib/python3/dist-packages/fail2ban/compat/asyncore.py
https://github.com/fail2ban/fail2ban/raw/1024452fe1befeb5a0a014386a81ec183cd45bb5/fail2ban/compat/asyncore.py
sudo wget -O /usr/lib/python3/dist-packages/fail2ban/server/asyncserver.py
https://github.com/fail2ban/fail2ban/raw/1024452fe1befeb5a0a014386a81ec183cd45bb5/fail2ban/server/asyncserver.py
sudo apt install python3-setuptools
sudo fail2ban-client start
* posted by Robert on Fri, May 10, 2024
Reply 2:
Nftables succeeds iptables on Linux systems, and is now the default firewall.
The Art of the Web explains how to bind Fail2ban to nftables.
Here are the basic steps in brief:
Call up the service file to make edits:
Replace the Unit and Install sections of the page with the following text (but leave the existing Service section as is):
[Unit]
Requires=nftables.service
PartOf=nftables.service
[Install] WantedBy=multi-user.target nftables.service
Enter the following commands:
sudo systemctl enable nftables.service
sudo systemctl enable fail2ban.service
sudo systemctl daemon-reload
If you use IPsets, you will need to translate your ipsets from iptables to nftables.
See Moving_from_ipset_to_nftables for an explanation of the following steps:
The Art of the Web explains how to bind Fail2ban to nftables.
Here are the basic steps in brief:
Call up the service file to make edits:
sudo systemctl edit --full fail2ban.service
Replace the Unit and Install sections of the page with the following text (but leave the existing Service section as is):
[Unit]
Requires=nftables.service
PartOf=nftables.service
[Install] WantedBy=multi-user.target nftables.service
Enter the following commands:
sudo systemctl enable nftables.service
sudo systemctl enable fail2ban.service
sudo systemctl daemon-reload
If you use IPsets, you will need to translate your ipsets from iptables to nftables.
See Moving_from_ipset_to_nftables for an explanation of the following steps:
sudo ipset save > sets.ipset
sudo ipset-translate restore < sets.ipset
sudo iptables-save
sudo ipset-translate restore < sets.ipset
sudo iptables-save
* posted by Robert on Mon, May 13, 2024
Site built and hosted by RJdesign.one