Skip to main content
DCHost / Practical guide

cPanel and WHM security settings: 2FA, cPHulk and ModSecurity

This guide separates your cPanel account from server-wide WHM security settings. Shared hosting customers manage the options available to their own cPanel account. VPS/VDS administrators with WHM access also manage settings that affect other accounts on the server.

1. Which settings can you manage?​

TaskHosting customerWHM administrator
DCHost customer portal two-factor authenticationOwn customer portal accountCustomer account separate from WHM
cPanel account two-factor authenticationOwn cPanel account, when availableEnables the server policy and feature availability first
Security AdvisorNo access to the server reportReviews server configuration findings
cPHulkContacts support with the time and source IP if locked outManages login protection, exceptions and lock history
ModSecurityViews the domain setting when availableManages the module, rule sets, updates and events
SSH password policyCannot change the server-wide settingAffects SSH users, including root

Enabling 2FA in the DCHost customer portal does not automatically configure it for cPanel or WHM. For the portal, use the customer account security guide. To reach cPanel, start with hosting management.

2. Read the Security Advisor report​

In WHM, open Security Center → Security Advisor. The configuration check starts when the page opens. Wait for it to finish. Opening a recommendation and applying its suggested change are separate actions.

The completed example report uses Important, Information and Verified headings. The SSH and Apache findings are baseline conditions; the screenshot does not claim that every recommendation has been applied.

WHMPrioritize Security Advisor findings

Read each finding together with the service it affects after the check finishes.

WHM 138.0.15 · 15 October 2026
Prioritize Security Advisor findings — actual WHM screen; private details are masked.
A closer look
Confirm the check has finished — detail from the screenshot above

Step 1: Confirm the check has finished

  1. Confirm the check has finished

    Scan Again repeats the completed check. Use it after an appropriate correction.

  2. Evaluate network access separately

    The MySQL bind-address finding concerns the listening configuration. Check actual firewall access to TCP 3306 separately.

  3. Prepare access before SSH changes

    Do not apply password or direct-root login changes without tested key and recovery access.

This shows actual baseline findings. Recommendations are not automatically applied on this screen.

Color and statusHow to interpret it
Red — Important / WarningA serious finding to investigate first. Read the affected service and suggested setting.
Yellow — Possible IssueCheck whether the potential problem applies to your installation.
Blue — InformationAdditional information or an option to improve security.
Green — Verified / ResolvedA positive result for the condition checked; not proof that the entire server is secure.

For each finding, establish which service will be affected, the scope of the change and the recovery path. After an appropriate correction, use Scan Again to repeat the check. This report does not replace application code review, update tracking or backup testing.

WHMRead the Verified section in context

A green result describes only the stated check.

WHM 138.0.15 · 15 October 2026
Read the Verified section in context — actual WHM screen; private details are masked.
A closer look
Understand version checks — detail from the screenshot above

Step 1: Understand version checks

  1. Understand version checks

    The example reports an up-to-date kernel. This does not inspect every application, theme or plugin.

  2. Read each positive result separately

    Database and password conditions have separate rows. Green rows are not a server-wide security guarantee.

An actual crop from the completed report’s Verified section.

MySQL listening on all interfaces and TCP 3306 being reachable from the internet are different findings; verify network access rules separately. Prepare key and recovery access before acting on SSH findings. CageFS, mentioned in the report, is a CloudLinux feature; do not assume it is available in an AlmaLinux installation. Paid-product suggestions in Information are not automatically mandatory corrections.

3. Review cPHulk login protection​

Open Security Center → cPHulk Brute Force Protection. cPHulk monitors repeated login attempts that may be guessing passwords. It is a separate layer from ModSecurity's web request inspection and the firewall's network access rules.

This demo shows cPHulk is Enabled. The account-based and IP-based scopes are reviewed separately below.

WHMRead cPHulk status and account scope

The overall switch and account-based settings are separate.

WHM 138.0.15 · 15 October 2026
Read cPHulk status and account scope — actual WHM screen; private details are masked.
A closer look
Check overall status — detail from the screenshot above

Step 1: Check overall status

  1. Check overall status

    This demo shows cPHulk is Enabled. Review the scope and thresholds below separately.

  2. Read the interval and count together

    Brute Force Protection Period and Maximum Failures by Account work together; the displayed values are not universal recommendations.

  3. Notice the root-account scope

    Allow username protection to lock the root user is a separate option. Verify recovery before changing administrator access.

No thresholds or access settings were changed while capturing this screen.

Configuration Settings contains two different scopes:

  • Username-based Protection: evaluates attempts against the same account, including attempts from different addresses.
  • IP Address-based Protection: evaluates attempts from the same source IP. It can also affect legitimate users sharing an office or VPN exit address.
WHMSeparate IP protection from account locking

