From 1cc640a8e264f528a6ee6ee29473b8c31c2561c6 Mon Sep 17 00:00:00 2001 From: Ilia Ross Date: Sat, 4 May 2024 21:01:52 +0300 Subject: [PATCH 1/4] Move enabled --- fail2ban/edit_jail.cgi | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/fail2ban/edit_jail.cgi b/fail2ban/edit_jail.cgi index 7b1653017..4d03b7eea 100755 --- a/fail2ban/edit_jail.cgi +++ b/fail2ban/edit_jail.cgi @@ -30,15 +30,15 @@ print &ui_hidden("new", $in{'new'}); print &ui_hidden("old", $in{'name'}); print &ui_table_start($text{'jail_header'}, undef, 2); -# Jail name -print &ui_table_row($text{'jail_name'}, - &ui_textbox("name", $jail->{'name'}, 30)); - # Enabled or disabled? my $enabled = &find_value("enabled", $jail); print &ui_table_row($text{'jail_enabled'}, &ui_yesno_radio("enabled", $enabled =~ /true|yes|1/i)); +# Jail name +print &ui_table_row($text{'jail_name'}, + &ui_textbox("name", $jail->{'name'}, 30)); + # Filter to match my @filters = &list_filters(); my $filter = &find_value("filter", $jail); From e2d6caf359eae18e8088e7b729c44e93d6a7b8e2 Mon Sep 17 00:00:00 2001 From: Ilia Ross Date: Sat, 4 May 2024 21:35:38 +0300 Subject: [PATCH 2/4] Add backend support --- fail2ban/edit_jail.cgi | 12 ++++++++++++ fail2ban/save_jail.cgi | 4 ++++ 2 files changed, 16 insertions(+) diff --git a/fail2ban/edit_jail.cgi b/fail2ban/edit_jail.cgi index 4d03b7eea..8f7dc828a 100755 --- a/fail2ban/edit_jail.cgi +++ b/fail2ban/edit_jail.cgi @@ -49,6 +49,18 @@ print &ui_table_row($text{'jail_filter'}, map { &filename_to_name($_->[0]->{'file'}) } @filters ], 1, 0, $filter ? 1 : 0)); +# Backend +my $backend = &find_value("backend", $jail); +print &ui_table_row($text{'jail_backend'}, + &ui_select("backend", $backend || "", + [ [ "", "" ], + [ "auto", $text{'jail_auto'} ], + [ "systemd", $text{'jail_systemd'} ], + [ "polling", $text{'jail_polling'} ], + [ "gamin", $text{'jail_gamin'} ], + [ "pyinotify", $text{'jail_pyinotify'} ] ])); + +# Ports to monitor # Actions to run my $actionlist = &find("action", $jail); my @actions = &list_actions(); diff --git a/fail2ban/save_jail.cgi b/fail2ban/save_jail.cgi index 9b4c753c0..0caf5d9ee 100755 --- a/fail2ban/save_jail.cgi +++ b/fail2ban/save_jail.cgi @@ -44,6 +44,9 @@ else { $clash && &error($text{'jail_eclash'}); } + # Validate backend + !$in{'backend'} || $in{'backend'} =~ /^(auto|systemd|polling|gamin|pyinotify)$/ || + &error($text{'jail_ebackend'}); # Parse and validate actions my @actions; for(my $i=0; defined($in{"action_$i"}); $i++) { @@ -116,6 +119,7 @@ else { # Save directives within the section &save_directive("enabled", $in{'enabled'} ? 'true' : 'false', $jail); &save_directive("filter", $in{'filter'} || undef, $jail); + &save_directive("backend", $in{'backend'} || undef, $jail); &save_directive("action", @actions ? join("\n", @actions) : undef, $jail); &save_directive("logpath", join("\n", @logpaths), $jail); From 1d5900eb70983fcae022fe70762bebe4ca420ed2 Mon Sep 17 00:00:00 2001 From: Ilia Ross Date: Sat, 4 May 2024 21:37:28 +0300 Subject: [PATCH 3/4] Add ports support --- fail2ban/edit_jail.cgi | 4 ++++ fail2ban/save_jail.cgi | 6 ++++++ 2 files changed, 10 insertions(+) diff --git a/fail2ban/edit_jail.cgi b/fail2ban/edit_jail.cgi index 8f7dc828a..cce419f29 100755 --- a/fail2ban/edit_jail.cgi +++ b/fail2ban/edit_jail.cgi @@ -61,6 +61,10 @@ print &ui_table_row($text{'jail_backend'}, [ "pyinotify", $text{'jail_pyinotify'} ] ])); # Ports to monitor +my $port = &find_value("port", $jail); +print &ui_table_row($text{'jail_ports'}, + &ui_textbox("port", $port, 35)); + # Actions to run my $actionlist = &find("action", $jail); my @actions = &list_actions(); diff --git a/fail2ban/save_jail.cgi b/fail2ban/save_jail.cgi index 0caf5d9ee..ec4eb632f 100755 --- a/fail2ban/save_jail.cgi +++ b/fail2ban/save_jail.cgi @@ -47,6 +47,11 @@ else { # Validate backend !$in{'backend'} || $in{'backend'} =~ /^(auto|systemd|polling|gamin|pyinotify)$/ || &error($text{'jail_ebackend'}); + + # Validate ports (1234 or 1234:1245 or 1234:1245,1250,http or 1238,http,https) + $in{'port'} =~ s/\s+//g if ($in{'port'}); + !$in{'port'} || $in{'port'} =~ /^(?!$)(?:[a-zA-Z]+|\d{1,5})(?:(?::\d{1,5})?)(?:,(?:[a-zA-Z]+|\d{1,5})(?:(?::\d{1,5})?)?)*$/gmi || &error($text{'jail_eports'}); + # Parse and validate actions my @actions; for(my $i=0; defined($in{"action_$i"}); $i++) { @@ -120,6 +125,7 @@ else { &save_directive("enabled", $in{'enabled'} ? 'true' : 'false', $jail); &save_directive("filter", $in{'filter'} || undef, $jail); &save_directive("backend", $in{'backend'} || undef, $jail); + &save_directive("port", $in{'port'} || undef, $jail); &save_directive("action", @actions ? join("\n", @actions) : undef, $jail); &save_directive("logpath", join("\n", @logpaths), $jail); From 35dfcbe456995addcba530897d8448a5372a5c94 Mon Sep 17 00:00:00 2001 From: Ilia Ross Date: Sat, 4 May 2024 21:38:31 +0300 Subject: [PATCH 4/4] Update language --- fail2ban/lang/en | 3 +++ 1 file changed, 3 insertions(+) diff --git a/fail2ban/lang/en b/fail2ban/lang/en index 4122522bd..6c42c2142 100644 --- a/fail2ban/lang/en +++ b/fail2ban/lang/en @@ -87,6 +87,7 @@ jail_title1=Create Jail jail_title2=Edit Jail jail_header=Filter action jail details jail_name=Jail name +jail_ports=Ports to block jail_egone=Jail no longer exists! jail_enabled=Currently enabled? jail_filter=Filter to search log for @@ -104,6 +105,8 @@ jail_ignoreip=IP addresses to never ban jail_err=Failed to save jail jail_eclash=A jail with the same name already exists jail_ename=Missing or invalid jail name +jail_ebackend=Invalid backend name +jail_eports=Invalid port name, number or range; use a single port name, number or a range in the form start:end; to specify multiple ports, separate them with commas jail_eaname=Invalid looking name parameter for action $1 jail_eport=Invalid port number for action $1 jail_eactions=No actions selected!