mirror of
https://github.com/webmin/webmin.git
synced 2026-08-04 23:20:40 +01:00
67 lines
2.1 KiB
Perl
Executable File
67 lines
2.1 KiB
Perl
Executable File
#!/usr/local/bin/perl
|
|
# Update default jail options
|
|
|
|
use strict;
|
|
use warnings;
|
|
no warnings 'redefine';
|
|
no warnings 'uninitialized';
|
|
require './fail2ban-lib.pl';
|
|
our (%in, %text, %config);
|
|
&ReadParse();
|
|
&error_setup($text{'jaildef_err'});
|
|
|
|
# Find default jail
|
|
my @jails = &list_jails();
|
|
my ($jail) = grep { $_->{'name'} eq 'DEFAULT' } @jails;
|
|
$jail || &error($text{'jaildef_egone'});
|
|
|
|
# Validate inputs
|
|
foreach my $f ("maxretry", "findtime", "bantime") {
|
|
$in{$f.'_def'} || $in{$f} =~ /^\-?\d+(\.\d+)?[mhdwy]?$/ ||
|
|
&error($text{'jail_e'.$f});
|
|
}
|
|
$in{'destemail_def'} || $in{'destemail'} =~ /^\S+(\@\S+)?$/ ||
|
|
&error($text{'jail_edestemail'});
|
|
my @ignoreips = $in{'ignoreip_def'} ? ( ) : split(/\s+/, $in{'ignoreip'});
|
|
foreach my $ip (@ignoreips) {
|
|
&check_ipaddress($ip) || &check_ip6address($ip) ||
|
|
($ip =~ /^([0-9\.]+)\/(\d+)/ && &check_ipaddress("$1")) ||
|
|
&to_ipaddress($ip) ||
|
|
&error($text{'jail_eignoreip'});
|
|
}
|
|
|
|
# Validate incremental banning options when submitted by a supported UI
|
|
my @increment_fields = ("bantime_increment", "bantime_factor",
|
|
"bantime_maxtime", "bantime_overalljails", "bantime_rndtime");
|
|
my $increment_submitted = scalar(grep { exists($in{$_}) } @increment_fields);
|
|
if ($increment_submitted && !&supports_bantime_increment()) {
|
|
&error($text{'jail_eincrement_version'});
|
|
}
|
|
if ($increment_submitted) {
|
|
my $err = &validate_bantime_increment_inputs(\%in);
|
|
&error($text{$err}) if ($err);
|
|
}
|
|
|
|
|
|
# Update the jail
|
|
&lock_all_config_files();
|
|
my %defaults = (
|
|
'maxretry' => 3,
|
|
'findtime' => 600,
|
|
'bantime' => 600,
|
|
);
|
|
foreach my $f ("maxretry", "findtime", "bantime") {
|
|
&save_directive($f, $in{$f."_def"} ? $defaults{$f} : $in{$f}, $jail);
|
|
}
|
|
&save_directive("ignoreip", @ignoreips ? join(" ", @ignoreips) : undef, $jail);
|
|
&save_directive("backend", $in{'backend'} || undef, $jail);
|
|
&save_directive("destemail", $in{'destemail_def'} ? undef : $in{'destemail'},
|
|
$jail);
|
|
&save_directive("banaction", $in{'banaction'} || undef, $jail);
|
|
&save_directive("protocol", $in{'protocol'} || undef, $jail);
|
|
&save_bantime_increment_options(\%in, $jail) if ($increment_submitted);
|
|
&unlock_all_config_files();
|
|
|
|
&webmin_log("jaildef");
|
|
&redirect("list_jails.cgi");
|