Consider legitimate users who share the same source address.

WHM 138.0.15 · 15 October 2026
Separate IP protection from account locking — actual WHM screen; private details are masked.
A closer look
Read the IP-based scope — detail from the screenshot above

Step 1: Read the IP-based scope

  1. Read the IP-based scope

    IP Address-based Protection monitors logins from a source address. It is enabled here.

  2. Review the firewall option separately

    Automatic firewall-level blocking is a separate setting. Review it alongside the existing network access plan.

Do not add arbitrary scripts to the command execution fields.

The displayed intervals and attempt counts are not a universal security recipe. Consider administrator access, customer login patterns and actual logs before choosing thresholds. Do not set a value to 0 merely to appear stricter; in some fields this can lock all password logins, including root.

Preserve administrator access​

Use Whitelist Management only for trusted administration sources. Do not whitelist broad networks or entire countries for convenience. A whitelist entry does not provide a user's password or modify the network firewall rule.

The initial review showed The whitelist is empty. Do not assume the trusted administration source has already been added.

WHMReview the whitelist for administration access

The list should cover only trusted source addresses.

WHM 138.0.15 · 15 October 2026
Review the whitelist for administration access — actual WHM screen; private details are masked.
A closer look
Check existing entries — detail from the screenshot above

Step 1: Check existing entries

  1. Check existing entries

    This baseline shows The whitelist is empty. Do not assume your source address is already listed.

  2. Plan narrowly scoped entries

    New Whitelist Records is for trusted administration sources. Do not add the whole internet or unnecessarily broad networks.

This screen was inspected only; no entries were added or removed.

WHMRead login history in the correct report

A failed-login entry and an active block are different states.

WHM 138.0.15 · 15 October 2026
Read login history in the correct report — actual WHM screen; private details are masked.
A closer look
Select the report type — detail from the screenshot above

Step 1: Select the report type

  1. Select the report type

    Failed Logins, Blocked Users and Blocked IP Addresses answer different questions.

  2. Correlate the row’s details

    Match the account, service and time to the real action. One entry alone is not proof of an attack.

  3. Do not clear history before reviewing it

    Remove Blocks and Clear Reports changes blocks and reports; it is not a read-only view.

The source IP is masked. No deliberate failed-login or lockout test was performed.

In History Reports, read the time, account, service, source address and any lock expiry together. A mistyped password can create an entry; not every row is an attack. Do not remove blocks and erase the evidence with Remove Blocks and Clear Reports before understanding the problem. Disabling protection may not automatically clear existing account locks.

If you are a customer who cannot log in, avoid repeatedly trying passwords. Include the service, time and displayed message in a support request. Do not send your password.

4. Separate the ModSecurity module from its rule set​

ModSecurity inspects web requests against rules. Seeing a “ModSecurity” heading does not by itself prove that maintained rules are installed and enabled for the relevant domain.

Open Security Center → ModSecurity Vendors. This interface requires the ModSecurity Apache module. If the page reports that the module is missing, verify its package state under Software → EasyApache 4.

At the baseline check, Apache's mod_security2 module was installed, but the legacy OWASP row in Vendors said This vendor is not installed. The actual screen below illustrates the difference.

WHMCheck whether the listed vendor is installed

A rule set can appear in the list without being installed.

WHM 138.0.15 · 15 October 2026
Check whether the listed vendor is installed — actual WHM screen; private details are masked.
A closer look
Read the installation status — detail from the screenshot above

Step 1: Read the installation status

  1. Read the installation status

    This baseline explicitly says This vendor is not installed.

  2. Identify the legacy OWASP entry

    The V3.0 row is the legacy vendor path. Use the guide’s EasyApache 4 instructions for the maintained package.

The legacy Install button was not used. The maintained package path was checked against the official source.

Check these four points separately:

  1. Is the ModSecurity module installed on this web server?
  2. Is the intended rule set installed and enabled?
  3. Is the rule set's update mechanism working?
  4. Is the domain scope correct?

Do not confuse the old OWASP V3.0 entry with the maintained package. cPanel's official documentation states that the old OWASP ModSecurity Core Rule Set V3.0 entry in Vendors no longer receives updates. The maintained package is available through EasyApache 4 → Additional Packages → ea-modsec2-rules-owasp-crs. Package changes and rule deployment can restart Apache; account for running sites and recovery before applying them.

Install the maintained rule package and verify the result​

