Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2014-06-01 17:02:28

  sqrtek - Użytkownik

sqrtek
Użytkownik
Skąd: /bin/true
Zarejestrowany: 2012-06-14

[SOLVED] fail2ban - problem z regexem?

Ostatnio zacząłem poznawać fail2bana i natknąłem na mały problem, przy przeglądaniu różnego rodzaju filtrów i chęci zastosowania jednego z nich natrafiłem na mały problem..

Jak coś to w jail.local, oraz w filter.d/ wszystko poprawnie założone jest, tylko wydaje mi się że coś może być nie tak z filtrem.

Kod:

[Definition]

failregex = [[]client <HOST>[]] (File does not exist|script not found or unable to stat): .*/(cgi-bin|admin|Admin|sql|mail|phpmyadmin|file:|php|pma|web|PMA|PMA2006|pma2006|sqlmanager|mysqlmanager|PMA2005|phpmyadmin-old|phpmyadminold|pma2005|phpmanager|mysql|myadmin|webadmin|sqlweb|websql|webdb|mysqladmin|mysql-admin|phpmyadmin2|phpMyAdmin2|phpMyAdmin-2|php-my-admin|cms|clan|site|seite|page|forum|wbb2|board|wbb|archive|forumv2|forumv1|b0ard|f0rum|wbb1|wbb3|wbblite|directforum|board23|board2|board3|WBB|WBB2|html|phpkit|page|phpkit_1.6.1|clan|myadmin|webadmin|sqlweb|websql|webdb|mysqladmin|mysql-admin|phpmyadmin2|php-my-admin|phpMyAdmin-2.2.3|phpMyAdmin-2.2.6|phpMyAdmin-2.5.1|phpMyAdmin-2.5.4|phpMyAdmin-2.5.6|phpMyAdmin-2.6.0|phpMyAdmin-2.6.0-pl1|phpMyAdmin-2.6.2-rc1|phpMyAdmin-2.6.3|phpMyAdmin-2.6.3-pl1|phpMyAdmin-2.6.3-rc1|padmin|datenbank|database|horde|horde2|horde3|horde-3.0.9|Horde|README|horde-3.0.9|adserver|phpAdsNew|phpadsnew|phpads|Ads|ads|xmlrpc|xmlsrv|blog|drupal|community|blogs|blogtest|appserver|roundcube|rc|mail|mail2|roundcubemail|rms|webmail2|webmail|wm|bin|roundcubemail-0.1|roundcubemail-0.2|roundcube-0.1|roundcube-0.2|roun|cube|wp-login.php|ucp.php|\.asp|\.dll|\.exe|\.pl)


    ignoreregex =

próbowałem prostszych wersji tj.

Kod:

failregex = [[]client <HOST>[]] File does not exist: .*admin|phpmyadmin|Admin

ale nic nie pomaga.

PS: Fail2ban można bez problemu zrestartować.

wynik logu fail2ban.log

Kod:

2014-06-01 16:59:04,046 fail2ban.jail   : INFO   Creating new jail 'apache-myadmin'
2014-06-01 16:59:04,048 fail2ban.jail   : INFO   Jail 'apache-myadmin' uses Gamin
2014-06-01 16:59:04,058 fail2ban.filter : INFO   Added logfile = /var/log/apache2/error.log
2014-06-01 16:59:04,151 fail2ban.filter : ERROR  No 'host' group in 'ignoreregex ='
2014-06-01 16:59:04,476 fail2ban.jail   : INFO   Jail 'apache-myadmin' started

wynik fail-regexa:

Kod:

[root@bbb-server][log]# fail2ban-regex /var/log/apache2/error.log /etc/fail2ban/filter.d/apache-myadmin.conf 

Running tests
=============

Use regex file : /etc/fail2ban/filter.d/apache-myadmin.conf
Use log file   : /var/log/apache2/error.log

No 'host' group in 'ignoreregex ='
Cannot remove regular expression. Index 0 is not valid
No 'host' group in 'ignoreregex ='
Cannot remove regular expression. Index 0 is not valid
No 'host' group in 'ignoreregex ='
Cannot remove regular expression. Index 0 is not valid
No 'host' group in 'ignoreregex ='
Cannot remove regular expression. Index 0 is not valid
No 'host' group in 'ignoreregex ='
Cannot remove regular expression. Index 0 is not valid
No 'host' group in 'ignoreregex ='
Cannot remove regular expression. Index 0 is not valid
No 'host' group in 'ignoreregex ='
...
...

Ostatnio edytowany przez sqrtek (2014-06-01 22:59:47)


"Nie pozwól by zgiełk opinii innych ludzi, zagłuszył Twój wewnętrzny głos" ~ [i]Steve Jobs[/i]

