Viewing File: /usr/local/cpanel/whostmgr/docroot/templates/hulkd/views/configView.ptt
[%
SET on_switch_text = "ON";
SET off_switch_text = "OFF";
IF (locale.get_language_tag() != "en");
# These characters should not be translated.
on_switch_text = "I";
off_switch_text = "O";
END;
%]
<div>
<div class="row">
<div class="col-xs-12">
<h3>[% locale.maketext('Configuration Settings') %]</h3>
</div>
</div>
<div class="row">
<div class="col-md-12">
<section id="form">
<form class="layout-medium ng-pristine ng-valid" id="config_form" name="config_form" novalidate>
<div class="panel panel-default">
<div class="panel-heading">
<div class="switchable_panel">
<div class="switchable_panel_group">
<div class="panel_label">
[% locale.maketext('Username-based Protection') %]
</div>
<div class="panel_switch">
<div role="checkbox"
id="usernameToggleSwitch"
class="toggle-switch toggle-switch-xs"
tabindex="0"
uib-tooltip="[% locale.maketext('Click to enable or disable username-based protection.') %]"
tooltip-append-to-body="true"
aria-checked="{{ username_protection_enabled }}"
aria-label="[% locale.maketext("Click to enable or disable username-based protection.") %]"
ng-click="username_protection_enabled = !username_protection_enabled"
ng-keyup="handle_protection_keyup($event, 'username')"
ng-keyup="handle_protection_keydown($event)">
<div id="usernameToggleStatus" class="toggle-switch-animate" ng-class="{'switch-off': !username_protection_enabled, 'switch-on': username_protection_enabled}">
<span class="switch-left">
[% on_switch_text %]
</span>
<span class="knob">{{knobLabel}}</span>
<span class="switch-right">
[% off_switch_text %]
</span>
</div>
</div>
</div>
</div>
</div>
</div>
<div id="user_protection_settings" class="panel-body" ng-class="{off: !username_protection_enabled}">
<p class="description">
[% locale.maketext("Username-based protection tracks login attempts for user accounts. When disabled, [asis,cPHulk] will not lock user accounts, but existing account locks will remain.") %]
</p>
<div class="form-group">
<label for="txtField_brute_force_period_mins">[% locale.maketext('Brute Force Protection Period (in minutes)') %]</label>
<div class="row">
<div class="col-xs-12 col-sm-6 col-md-6 col-lg-6">
<input type="text"
id="txtField_brute_force_period_mins"
name="txtField_brute_force_period_mins"
ng-model="config_settings.brute_force_period_mins"
ng-disabled="!username_protection_enabled"
disable-validation="!username_protection_enabled"
required
positive-integer
num-greater-than-equal="1"
num-less-than-equal="1440"
placeholder="[% locale.maketext('Minutes') %]"
class="form-control" />
</div>
<div class="col-xs-12 col-sm-6 col-md-6 col-lg-6">
<ul validation-container field-name="txtField_brute_force_period_mins">
<validation-item
field-name="txtField_brute_force_period_mins"
validation-name="required">[% locale.maketext("This field is required.") %]</validation-item>
</ul>
</div>
</div>
</div>
<div class="form-group">
<label for="txtField_max_failures">[% locale.maketext('Maximum Failures by Account') %]</label>
<div class="row">
<div class="col-xs-12 col-sm-6 col-md-6 col-lg-6">
<input type="text"
id="txtField_max_failures"
name="txtField_max_failures"
ng-model="config_settings.max_failures"
ng-disabled="!username_protection_enabled"
disable-validation="!username_protection_enabled"
required
positive-integer
max-length="6"
placeholder="[% locale.maketext('Integer') %]"
class="form-control" />
</div>
<div class="col-xs-12 col-sm-6 col-md-6 col-lg-6">
<ul validation-container field-name="txtField_max_failures">
<validation-item
field-name="txtField_max_failures"
validation-name="required">[% locale.maketext("This field is required.") %]</validation-item>
</ul>
</div>
</div>
</div>
<div class="radio">
<label>
<input type="radio"
ng-model="username_protection_level"
value="local"
name="username_protection_level_setting"
ng-checked="username_protection_level == 'local'"
ng-disabled="!username_protection_enabled">
<span>[% locale.maketext('Apply protection to local addresses [output,strong,only]') %]</span>
</label>
</div>
<div class="radio">
<label>
<input type="radio"
ng-model="username_protection_level"
value="both"
name="username_protection_level_setting"
ng-checked="username_protection_level == 'both'"
ng-disabled="!username_protection_enabled">
<span>[% locale.maketext('Apply protection to local and remote addresses') %]</span>
</label>
</div>
<div class="checkbox">
<label>
<input type="checkbox" ng-model="config_settings.username_based_protection_for_root" ng-disabled="!username_protection_enabled"/>
<span>
[% locale.maketext('Allow username protection to lock the “[_1]” user.', 'root') %]
</span>
</label>
</div>
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading">
<div class="switchable_panel">
<div class="switchable_panel_group">
<div class="panel_label">
[% locale.maketext('[asis,IP] Address-based Protection') %]
</div>
<div class="panel_switch">
<div role="checkbox"
id="ipToggleSwitch"
class="toggle-switch toggle-switch-xs"
tabindex="0"
uib-tooltip="[% locale.maketext('Click to enable or disable [asis,IP] address-based protection.') %]"
tooltip-append-to-body="true"
aria-checked="{{ config_settings.ip_based_protection }}"
aria-label="[% locale.maketext("Click to enable or disable [asis,IP] address-based protection.") %]"
ng-click="config_settings.ip_based_protection = !config_settings.ip_based_protection"
ng-keyup="handle_protection_keyup($event, 'ip_based_protection')"
ng-keyup="handle_protection_keydown($event)">
<div id="ipToggleStatus" class="toggle-switch-animate" ng-class="{'switch-off': !config_settings.ip_based_protection, 'switch-on': config_settings.ip_based_protection}">
<span class="switch-left">
[% on_switch_text %]
</span>
<span class="knob">{{knobLabel}}</span>
<span class="switch-right">
[% off_switch_text %]
</span>
</div>
</div>
</div>
</div>
</div>
</div>
<div id="ip_protection_settings" class="panel-body" ng-class="{off: !config_settings.ip_based_protection}">
<p class="description">
[% locale.maketext("[asis,IP] Address-based protection tracks login attempts from specific [asis,IP] addresses. When disabled, [asis,cPHulk] will not block [asis,IP] addresses, but existing blocks will remain.") %]
</p>
<div class="form-group">
<label for="txtField_ip_brute_force_period_mins">[% locale.maketext('IP Address-based Brute Force Protection Period (in minutes)') %]</label>
<div class="row">
<div class="col-xs-12 col-sm-6 col-md-6 col-lg-6">
<input type="text"
id="txtField_ip_brute_force_period_mins"
name="txtField_ip_brute_force_period_mins"
ng-model="config_settings.ip_brute_force_period_mins"
ng-disabled="!config_settings.ip_based_protection"
disable-validation="!config_settings.ip_based_protection"
required
positive-integer
num-greater-than-equal="1"
num-less-than-equal="1440"
placeholder="[% locale.maketext('Minutes') %]"
class="form-control" />
</div>
<div class="col-xs-12 col-sm-6 col-md-6 col-lg-6">
<ul validation-container field-name="txtField_ip_brute_force_period_mins">
<validation-item
field-name="txtField_ip_brute_force_period_mins"
validation-name="required">[% locale.maketext("This field is required.") %]</validation-item>
</ul>
</div>
</div>
</div>
<div class="form-group">
<label for="txtField_max_failures_byip">[% locale.maketext('Maximum Failures per IP Address') %]</label>
<div class="row">
<div class="col-xs-12 col-sm-6 col-md-6 col-lg-6">
<input type="text"
id="txtField_max_failures_byip"
name="txtField_max_failures_byip"
ng-model="config_settings.max_failures_byip"
ng-disabled="!config_settings.ip_based_protection"
disable-validation="!config_settings.ip_based_protection"
required
positive-integer
max-length="6"
placeholder="[% locale.maketext('Integer') %]"
class="form-control" />
</div>
<div class="col-xs-12 col-sm-6 col-md-6 col-lg-6">
<ul validation-container field-name="txtField_max_failures_byip">
<validation-item
field-name="txtField_max_failures_byip"
validation-name="required">[% locale.maketext("This field is required.") %]</validation-item>
</ul>
</div>
</div>
</div>
<div class="form-group">
<label for="txtField_command_to_run_on_brute_force">
[% locale.maketext('Command to Run When an IP Address Triggers Brute Force Protection') %]
</label>
<span class="glyphicon glyphicon-info-sign"
role="checkbox"
tabindex="0"
aria-checked="{{ !bruteInfoCollapse }}"
aria-label="[% locale.maketext("Display additional help text for this field.") %]"
ng-click="bruteInfoCollapse = !bruteInfoCollapse"
ng-keyup="collapse_keydown($event)"
ng-keyup="collapse_keyup($event, 'bruteInfoCollapse')"></span>
<div uib-collapse="bruteInfoCollapse">
<span class="info-block">
<div class="alert alert-warning">
<span class="glyphicon glyphicon-exclamation-sign"></span>
<div class="alert-message">
<strong>[% locale.maketext('Warning:') %]</strong> [% locale.maketext('The command must complete within [quant,_1,second,seconds] to avoid a timeout.', 15) %]
</div>
</div>
<p><strong>[% locale.maketext('The following variables may be used in commands:') %]</strong>
<ul>
<li><strong>%exptime%</strong> - [% locale.maketext('The [asis,Unix] time when brute force protection will release the block') %]</li>
<li><strong>%max_allowed_failures%</strong> - [% locale.maketext('Maximum allowed failures to trigger this type (excessive or non-excessive failures)') %]</li>
<li><strong>%current_failures%</strong> - [% locale.maketext('Number of current failures') %]</li>
<li><strong>%excessive_failures%</strong> - [% locale.maketext('0 (not an excessive login failure) or 1 (an excessive login failure)') %]</li>
<li><strong>%reason%</strong> - [% locale.maketext('The reason for the block') %]</li>
<li><strong>%remote_ip%</strong> - [% locale.maketext('The blocked IP address') %]</li>
<li><strong>%authservice%</strong> - [% locale.maketext('The last service to request authentication (for example, [asis,webmaild])') %]</li>
<li><strong>%user%</strong> - [% locale.maketext('The last username to request authentication') %]</li>
<li><strong>%logintime%</strong> - [% locale.maketext('The time of the request') %]</li>
<li><strong>%ip_version%</strong> - [% locale.maketext('The IP version (4 or 6)') %]</li>
</ul>
</p>
</span>
</div>
<div class="row">
<div class="col-xs-12 col-sm-6 col-md-6 col-lg-6">
<input type="text"
id="txtField_command_to_run_on_brute_force"
name="txtField_command_to_run_on_brute_force"
ng-model="config_settings.command_to_run_on_brute_force"
ng-disabled="!config_settings.ip_based_protection"
placeholder="[% locale.maketext('Command Text') %]"
class="form-control" />
</div>
<div class="col-xs-12 col-sm-6 col-md-6 col-lg-6"></div>
</div>
</div>
<div class="checkbox">
<label>
<input type="checkbox" ng-model="config_settings.block_brute_force_with_firewall" ng-disabled="!config_settings.can_temp_ban_firewall || !config_settings.ip_based_protection"/>
<span>
[% locale.maketext('Block IP addresses at the firewall level if they trigger brute force protection') %]
</span>
</label>
</div>
<div class="alert alert-info" ng-show="!config_settings.can_temp_ban_firewall">
<span class="glyphicon glyphicon-info-sign"></span>
<div class="alert-message">
{{ config_settings.iptable_error }}
</div>
</div>
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading">[% locale.maketext('One-day Blocks') %]</div>
<div id="one_day_protection_settings" class="panel-body" ng-class="{off: !config_settings.ip_based_protection}">
<div class="form-group">
<label for="txtField_mark_as_brute">[% locale.maketext('Maximum Failures per IP Address before the IP Address is Blocked for One Day') %]</label>
<div class="row">
<div class="col-xs-12 col-sm-6 col-md-6 col-lg-6">
<input type="text"
id="txtField_mark_as_brute"
name="txtField_mark_as_brute"
ng-model="config_settings.mark_as_brute"
ng-disabled="!config_settings.ip_based_protection"
disable-validation="!config_settings.ip_based_protection"
required
positive-integer
max-length="6"
placeholder="[% locale.maketext('Integer') %]"
class="form-control" />
</div>
<div class="col-xs-12 col-sm-6 col-md-6 col-lg-6">
<ul validation-container field-name="txtField_mark_as_brute">
<validation-item
field-name="txtField_mark_as_brute"
validation-name="required">[% locale.maketext("This field is required.") %]</validation-item>
</ul>
</div>
</div>
</div>
<div class="form-group">
<label for="txtField_command_to_run_on_excessive_brute_force">
[% locale.maketext('Command to Run When an IP Address Triggers a One-Day Block') %]
</label>
<span class="glyphicon glyphicon-info-sign"
role="checkbox"
tabindex="0"
aria-checked="{{ !excessiveBruteInfoCollapse }}"
aria-label="[% locale.maketext("Display additional help text for this field.") %]"
ng-click="excessiveBruteInfoCollapse = !excessiveBruteInfoCollapse"
ng-keyup="collapse_keydown($event)"
ng-keyup="collapse_keyup($event, 'excessiveBruteInfoCollapse')"></span>
<div uib-collapse="excessiveBruteInfoCollapse">
<span class="info-block">
<div class="alert alert-warning">
<span class="glyphicon glyphicon-exclamation-sign"></span>
<div class="alert-message">
<strong>[% locale.maketext('Warning:') %]</strong> [% locale.maketext('The command must complete within [quant,_1,second,seconds] to avoid a timeout.', 15) %]
</div>
</div>
<p><strong>[% locale.maketext('The following variables may be used in commands:') %]</strong>
<ul>
<li><strong>%exptime%</strong> - [% locale.maketext('The [asis,Unix] time when brute force protection will release the block') %]</li>
<li><strong>%max_allowed_failures%</strong> - [% locale.maketext('Maximum allowed failures to trigger this type (excessive or non-excessive failures)') %]</li>
<li><strong>%current_failures%</strong> - [% locale.maketext('Number of current failures') %]</li>
<li><strong>%excessive_failures%</strong> - [% locale.maketext('0 (not an excessive login failure) or 1 (an excessive login failure)') %]</li>
<li><strong>%reason%</strong> - [% locale.maketext('The reason for the block') %]</li>
<li><strong>%remote_ip%</strong> - [% locale.maketext('The blocked IP address') %]</li>
<li><strong>%authservice%</strong> - [% locale.maketext('The last service to request authentication (for example, [asis,webmaild])') %]</li>
<li><strong>%user%</strong> - [% locale.maketext('The last username to request authentication') %]</li>
<li><strong>%logintime%</strong> - [% locale.maketext('The time of the request') %]</li>
<li><strong>%ip_version%</strong> - [% locale.maketext('The IP version (4 or 6)') %]</li>
</ul>
</p>
</span>
</div>
<div class="row">
<div class="col-xs-12 col-sm-6 col-md-6 col-lg-6">
<input type="text"
id="txtField_command_to_run_on_excessive_brute_force"
name="txtField_command_to_run_on_excessive_brute_force"
ng-model="config_settings.command_to_run_on_excessive_brute_force"
ng-disabled="!config_settings.ip_based_protection"
placeholder="[% locale.maketext('Command Text') %]"
class="form-control" />
</div>
<div class="col-xs-12 col-sm-6 col-md-6 col-lg-6"></div>
</div>
</div>
<div class="checkbox">
<label>
<input type="checkbox" ng-model="config_settings.block_excessive_brute_force_with_firewall" ng-disabled="!config_settings.can_temp_ban_firewall || !config_settings.ip_based_protection" />
<span>
[% locale.maketext('Block IP addresses at the firewall level if they trigger a one-day block') %]
</span>
</label>
</div>
<div class="alert alert-info" ng-show="!config_settings.can_temp_ban_firewall">
<span class="glyphicon glyphicon-info-sign"></span>
<div class="alert-message">
{{ config_settings.iptable_error }}
</div>
</div>
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading">[% locale.maketext('Login History') %]</div>
<div class="panel-body">
<div class="form-group">
<label for="txtField_lookback_period_min">[% locale.maketext('Duration for Retaining Failed Logins (in minutes)') %]</label>
<div class="row">
<div class="col-xs-12 col-sm-6 col-md-6 col-lg-6">
<input type="text"
id="txtField_lookback_period_min"
name="txtField_lookback_period_min"
ng-model="config_settings.lookback_period_min"
required
positive-integer
max-length="6"
placeholder="[% locale.maketext('Minutes') %]"
class="form-control" />
</div>
<div class="col-xs-12 col-sm-6 col-md-6 col-lg-6">
<ul validation-container field-name="txtField_lookback_period_min">
<validation-item
field-name="txtField_lookback_period_min"
validation-name="required">[% locale.maketext("This field is required.") %]</validation-item>
</ul>
</div>
</div>
</div>
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading">[% locale.maketext('Notifications') %]</div>
<div class="panel-body">
<div class="checkbox">
<label>
<input type="checkbox" ng-model="config_settings.notify_on_root_login" />
<span>
[% locale.maketext('Send a notification upon successful root login when the IP address is not on the whitelist') %]
</span>
</label>
</div>
<div class="checkbox">
<label>
<input type="checkbox"
ng-model="config_settings.notify_on_root_login_for_known_netblock" />
<span>
[% locale.maketext('Send a notification upon successful root login when the [asis,IP] address is not on the whitelist, but from a known [asis,netblock]') %]
</span>
</label>
</div>
<div class="checkbox">
<label>
<input type="checkbox"
ng-model="config_settings.notify_on_brute"
ng-disabled="!config_settings.ip_based_protection" />
<span>
[% locale.maketext('Send a notification when the system detects a brute force user') %]
</span>
</label>
</div>
<p class="text-info">
[% locale.maketext('[output,strong,Note:] Users can enable login notifications in the Contact Information area inside of [asis,cPanel].') %]
</p>
</div>
</div>
<div class="form-group">
<div class="row">
<div class="col-xs-12 col-sm-10 col-md-8 col-lg-6">
<button
type="submit"
spinner-id="saveConfig"
cp-action="save(config_form)"
button-class="btn-primary"
ng-disabled="disableSave(config_form)">[% locale.maketext("Save") %]</button>
</div>
</div>
</div>
</form>
</section>
</div>
</div>
</div>
Back to Directory
File Manager