This section requires the WHM account that administers the server. Record the working configuration and choose an appropriate maintenance window because Apache may restart.

  1. Open Software → EasyApache 4, then choose Currently Installed Packages → Customize to edit the existing profile.
  2. Find ea-modsec2-rules-owasp-crs under Additional Packages. If mod_security2 is already installed, there is no need to switch to a different ModSecurity version.
  3. Continue to Review. Read the packages to install, upgrade and remove; stop and investigate any unexpected removal or PHP change.
  4. Start Provision only for the reviewed change and wait for completion.
  5. Return to ModSecurity Vendors. Check Enabled, Updates and Sets Included for the package-provided vendor.
  6. Check rules in ModSecurity Tools → Rules List, the ModSecurity Configuration → Rules Engine mode, and normal operations on your websites again.
WHMVerify the maintained package vendor

After installation, check both the enable and update switches.

WHM 138.0.15 · 15 October 2026
Verify the maintained package vendor — actual WHM screen; private details are masked.
A closer look
Identify the package path — detail from the screenshot above

Step 1: Identify the package path

  1. Identify the package path

    OWASP CRS v3.x for ModSec 2.9 (via pkg) is provided through EasyApache 4. It differs from the old V3.0 Install entry.

  2. Read enable and update states separately

    Enabled and Updates are On, with 33 / 33 Sets Included. Do not infer the package version from the description alone.

The vendor description displays v3.3.9, while the installed package and rule content were verified as 3.3.10. Screenshot text was not altered.

After this example installation, the package-provided OWASP vendor showed Enabled: On, Updates: On and Sets Included: 33 / 33. The vendor description displayed v3.3.9, while the installed package and rule content were verified as 3.3.10; do not determine the version from the description alone.

WHMCheck published rules

After package installation, the rule list differs from the empty baseline.

WHM 138.0.15 · 15 October 2026
Check published rules — actual WHM screen; private details are masked.
A closer look
Read status and scope together — detail from the screenshot above

Step 1: Read status and scope together

  1. Read status and scope together

    Rules show Enabled and Published. The 1 Vendor badge counts vendors in the list.

  2. Compare the version in rule content

    Rule content shows OWASP_CRS/3.3.10. If the vendor description differs, verify the package and rule versions separately.

No rules were edited or disabled and no attack traffic was generated for this check.

The final Rules List was no longer empty: it showed 1 Vendor and Enabled / Published rules. Rules Engine remained set to Process the rules. The example site's PHP and database-read check returned HTTP 200. This used the server IP with the correct domain Host header; that result does not verify public DNS or an HTTPS certificate for the domain.

Investigate a rule that interferes with a site action​

In Security Center → ModSecurity Tools → Hits List, correlate the action's time, domain, request path and Rule ID. The list may show only the most relevant event for a request; inspect the underlying log when necessary.

The initial review showed Rules List → You have no rules / 0 Vendors and Hits List → The Hits List is empty. At the same time, Rules Engine → Process the rules was selected. This illustrates why the engine mode and rule-set availability are separate checks.

WHMRecognize an empty rule list

An installed module does not prove that rules are present.

WHM 138.0.15 · 15 October 2026
Recognize an empty rule list — actual WHM screen; private details are masked.
A closer look
Read the actual result — detail from the screenshot above

Step 1: Read the actual result

  1. Read the actual result

    This baseline says You have no rules; it does not establish completed protection.

  2. Check the vendor count

    0 Vendors indicates no vendor rule sets in this list at that time.

This state was captured before the subsequent package installation.

WHMRead the Rules Engine mode

Rule processing and detection-only mode are different.

WHM 138.0.15 · 15 October 2026
Read the Rules Engine mode — actual WHM screen; private details are masked.
A closer look
Verify the selected mode — detail from the screenshot above

Step 1: Verify the selected mode

  1. Verify the selected mode

    Process the rules is selected here. The baseline still had no rule set, so the conditions must be checked separately.

  2. Understand detection-only behavior

    The lower option evaluates rules without applying disruptive actions such as blocking.

No global directive was changed. The screenshot is cropped to Rules Engine.

WHMReview WAF events in Hits List

Match the real request by time and rule identifier.

WHM 138.0.15 · 15 October 2026
Review WAF events in Hits List — actual WHM screen; private details are masked.
A closer look
Identify the event columns — detail from the screenshot above

Step 1: Identify the event columns

  1. Identify the event columns

    Date, Host, Source, Status and Rule ID are used together for diagnosis.

  2. Interpret an empty list correctly

    The Hits List is empty means no events appear in this view; it is not a protection guarantee.

No attack traffic was generated or vendor report sent for this capture.

An empty list does not establish that every attack was blocked or that protection is active. If a form fails, match the relevant event to the real request before changing protection. An administrator should evaluate any narrowly scoped exception. Actions such as Deploy and Restart Apache apply changes; they are not read-only views.

5. Configure two-factor authentication for the right account​

In WHM, open Security Center → Two-Factor Authentication. Enabling the server policy allows users to configure 2FA for their own accounts. It does not automatically finish every user's setup.