Offline

 

#2  2014-06-01 17:21:20

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/urandom
Zarejestrowany: 2008-01-07

Re: [SOLVED] fail2ban - problem z regexem?

Fitrowanie do Admina|PhpMyAdmina zrób lepiej na serwerze WWW, możesz pochować te usługi pod innymi nazwami, w innych lokalizacjach, natomiast pod szukanymi przez booty typowymi nazwami daj coś w rodzaju pułapki, żeby wchodząc na taki adres automatycznie pacjent lądował na czarnej liście w ipsecie.
Najprościej z resztą zrobić logi na socket czy kolejkę fifo, i naskrobać własnego skrypta, aniżeli certolić się z falilbanem.

Będzie szybciej i prościej. ;)

Jako inspiracji radzę użyć httpd-guardian:
http://www.commandlineisking.com/2009/05/rate-limiting-and-dos-protection-in-mod.html
Albo:
http://www.chaotic.org/guardian/
Względnie tego skrypta:
http://www.debian.pl/entries/30-Implementacja-systemu-aktywnego-przeciwdzia%C5%82ania-intruzom-%28IPS%29-w-Pythonie-cz.-1

Pozdro
;-)

Ostatnio edytowany przez Jacekalex (2014-06-01 17:25:41)


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#3  2014-06-01 18:20:49

  sqrtek - Użytkownik

sqrtek
Użytkownik
Skąd: /bin/true
Zarejestrowany: 2012-06-14

Re: [SOLVED] fail2ban - problem z regexem?

[quote=Jacekalex]http://www.chaotic.org/guardian/[/quote]
Patrząc na ten skrypt to wydaje się on troche prymitywny ale przynajmniej prosty w zrozumieniu.

Kod:

/sbin/iptables -I INPUT -s $source -i $interface -j DROP

Choć równie dobrze możnaby napisać skrypt który przeszukiwałby plik error.log, i ewentualnych sprawców blokować w /etc/hosts.deny. To chyba nie ma za dużej różnicy czy zablokuje kogoś za pomocą iptables czy hosts.deny, choć taką metodę działania ma chyba program portsentry który blokuje w hosts.deny.


PS: Ale i tak mnie ciekawi czemu nie chce mi się to uruchomić ten filtr z Fail2bana.. wiele ludzi tworzy te filtry w takiej postaci i to działa :/ nie wiem czemu u mnie to się nie uruchamia.. :/

Ostatnio edytowany przez sqrtek (2014-06-01 18:23:31)


"Nie pozwól by zgiełk opinii innych ludzi, zagłuszył Twój wewnętrzny głos" ~ [i]Steve Jobs[/i]

Offline

 

#4  2014-06-01 18:32:07

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/urandom
Zarejestrowany: 2008-01-07

Re: [SOLVED] fail2ban - problem z regexem?

Najprostszy przykład ipsa do serwera www:

Kod:

ipset create dupa hash:net
cat /var/log/lighttpd/access.log | grep -i admin | gawk '{print "add dupa  " $1}' | ipset restore --exist

Czy weszło:

Kod:

ipset list dupa
Name: dupa
Type: hash:net
Revision: 2
Header: family inet hashsize 1024 maxelem 65536 
Size in memory: 16768
References: 0
Members:
127.0.0.1

Użycie ipseta?
np:

Kod:

iptables -t raw -I PREROUTING -p tcp  -m set --match-set dupa src -j DROP

Oczywiście przy działającym serwerze lepiej logi zbierać na jakimś sockecie (np /dev/ips jak tam wyżej w sznurku), zamiast parsować pliki logów, to jest dużo szybsze, jeśli się napisze skrypta działającego w trybie demona, który będzie wisiał na tym sockecie, czesał adresy IP regexem, i pakował jest w trybie natychmiastowym do ipseta.

Przeważnie taki skrypcio z wiązką regexów powinien się zmieścić w 30 linijkach perla, żadna magia.

Ostatnio edytowany przez Jacekalex (2014-06-01 18:33:01)


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#5  2014-06-01 22:59:32

  sqrtek - Użytkownik

sqrtek
Użytkownik
Skąd: /bin/true
Zarejestrowany: 2012-06-14

Re: [SOLVED] fail2ban - problem z regexem?

Dzięki za odpowiedź, szczerze to pierwszy raz słyszę o czymś takim jak ipset i będę musiał się z tym zaprzyjaźnić bliżej :D .

A co do fail2bana, to udało mi się stworzyć odpowiednie wyrażenie regularne aby filtr działał jak powinien.


"Nie pozwól by zgiełk opinii innych ludzi, zagłuszył Twój wewnętrzny głos" ~ [i]Steve Jobs[/i]

