Linux Server Hardening Checklist: 30 Security Best Practices

Linux Server Hardening Checklist : 30 Security Best Practices
Our Customers Say Excellent Across Platforms
Cyberin - Review on Google Cyberin - Review on Trustpilot

It is very common to find Linux servers running websites, applications, databases and business systems. But default server settings create unnecessary security holes. Linux Server Hardening mitigates these risks through enhanced system settings, restricted access, and updated security controls.

A good hardening process is not a single security tool. It’s about updates, access control, firewall rules, monitoring, backups and regular vulnerability scanning . A practical checklist for production Linux servers

1. Keep the Operating System Updated

Install security updates regularly. On Ubuntu or Debian, you can run:

sudo apt update && sudo apt upgrade

For RHEL-based systems:

sudo dnf update

Enable automatic security updates where appropriate, especially for servers that need frequent patching.

2. Remove Unnecessary Software

Every installed package can increase your attack surface. Check installed services and applications, then remove anything the server does not need.

systemctl list-unit-files --type=service

Disable unused services instead of leaving them running.

3. Configure a Firewall

Use a firewall to control incoming and outgoing connections. For example, UFW can allow SSH and web traffic while blocking other unsolicited connections:

sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable

Only open ports that your applications actually require.

4. Secure SSH Access

SSH is a common target for automated attacks. Disable direct root login and consider using SSH keys instead of passwords.

Edit:

sudo nano /etc/ssh/sshd_config

Set:

PermitRootLogin no
PasswordAuthentication no

Restart SSH after validating the configuration.

5. Change the Default SSH Port Carefully

Moving SSH away from port 22 can reduce automated scanning noise, but it is not a replacement for authentication security. Firewall rules and monitoring remain important.

6. Create Separate User Accounts

Avoid sharing one administrative account. Give each administrator a separate user and use sudo when elevated privileges are required.

sudo adduser adminuser
sudo usermod -aG sudo adminuser

7. Follow the Principle of Least Privilege

Users and applications should receive only the permissions they need. Review file ownership, group membership, and sudo privileges regularly.

sudo visudo

Avoid giving unrestricted sudo access unless it is genuinely necessary.

8. Protect File Permissions

Review sensitive files such as SSH keys, configuration files, and application credentials.

For example:

chmod 600 ~/.ssh/authorized_keys
chmod 600 ~/.ssh/id_rsa

Incorrect permissions can expose credentials to other users.

9. Disable Unused Accounts

Old accounts can become forgotten entry points. Review local users regularly:

cat /etc/passwd

Lock accounts that are no longer required.

10. Use Strong Authentication

Require strong passwords for accounts that still use password authentication. For administrative environments, consider multi-factor authentication where supported.

11. Install Malware Protection

That doesn’t mean Linux malware is as common as traditional desktop malware. Servers can be hacked as well. There are tools , like ClamAV , that will scan a file and find known threats .

12. Protect Against Brute-Force Attacks

Use a tool such as Fail2ban to track failed login attempts and temporarily block suspicious IPs.

This is especially handy for exposed ssh services.

13. Secure the Kernel

Upgrade the Linux kernel.Check the kernel parameters for security. For example, on a server that is not a router, it may be acceptable to disable IP forwarding.

sysctl net.ipv4.ip_forward

Do not change kernel parameters blindly. Test changes before going to production.

14. Enable SELinux or AppArmor

Mandatory access barriers provide another layer of security. SELinux is commonly used in RHEL based distributions and AppArmor is commonly used in Ubuntu based distributions.

Check the status of policy changes before applying them:

getenforce

or:

sudo aa-status

15. Secure Cron Jobs

Look for unusual scripts or commands in scheduled tasks.

crontab -l
sudo ls -la /etc/cron.*

Delete old jobs and prevent unauthorized script edits.

16. Protect Environment Secrets

Never put database passwords, API keys, or any private credentials in public files. Keep config files small or use a proper secrets management system .

17. Disable Unnecessary Network Services

Check listen port:

sudo ss -tulpn

Review any services you don’t recognize and disable any you don’t need.

18. Configure Secure DNS

Secured DNS configuration from changes by unauthorized persons and trusted DNS resolvers. Connectivity and security monitoring rely on reliable DNS settings.

19. Enable Logging

Review authentication, system and application logs periodically. For traditional log files or journald on Linux systems

sudo journalctl -p warning

More important in production. Centralized. It has to be. Logging

20. Monitor Failed Logins

Regularly review for suspicious authentication activity

sudo journalctl _SYSTEMD_UNIT=ssh.service

Brute force attacks on unknown addresses are failing repeatedly.

21. Use File Integrity Monitoring

File integrity monitoring tools can detect unauthorized changes to critical system files. good to detect unauthorized changes after an incident of security.

22. Scan for Vulnerabilities

Perform regular vulnerability scans. Tools like OpenSCAP, Lynis and vulnerability-management platforms can be used to find outdated packages, weak configurations and missing security controls.

23. Automate Security Checks

It’s easy to forget to do a manual check. Schedule the audits with cron or systemd timers .

For example:

0 3 * * 0 /usr/bin/lynis audit system --quiet

Review automated reports rather than assuming every finding requires immediate action.

24. Maintain Regular Backups

Backup critical application data, databases, config files . And always have at least one backup off the production server.

A backup is useless if you can’t restore, so test recovery frequently.

25. Encrypt Sensitive Data

Encrypt sensitive information in transit and at rest, as appropriate. You can reduce exposure with HTTPS, encrypted storage and secure database connections.

26. Secure Web Applications

Update CMS platforms, frameworks, plugins & dependencies. Application Security is critical, you can’t fix an insecure application by hardening the server.

27. Protect the Boot Process

Access to production servers should be restricted to physical and console access . Configure the secure bootloader and protect the boot parameters from unauthorized changes as appropriate.

28. Review Security Policies

Find out who can access the server and which ports are required. How do you do backups? What happens in the event of an incident? Documentation reduces the maintenance burden of security practices.

29. Test Hardening Changes

Always test before making major security changes to production systems. Changing a firewall rule or SSH can accidentally lock admins out.

Always have a backup method before making any major configuration changes.

30. Follow Compliance Requirements

Security controls should be appropriate to your organization’s needs and applicable standards. Depending on the environment, helpful guidance can be given by frameworks like CIS Benchmarks, PCI DSS, SOC 2 and ISO 27001.

Conclusion

Hardening Linux servers is an ongoing effort, not a one-time configuration. Patch software , limit access , monitor activity , protect backups and run periodic vulnerability scans .

This is much easier to do on production servers with automation. Automated patching, configuration audits, log monitoring, vulnerability scanning and tested backups are all important, but add regular manual reviews to the mix. Most importantly, make sure you document all security changes that you make to keep your server secure as applications and infrastructure change.