The example server's baseline state is Security Policy is Disabled. If the feature is unavailable in a customer's cPanel, the provider must first review the server policy and feature permissions.

WHMSeparate the 2FA policy from account setup

The WHM policy is the first layer that allows users to configure 2FA.

WHM 138.0.15 · 15 October 2026
Separate the 2FA policy from account setup — actual WHM screen; private details are masked.
A closer look
Read the server policy — detail from the screenshot above

Step 1: Read the server policy

  1. Read the server policy

    This baseline says Security Policy is Disabled. Turning it on does not configure every account.

  2. Understand the Issuer field

    Issuer sets the name shown by the authenticator app; it is not a password or security key.

The hostname-based issuer value is masked. The policy was not changed during this capture.

  • Settings: manages the service name displayed in the authenticator application. A name change alone does not protect an account.
  • Manage Users: manages users with configured 2FA. It cannot perform the first setup on behalf of another cPanel user.
  • Manage My Account: configures the root or authorized reseller account in the current WHM session. It is separate from a customer's cPanel account.

A cPanel user opens Security → Two-Factor Authentication in their own panel. The flow is Set Up Two-Factor Authentication, adding the QR/Key to an authenticator app, entering its six-digit code in Security Code, and selecting Configure Two-Factor Authentication. QR codes, keys and live codes are account access information; do not include them in public screenshots or support messages.

In the example, Manage Users is empty and the current WHM account is Not Configured. These screens do not establish completed enrollment or a tested 2FA-protected login.

WHMCheck users with configured 2FA

Manage Users does not replace the user’s own setup.

WHM 138.0.15 · 15 October 2026
Check users with configured 2FA — actual WHM screen; private details are masked.
A closer look
Check the selected tab — detail from the screenshot above

Step 1: Check the selected tab

  1. Check the selected tab

    Manage Users is the user list; Manage My Account belongs to the current WHM account.

  2. Read the list result

    No users have two-factor authentication configured in this baseline.

This table cannot perform the initial 2FA setup for another cPanel user.

WHMUnderstand Manage My Account scope

This section manages the account in the current WHM session.

WHM 138.0.15 · 15 October 2026
Understand Manage My Account scope — actual WHM screen; private details are masked.
A closer look
Know which account would change — detail from the screenshot above

Step 1: Know which account would change

  1. Know which account would change

    In a root WHM session, this tab belongs to root. It is not the customer’s cPanel account.

  2. Recognize an unconfigured account

    Not Configured means setup is not complete for this account. QR/Key values belong only in that account’s secure setup.

Root setup was not started; no QR code or authentication key was generated.

After setup, test a new session with the password and authentication code. Coordinate the timing when others are working in the same account because existing sessions can be affected. If access to the authenticator is lost, start the account recovery process through support.

Review the API scope separately. Do not assume that 2FA on the panel login automatically protects every API request. Configure Security Policies → Security Policy Extensions → API requests and API token permissions are managed separately.

6. Test SSH keys before disabling password access​

Security Center → SSH Password Authorization Tweak enables or disables password authentication for SSH on the server. It affects root as well. It does not change the web password of your cPanel account.

The actual baseline screen shows Password Authentication is currently enabled and the Disable Password Auth button. The setting was not changed here.

WHMRead the effect of the SSH password policy

This change affects SSH users on the server, including root.

WHM 138.0.15 · 15 October 2026
Read the effect of the SSH password policy — actual WHM screen; private details are masked.
A closer look
Check current status — detail from the screenshot above

Step 1: Check current status

  1. Check current status

    This demo says Password Authentication is currently enabled.

  2. Test the key before using the button

    Disable Password Auth changes a setting. First verify key login in a new SSH session and confirm recovery access.

The password policy was not changed here; the button is shown only.

Before planning to disable SSH password authentication:

  1. Prepare and authorize an SSH key for the correct account.
  2. Keep the existing session open and complete a real key-based login in a new, independent SSH connection.
  3. Verify console/recovery access and the key readiness of other affected users.
  4. Only then apply Disable Password Auth as a planned change; test the result with another connection.

A key file appearing in a list does not prove that key-based login works. For a connection problem, follow the SSH error guide rather than disabling the firewall or guessing at SSH configuration changes.

When should you contact support?​

A missing administrator menu in your cPanel account can be the normal permission boundary. You do not need the root password to find a customer feature. Include the service, action, time and error message in the request. For a WAF issue, the URL path and any Rule ID help; for a login issue, the source IP and time help. Do not send passwords, QR codes, API tokens or SSH private keys.

Plan security settings together with update tracking and restorable backups. Do not run the Ubuntu/Debian commands in the Linux updates guide on an AlmaLinux server.

Official sources​

Sources were checked on 15 October 2026. Menu labels can vary by version and permissions.