Linux是现在最流行的服务器操作系统大部分网站和应用都跑在Linux服务器上但是很多人部署完应用就不管了没有做安全加固导致服务器很容易被攻击被入侵数据泄露等等安全问题。

其实Linux服务器安全加固很重要也不是很难掌握了基本的方法就能大大提高服务器的安全性我做Linux运维很多年了加固过很多服务器也处理过一些安全事件踩了很多坑也总结了很多经验今天就来分享一下Linux服务器安全加固的实战经验从入门到精通全面分享。

一、账号安全

账号安全是服务器安全的第一道防线首先要做好账号安全。

1. 禁用root远程登录

root是Linux的超级管理员权限最大如果root被破解服务器就完全被控制了所以要禁用root远程登录用普通用户登录然后用sudo切换到root执行管理操作。

修改/etc/ssh/sshd_config:

PermitRootLogin no

然后重启ssh服务:

systemctl restart sshd

2. 创建普通用户配置sudo

创建一个普通用户用来远程登录然后配置sudo权限让它能执行管理操作。

# 创建用户
useradd admin
passwd admin

# 配置sudo
usermod -aG wheel admin  # CentOS
# 或者
usermod -aG sudo admin   # Ubuntu

这样就能用admin用户远程登录然后用sudo执行管理操作更安全。

3. 密码策略

设置强密码策略要求密码长度至少8位包含大小写字母数字特殊字符定期修改密码不要用弱密码比如123456password等等很容易被暴力破解。

可以安装pam_cracklib模块强制密码复杂度:

# CentOS
yum install pam_cracklib

# Ubuntu
apt-get install libpam-cracklib

修改/etc/pam.d/system-auth配置密码复杂度。

4. 删除无用账号

删除系统里无用的账号和测试账号减少攻击面用cat /etc/passwd查看所有账号把不需要的账号删掉。

二、SSH安全

SSH是远程登录的主要方式也是攻击者重点攻击的目标所以SSH安全很重要。

1. 修改默认端口

SSH默认端口是22很多扫描器都会扫描22端口修改默认端口能减少被扫描和攻击的概率。

修改/etc/ssh/sshd_config:

Port 2222

然后重启ssh服务注意防火墙要开放新的端口不然会连不上。

2. 使用密钥登录

用SSH密钥登录比密码登录更安全密钥很难被暴力破解推荐禁用密码登录只用密钥登录。

首先在本地生成密钥对:

ssh-keygen -t rsa -b 4096

然后把公钥上传到服务器:

ssh-copy-id -p 2222 admin@server_ip

然后修改/etc/ssh/sshd_config禁用密码登录:

PasswordAuthentication no

重启ssh服务这样就只能用密钥登录了更安全。

3. 限制登录IP

如果只有固定的IP需要登录服务器可以用防火墙或者TCP Wrappers限制只有指定的IP能登录SSH大大提高安全性。

比如用iptables限制只有192.168.1.100能访问2222端口:

iptables -A INPUT -p tcp --dport 2222 -s 192.168.1.100 -j ACCEPT
iptables -A INPUT -p tcp --dport 2222 -j DROP

4. 配置失败锁定

配置登录失败多次就锁定账号防止暴力破解可以用pam_tally2模块或者fail2ban工具。

fail2ban能监控日志发现多次登录失败就自动封禁IP很好用推荐安装。

# CentOS
yum install fail2ban

# Ubuntu
apt-get install fail2ban

配置fail2ban监控SSH登录失败封禁IP。

三、防火墙

防火墙是服务器安全的重要屏障能过滤进出的流量只开放需要的端口关闭不需要的端口减少攻击面。

Linux常用的防火墙有iptables和firewalldCentOS7默认用firewalldUbuntu用ufw或者iptables。

firewalld基本操作:

# 启动firewalld
systemctl start firewalld
systemctl enable firewalld

# 查看开放的端口
firewall-cmd --list-ports

# 开放端口
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --permanent --add-port=443/tcp
firewall-cmd --permanent --add-port=2222/tcp

# 移除端口
firewall-cmd --permanent --remove-port=3306/tcp

# 重新加载
firewall-cmd --reload

原则是只开放需要的端口比如80443SSH端口等等其他端口都关闭特别是数据库端口比如33066379不要对外开放只允许内网访问。

四、文件权限

文件权限也很重要合理的文件权限能防止未授权的访问和修改。

1. 敏感文件权限

敏感文件比如/etc/passwd/etc/shadow/etc/sudoers等等权限要设置合理不要让普通用户能修改。

# 设置shadow文件权限,只有root能读
chmod 600 /etc/shadow

# 设置sudoers文件权限
chmod 440 /etc/sudoers

2. 网站文件权限

网站文件权限要设置合理一般文件权限644目录权限755不要设置777那样所有人都能读写执行很危险。

# 设置文件权限
find /var/www -type f -exec chmod 644 {} \;

# 设置目录权限
find /var/www -type d -exec chmod 755 {} \;

运行用户也要设置合理比如Nginx用nginx用户PHP-FPM用www-data用户不要用root运行Web服务防止漏洞被利用获取root权限。

五、安全工具

安装一些安全工具能帮助我们检测和防护安全威胁。

1. fail2ban

前面提到了fail2ban能监控日志发现攻击行为自动封禁IP推荐安装配置监控SSHHTTP等等服务。

2. rkhunter / chkrootkit

rootkit检测工具能扫描系统有没有被植入rootkit后门定期扫描能及时发现入侵。

# 安装rkhunter
yum install rkhunter

# 扫描
rkhunter --check

3. ClamAV

杀毒软件能扫描病毒和恶意软件虽然Linux病毒少但是服务器上可能会有网页木马恶意脚本等等定期扫描能及时发现。

4. 日志监控

监控系统日志和应用日志能及时发现异常行为和攻击比如登录失败异常访问错误等等可以用ELK或者其他日志系统集中管理和分析日志。

六、系统更新和备份

1. 定期更新系统

定期更新系统和软件修复安全漏洞很多攻击都是利用已知的漏洞及时更新能避免很多攻击。

# CentOS
yum update

# Ubuntu
apt-get update && apt-get upgrade

但是更新前要做好备份测试没问题再更新生产环境避免更新导致服务不可用。

2. 定期备份

定期备份重要的数据和配置即使被攻击或者系统崩溃也能快速恢复减少损失备份要异地存储不要只存在服务器上。

备份的内容包括网站代码数据库配置文件等等备份策略要根据业务需求制定比如每天增量备份每周全量备份等等。

七、写在最后

Linux服务器安全加固实战:从入门到精通。

服务器安全是一个系统工程不是做一次就一劳永逸的需要持续关注定期检查不断加固才能保证服务器的安全。

这篇文章分享了账号安全SSH安全防火墙文件权限安全工具系统更新备份等等基本的安全加固方法掌握了这些就能大大提高服务器的安全性避免大部分攻击。

当然安全没有绝对只有相对我们要保持警惕定期检查及时更新不断学习新的安全知识和攻击手段才能更好地保护我们的服务器。

最后用一句话结尾:

"安全是一切的基础没有安全其他的一切都是零做好服务器安全加固是每个运维和开发者的责任。"

祝大家的服务器都安全稳定运行!