diff --git a/fail2ban/images/status.gif b/fail2ban/images/status.gif new file mode 100644 index 000000000..f6a34a259 Binary files /dev/null and b/fail2ban/images/status.gif differ diff --git a/fail2ban/index.cgi b/fail2ban/index.cgi index e6ffbfe76..a5b065858 100755 --- a/fail2ban/index.cgi +++ b/fail2ban/index.cgi @@ -28,14 +28,14 @@ if ($err) { # Show category icons my @links = ( "list_filters.cgi", "list_actions.cgi", - "list_jails.cgi", "edit_config.cgi", - "edit_manual.cgi", ); + "list_jails.cgi", "list_status.cgi", + "edit_config.cgi", "edit_manual.cgi", ); my @titles = ( $text{'filters_title'}, $text{'actions_title'}, - $text{'jails_title'}, $text{'config_title'}, - $text{'manual_title'}, ); + $text{'jails_title'}, $text{'status_title'}, + $text{'config_title'}, $text{'manual_title'}, ); my @icons = ( "images/filters.gif", "images/actions.gif", - "images/jails.gif", "images/config.gif", - "images/manual.gif", ); + "images/jails.gif", "images/status.gif", + "images/config.gif", "images/manual.gif", ); &icons_table(\@links, \@titles, \@icons, 5); # Show start / stop buttons diff --git a/fail2ban/lang/en b/fail2ban/lang/en index 42e798fa3..d42794642 100644 --- a/fail2ban/lang/en +++ b/fail2ban/lang/en @@ -170,6 +170,18 @@ manual_efile=Selected file is not part of the Fail2Ban configuration! manual_err=Failed to edit config file manual_edata=No config file contents entered +status_title=Jails Status And Actions +status_title2=Jails Status +status_head_jail_name=Jail name +status_head_currently_failed=Currently failed +status_head_total_failed=Total failed +status_head_currently_banned=Currently banned +status_head_total_banned=Total banned +status_head_banned_ip_list=Banned IP list +status_jail_unblock=Unblock All IPs for Selected Jails +status_jail_block=Permanently Block All IPs in Banned List for Selected Jails +status_jail_noactive=There are no active jails enabled yet. + syslog_logtarget=Fail2Ban action log __norefs=1 diff --git a/fail2ban/list_status.cgi b/fail2ban/list_status.cgi new file mode 100755 index 000000000..4fe53a3b6 --- /dev/null +++ b/fail2ban/list_status.cgi @@ -0,0 +1,61 @@ +#!/usr/local/bin/perl +# Show a list of all defined actions + +use strict; +use warnings; +require './fail2ban-lib.pl'; +our (%in, %text, %config); + +&ui_print_header(undef, $text{'status_title2'}, ""); + +my $out = &backquote_logged("$config{'client_cmd'} status 2>&1 ".&html_escape($jail)."")); + &open_execute_command($fh, $jcmd, 1); + while(<$fh>) { + if (/-\s+(.*):\s*(.*)/) { + my $col = $1; + my $val = $2; + $col = lc($col); + $col =~ s/\s/_/g; + if ($col !~ /journal_matches/) { + push(@head, $text{"status_head_$col"}); + if ($col =~ /banned_ip_list/) { + my @ips = split(/\s+/, $val); + $val =~ s/\s+/
/g; + } + push(@body, $val); + } + } + } + close($fh); + if (!$head++) { + print &ui_form_start("unblock_jail.cgi", "post"); + print &ui_links_row(\@links); + print &ui_columns_start(\@head); + } + print &ui_checked_columns_row(\@body, ['width=5', undef, $tdc, $tdc, $tdc, $tdc], "jail", $jail); + } + if ($head) { + print &ui_columns_end(); + print &ui_links_row(\@links); + print &ui_form_end([ [ 'unblock', $text{'status_jail_unblock'} ], + [ 'permblock', $text{'status_jail_block'} ] ]); + }; +} +else { + print $text{'status_jail_noactive'}; + } + +&ui_print_footer("", $text{'index_return'});