diff --git a/Makefile b/Makefile index 3962a8b..babad65 100644 --- a/Makefile +++ b/Makefile @@ -8,7 +8,8 @@ run:: touch /tmp/clftest touch /tmp/jsontest touch /tmp/generictest - cargo run -- -v -s=/tmp/sshdtest -c=/tmp/clftest -j=/tmp/jsontest --generic-logpath=/tmp/generictest --generic-ip='from ([0-9a-fA-F:.]+) port' --generic-positive='Failed password' + cargo build + sudo target/debug/blockfast -v -s=/tmp/sshdtest -c=/tmp/clftest -j=/tmp/jsontest --generic-logpath=/tmp/generictest --generic-ip='from ([0-9a-fA-F:.]+) port' --generic-positive='Failed password' ci:: test cargo fmt --all -- --check @@ -30,9 +31,6 @@ watch:: test:: cargo test -watch-test:: - ls src/*.rs | entr -rc -- make test - release:: cargo build --target x86_64-unknown-linux-musl --release diff --git a/src/jail.rs b/src/jail.rs index 4246c1b..c7d3916 100644 --- a/src/jail.rs +++ b/src/jail.rs @@ -14,9 +14,9 @@ pub struct Jail { remand: Mutex>, } -fn exec(cmd: &str, err: &str) -> Result<(), Error> { +fn exec(program: &str, cmd: &str, err: &str) -> Result<(), Error> { let sentence_sl: Vec<&str> = cmd.split_whitespace().collect(); - let out = Command::new("sudo").args(sentence_sl).output()?; + let out = Command::new(program).args(sentence_sl).output()?; let sc = out.status.code(); ensure!(sc == Some(0), "err exec {}, {:?}\n{}", cmd, out, err); Ok(()) @@ -28,16 +28,16 @@ impl Jail { let n = format!("blockfast_jail_{}", jailtime); // create - let cmd = format!("ipset create -exist {} hash:ip timeout {}", n, jailtime); - exec(&cmd, ERR_MSG)?; + let cmd = format!("create -exist {} hash:ip timeout {}", n, jailtime); + exec("ipset", &cmd, ERR_MSG)?; // setup input - let cmd = format!("iptables -I INPUT 1 -m set -j DROP --match-set {} src", n); - exec(&cmd, ERR_MSG)?; + let cmd = format!("-I INPUT 1 -m set -j DROP --match-set {} src", n); + exec("iptables", &cmd, ERR_MSG)?; // setup fwd - let cmd = format!("iptables -I FORWARD 1 -m set -j DROP --match-set {} src", n); - exec(&cmd, ERR_MSG)?; + let cmd = format!("-I FORWARD 1 -m set -j DROP --match-set {} src", n); + exec("iptables", &cmd, ERR_MSG)?; log!("jail setup, allowance {}, time {}s", allowance, jailtime); Ok(Jail { @@ -75,8 +75,8 @@ impl Jail { }; if should_ban { - let cmd = format!("ipset add -exist {} {}", self.name, ip); - exec(&cmd, "")?; + let cmd = format!("add -exist {} {}", self.name, ip); + exec("ipset", &cmd, "")?; return Ok(true); }