From 02689b498d30fd7de7e3555efa3231fa8ac34d93 Mon Sep 17 00:00:00 2001 From: marcelb Date: Mon, 8 Jan 2024 19:16:38 +0100 Subject: [PATCH] Comments, README --- README.md | 58 ++++++++++++++++++++++++++++++++++++++++++-- lib/ipban.hpp | 66 +++++++++++++++++++++++--------------------------- test/test | Bin 279136 -> 279144 bytes 3 files changed, 86 insertions(+), 38 deletions(-) diff --git a/README.md b/README.md index 545db3e..7179f29 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,57 @@ -# ipban -A library for managing IP address bans on UFW systems \ No newline at end of file +# Library for the fail-ban function + +IPBan is a C++ library for banning IP addresses in case of consecutive errors. + +## Features + +- Object oriented +- Thread safe +- Internal database of banned addresses as a protection mechanism against irreversible ban +- Automatic unbanning +- Manual fail and unfail methods +- White list of IP addresses +- It is adjustable: database file location, tracking time for errors, number of attempts before ban, ban duration. +## Installation + +This library also requires my exec library to work, download the latest release: + +https://git.bitelex.co/marcelb/exec or https://github.com/bandicm/exec + +Then download the latest backend of these libraries and unzip to the same location. You can turn it on with: + +``` +#include "cppurl/lib/cppurl.hpp" +using namespace marcelb; +``` + +## Usage + +```c++ +//init +ipban myban(30); // 30 minutes +// add white list string or vector +myban.add_white_list("10.0.8.1"); +// ban now ip +myban.ban("10.0.8.2"); +// fail ip +myban.fail("10.0.8.3"); +// unfail ip +myban.unfail("10.0.8.3"); + +``` +## License + +[APACHE 2.0](http://www.apache.org/licenses/LICENSE-2.0/) + + +## Support & Feedback + +For support and any feedback, contact the address: marcelb96@yahoo.com. + +## Contributing + +Contributions are always welcome! + +Feel free to fork and start working with or without a later pull request. Or contact for suggest and request an option. + diff --git a/lib/ipban.hpp b/lib/ipban.hpp index ff737c7..93f97b5 100644 --- a/lib/ipban.hpp +++ b/lib/ipban.hpp @@ -23,8 +23,8 @@ namespace marcelb { #define BOT_SLEEP_LOOP_TIME 1 // 1 second /** - * Banovani objekt - * IP adresa i vrijeme banovanja + * Banned object + * IP address and ban time */ struct _ban { string ip; @@ -32,7 +32,7 @@ struct _ban { }; /** - * Pomoćna struktura - za praćenje broja pogrešaka + * Auxiliary structure - to track the number of errors */ struct _fail { time_t first_fail; @@ -40,9 +40,9 @@ struct _fail { }; /** - * Biblioteka za ban IP adrese kroz UFW vatrozid na određeno vrijeme - * Automatski uklanja zabranu po isteku vremena - * Posjeduje vlastiti DB mehanizam za zaštitu od nepovratnog ban-a + * Library to ban IP addresses through the UFW firewall for a certain period of time + * Automatically removes ban after timeout + * It has its own DB mechanism for protection against irreversible ban */ class ipban { mutex io, f_io, wl_io; @@ -55,90 +55,84 @@ class ipban { vector white_list; future unban_bot; bool run_unban_bot = true; - // interface možda bude trebao za ban /** - * Metoda učitava banovane IP adrese iz baze + * The method loads banned IP addresses from the database */ void load_db(); /** - * Metoda ažurira stanja baze sa stanjima iz memorije + * The method updates database states with memory states */ bool update_db(); /** - * Metoda uklanja ban za proslijeđeni iterator vektora banned i ažurira bazu + * The method removes the ban for the passed iterator of the banned vector and updates the base */ bool unban(vector<_ban>::iterator ban_itr); /** - * Metoda poziva exec i dodaje pravila u UFW vatrozid + * Method calls exec and adds rules to UFW firewall */ bool ufw_ban(const string& ip); /** - * Metoda poziva exec i uklanja pravilo u UFW vatrozidu + * The method calls exec and removes the rule in the UFW firewall */ bool ufw_unban(const string& ip); + /** + * Checks whether the forwarded address is in the white list + * If it returns true, if not false + */ + bool is_in_white_list(const string& ip); + public: /** - * Konstruktor, prima zadanu vrijednost trajanja ban-a u minutama, - * vrijeme praćenja pogreške adrese, broj dozvoljenih pogreški - * i putanju datoteke baze podataka + * Constructor, receives the default value of the duration of the ban in minutes, + * address error tracking time, number of allowed errors + * and the database file path */ ipban(const uint& _duration, const uint& _fail_interval = 30, const uint& _fail_limit = 3, const string& db_file = "ipban.db"); // u minutama? /** - * Metoda koja banuje proslijeđenu IP adresu, dodaje je u vector banned, ažurira bazu - * Vraća status operacije + * The method that bans the forwarded IP address, adds it to the banned vector, updates the database + * Returns the status of the operation */ bool ban(const string& ip); /** - * Inkrementalno povećaj broj grešaka za prosljeđenu adresu - * ako se prekorači broj dozvoljenih grešaka u intervalu - adresa se banuje + * Incrementally increase the number of errors for the forwarded address + * if the number of allowed errors in the interval is exceeded - the address is banned */ - bool fail(const string& ip); /** - * Uklanja greške za prosljeđenu adresu + * Removes errors for forwarded address */ - bool unfail(const string& ip); /** - * Dodaje proslijeđenu adresu u white listu + * Adds the forwarded address to the white list */ - void add_white_list(const string& ip); /** - * Dodaje proslijeđene adrese u white listu + * Adds forwarded addresses to the white list */ - void add_white_list(const vector& ips); /** - * Provjerava da li je prosljeđena adresa u white listi - * Ako je vraća true, ako ne false - */ - - bool is_in_white_list(const string& ip); - - /** - * Destruktor, uklanja sve zabrane. + * Destructor */ ~ipban(); }; /** - * Funkcija za mirovanje tijeka, koj miruje do isteka vremena ili logičkog stanja uvijeta - * Prima vrijeme u sekundama, i logički uvijet + * Sleep function, which sleeps until timeout or logic condition condition + * Receives time in seconds, and logical condition */ static void sleep_if(const uint& _time, const bool& _condition); diff --git a/test/test b/test/test index 7ebf3f5b7a7362e593f8deccf904ee4dca2ad9fa..effe5c37d1936d97087b8082fc6e704ec30330f5 100755 GIT binary patch delta 44658 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 delta 45001 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