Offline

 

#6  2014-06-02 08:47:36

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/urandom
Zarejestrowany: 2008-01-07

Re: [SOLVED] fail2ban - problem z regexem?

Ipset ma też opcję timeout, która do każdego IP przypisuje okres "przydatności do użycia":

Kod:

ipset create  dupa hash:ip timeout 300
echo  add dupa 88.212.57.151 | ipset restore -exist
echo  add dupa 151.132.17.121 timeout 1800 | ipset restore -exist

Rezultat:

Kod:

 ipset list dupa
Name: dupa
Type: hash:ip
Revision: 0
Header: family inet hashsize 1024 maxelem 65536 timeout 300 
Size in memory: 16640
References: 0
Members:
88.212.57.151 timeout 262
151.132.17.121 timeout 1795

Krótko pisząc, w porównaniu z guardian.pl potrzeba tylko połowę tamtego skrypta.
Timeout zapobiegnie przepełnieniu tablicy przy dużej liczbie bootów.

Do tego możesz dodawać adresy do tabeli Ipseta bezpośrednio poprzez  regułki firewalla:

Kod:

iptables -j SET --help
.....
SET target options:
 --add-set name flags [--exist] [--timeout n]
 --del-set name flags
        add/del src/dst IP/port from/to named sets,
        where flags are the comma separated list of
        'src' and 'dst' specifications.

Razem masz  dynamiczny FW z morderczą skutecznością.
Przy okazji dużo łatwiej się go obsługuje, niż zabawy z failbanem.
Najskuteczniej możesz użyć wysyłania logów na kolejkę fifo:

Kod:

mkfifo /dev/apachelog
chown root:apache /dev/apachelog
chmod 620 /dev/apachelog

Ptem kierujesz logi Apacha  (kopię) na [b]|/dev/apachelog[/b], tam czeka skrypcik choćby tylko z grepem i  awk, (choć napisany w perlu chodziłby szybciej), który pakuje adresy do ipseta.
Razem bardzo grzeczna, skuteczna i szybka w działaniu konstrukcja. :D
Jeśli do tego regułka iptables z dopasowaniem tablicą ipseta, będzie ponownie kierowała celem SET do tej samej tablicy, to pacjent po każdej próbie będzie miał odnowiony timeotut aż do emerytury :D
W porównaniu z taką konstrukcją Failban to lekka  strata czasu.

Pozdro
;-)

Ostatnio edytowany przez Jacekalex (2014-06-02 08:53:42)


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
To nie jest tylko forum, to nasza mała ojczyzna ;-)

[ Generated in 0.009 seconds, 11 queries executed ]

Informacje debugowania

Time (s) Query
0.00008 SET CHARSET latin2
0.00004 SET NAMES latin2
0.00071 SELECT u.*, g.*, o.logged FROM punbb_users AS u INNER JOIN punbb_groups AS g ON u.group_id=g.g_id LEFT JOIN punbb_online AS o ON o.ident='18.221.238.204' WHERE u.id=1
0.00076 REPLACE INTO punbb_online (user_id, ident, logged) VALUES(1, '18.221.238.204', 1732829785)
0.00044 SELECT * FROM punbb_online WHERE logged<1732829485
0.00044 SELECT topic_id FROM punbb_posts WHERE id=268758
0.00009 SELECT id FROM punbb_posts WHERE topic_id=25919 ORDER BY posted
0.00057 SELECT t.subject, t.closed, t.num_replies, t.sticky, f.id AS forum_id, f.forum_name, f.moderators, fp.post_replies, 0 FROM punbb_topics AS t INNER JOIN punbb_forums AS f ON f.id=t.forum_id LEFT JOIN punbb_forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=3) WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.id=25919 AND t.moved_to IS NULL
0.00006 SELECT search_for, replace_with FROM punbb_censoring
0.00216 SELECT u.email, u.title, u.url, u.location, u.use_avatar, u.signature, u.email_setting, u.num_posts, u.registered, u.admin_note, p.id, p.poster AS username, p.poster_id, p.poster_ip, p.poster_email, p.message, p.hide_smilies, p.posted, p.edited, p.edited_by, g.g_id, g.g_user_title, o.user_id AS is_online FROM punbb_posts AS p INNER JOIN punbb_users AS u ON u.id=p.poster_id INNER JOIN punbb_groups AS g ON g.g_id=u.group_id LEFT JOIN punbb_online AS o ON (o.user_id=u.id AND o.user_id!=1 AND o.idle=0) WHERE p.topic_id=25919 ORDER BY p.id LIMIT 0,25
0.00116 UPDATE punbb_topics SET num_views=num_views+1 WHERE id=25919
Total query time: 0.00651 s