Add protection for already banned case

dev v0.7
marcelb 8 months ago
parent 68e509b385
commit 4d212938a5
  1. 5
      lib/ipban.hpp
  2. 13
      src/ipban.cpp
  3. BIN
      test/test
  4. 2
      test/test.cpp

@ -71,6 +71,11 @@ class ipban {
*/ */
bool unban(vector<_ban>::iterator ban_itr); bool unban(vector<_ban>::iterator ban_itr);
/**
* The method checks if the forwarding ip address is currently banned
*/
bool is_banned(const string& ip);
/** /**
* Method calls exec and adds rules to UFW firewall * Method calls exec and adds rules to UFW firewall
*/ */

@ -67,6 +67,9 @@ bool marcelb::ipban::update_db() {
bool marcelb::ipban::ban(const string& ip) { bool marcelb::ipban::ban(const string& ip) {
bool status = !is_in_white_list(ip); bool status = !is_in_white_list(ip);
if (status) { if (status) {
if (is_banned(ip)) {
return status;
}
status = ufw_ban(ip); status = ufw_ban(ip);
io.lock(); io.lock();
banned.push_back({ip, time(NULL)}); banned.push_back({ip, time(NULL)});
@ -85,6 +88,16 @@ bool marcelb::ipban::unban(vector<_ban>::iterator ban_itr) {
return status; return status;
} }
bool marcelb::ipban::is_banned(const string& ip) {
auto it = std::find_if(banned.begin(), banned.end(), [&](const struct _ban& an_ban){
return an_ban.ip == ip;
});
if (it == banned.end()) {
return false;
}
return true;
}
bool marcelb::ipban::ufw_ban(const string& ip) { bool marcelb::ipban::ufw_ban(const string& ip) {
string ufw_cmd = "sudo ufw insert 1 deny from " + ip + " to any"; string ufw_cmd = "sudo ufw insert 1 deny from " + ip + " to any";
try { try {

Binary file not shown.

@ -36,7 +36,7 @@ int main() {
// myban.add_white_list("192.168.2.74"); // myban.add_white_list("192.168.2.74");
// cout << myban.ban("192.168.2.74") << endl; cout << myban.ban("192.168.2.74") << endl;
// sleep(2); // sleep(2);
// cout << myban.ban("192.168.2.75") << endl; // cout << myban.ban("192.168.2.75") << endl;
// // sleep(200); // // sleep(200);

Loading…
Cancel
Save