Giter VIP home page Giter VIP logo

leroyjenkins's Introduction

Leroy Jenkins

Used when someone needs to be decisive amongst too much planning and inaction

Building

cargo +nightly build --release

You may need to install the nightly toolchain with rustup:

rustup toolchain install nightly

Usage

leroyjenkins reads data from stdin, and assumes each line is an IP address. Use in combination with standard unix tools like tail -F. When an IP address shows up too often before its cache times out, it will added to the ipset with the specified timeout.

tail -F /tmp/ips.log | RUST_LOG=info ./target/release/leroyjenkins --bl-period=1m --bl-threshold=100 --ipset-base-time=100s --ipset-ban-ttl=1d --ipset-ipv6-name=leroy6 --ipset-ipv4-name=leroy4

Warning

leroyjenkins itself does nothing to your iptables rules. Use iptables (or your firewall of choice) to ban traffic when the IP matches any in the ipset.

Note

Must be run with enough privileges to actually add to ipsets. ๐Ÿ˜‚

Examples

Because it reads from stdin and this is Unix, you can pipe stuff into it. Use tail -F, use awk, use grep or rg or ag.

Dig some lines out of some application log and use them to ban

tail -F /var/log/app/app.ratelimit.log | ag 'naughty.behaviour' | stdbuf --output=L awk '{print $NF}' | leroyjenkins $LEROY_ARGS

Ban random IPs!

Because it's Unix, use bash and shuf to ban a random IP every second for an hour with:

while sleep 1; do echo `shuf -i1-256 -n1`.`shuf -i1-256 -n1`.`shuf -i1-256 -n1`.`shuf -i1-256 -n1`; done | RUST_LOG=info ./target/release/leroyjenkins --bl-period=10s --bl-threshold=0 --ipset-base-time=100s --ipset-ban-ttl=1h --ipset-ipv6-name=leroy6 --ipset-ipv4-name=leroy4

leroyjenkins's People

Contributors

kraktus avatar lakinwecker avatar lukhas avatar niklasf avatar ornicar avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

leroyjenkins's Issues

Consider local, in-memory cache of recently banned IPs

Checking whether an IP is in the ipset is one of the slower parts of the program. During a DDoS, leroy will often be faced with a large list of duplicate IPs that made a huge number of simultaneous requests, it would be good to add each banned IP to an in-memory cache that is cheap to check and we skip any lines that are in that cache. This should significantly improve performance in DDoS circumstances

Experiment with named pipes

Maybe named pipes instead of sockets ...

mkfifo leroy_sink
cargo run --release -- ... 0<leroy_sink

And from elsewhere:

cat ips.txt > leroy_sink

Test this with nginx.

Add an minimum ip-rate threshold

The idea being that we could have a more ban-happy leroy for situations where the rate of 429s from nginx hit a certain threshold. e.g, when the 429s ramp up globally, we can be more ban happy.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.