打造铜墙铁壁:CentOS 服务器安全设置与加固实战指南


嘿,哥们儿!刚拿到一台崭新的 CentOS 服务器是不是特兴奋?准备大展拳脚之前,先等等。在把你的宝贝服务器暴露在互联网这个“狂野西部”之前,咱们得先给它穿上一层“防弹衣”。

网络上的坏家伙们(脚本小子、黑客)就像是嗅到血腥味的鲨鱼,无时无刻不在扫描着脆弱的服务器。一个不留神,你的服务器可能就成了别人的“矿机”或者“肉鸡”。

别担心,搞定服务器安全没那么玄乎。跟着我,一步步来,咱们把安全这事儿做得明明白白。

第一道防线:基础系统加固

就像盖房子要打好地基一样,服务器安全也得从最基础的地方做起。

1. 保持系统“最新鲜”

软件的漏洞是黑客最喜欢的突破口。保持系统和软件是最新版本,意味着你已经堵上了大部分已知的漏洞。

要做啥?

定期更新系统。一条命令就搞定:

sudo yum update -y

案例:想当年,多少服务器因为没有及时更新 OpenSSL 的“心脏滴血”漏洞而中招,数据被一览无余。所以,别懒,yum update 敲起来!

2. 精简服务,少即是多

你安装的软件和服务越多,潜在的攻击面就越大。一个原则:用不着的,统统关掉或卸载。

要做啥?

先看看你的服务器上跑了哪些服务:

sudo systemctl list-units --type=service --state=running

看到不认识或者确定用不到的(比如默认的 Postfix 邮件服务,如果你不用它发邮件的话),就果断禁用它。

# 以 postfix 为例
sudo systemctl stop postfix
sudo systemctl disable postfix

这样一来,攻击者能利用的“门”就少了好几个。

3. 配置防火墙:我的地盘我做主

防火墙是服务器的“门卫”,负责控制哪些数据可以进,哪些可以出。CentOS 默认使用 firewalld 作为防火墙工具,非常好用。

要做啥?

确保防火墙是开启状态,并且只开放你需要的端口。

# 启动并设置开机自启
sudo systemctl start firewalld
sudo systemctl enable firewalld

# 举个例子:只开放 SSH 和 HTTP 服务
sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --permanent --add-service=http

# 如果你有其他端口需要开放,比如 8080
# sudo firewall-cmd --permanent --add-port=8080/tcp

# 别忘了重新加载配置让它生效
sudo firewall-cmd --reload

案例:很多新手站长把数据库端口(比如 MySQL 的 3306)直接暴露在公网,结果被黑客暴力破解密码,整个数据库被删,然后勒索比特币。有了防火墙,你可以只允许你的应用服务器IP来访问这个端口,安全系数瞬间拉满。

第二道防线:锁好“大门” - SSH 安全

SSH 是我们远程管理服务器的唯一通道,它的安全至关重要。默认的 SSH 配置简直就是在对黑客说:“欢迎光临”。

1. 换掉默认端口

SSH 默认端口是 22,全世界的攻击脚本都在不知疲倦地扫描这个端口。换个不常用的端口,就能躲过绝大部分的“无脑”扫描。

要做啥?

编辑 SSH 配置文件:

sudo vi /etc/ssh/sshd_config

找到 #Port 22 这一行,去掉 #,然后把 22 改成一个你喜欢的数字(比如 22334,1024-65535之间随便选)。

# Port 22
Port 22334

2. 禁止 Root 用户直接登录

用 root 用户直接登录等于给了攻击者一次猜中密码就获得最高权限的机会,非常危险。

要做啥?

还是在那个配置文件里,找到 PermitRootLogin 这一项,把它改成 no

PermitRootLogin no

重要:在做这一步之前,请务必保证你已经创建了一个可以正常登录的普通用户,并且这个用户可以通过 sudo 提权,否则你将把自己锁在门外!

# 创建一个新用户,比如 'admin'
adduser admin
passwd admin

# 赋予 'admin' sudo 权限
usermod -aG wheel admin

3. 强力推荐:使用密钥登录

密码总有被猜到的风险,而 SSH 密钥认证几乎不可能被破解。它的原理是,你创建一对密钥(一个公钥,一个私钥),公钥放在服务器上,私钥自己保管好。登录时,服务器会用公钥验证你手里的私钥,整个过程无需密码。

要做啥?

你自己的电脑上生成密钥对:

ssh-keygen -t rsa

一路回车即可。然后把公钥上传到服务器:

# 将 id_rsa.pub 的内容拷贝到服务器的 ~/.ssh/authorized_keys 文件里
ssh-copy-id admin@你的服务器IP -p 22334  # 注意端口号

最后,在服务器的 SSH 配置文件中,禁用密码登录,只允许密钥登录:

PasswordAuthentication no

改完 SSH 配置后,一定要重启服务!

sudo systemctl restart sshd

友情提示:在重启 SSH 服务后,先不要关闭当前的连接窗口。打开一个新的终端窗口,尝试用新的配置登录,确保一切正常。确认无误后,再关闭旧的连接。这是血与泪的教训!

第三道防线:主动防御与监控

前面的步骤是加固城墙,现在我们来安装一些“监控探头”和“自动炮台”。

1. 安装 Fail2Ban:自动拉黑野蛮人

总有些执着的攻击者会对着你的 SSH 端口(即使改了端口)不断尝试密码。Fail2Ban 就是一个神器,它可以监控系统日志,一旦发现某个 IP 在短时间内多次登录失败,就会自动调用防火墙把这个 IP “拉黑”一段时间。

要做啥?

安装并配置 Fail2Ban。

sudo yum install epel-release -y
sudo yum install fail2ban -y

# 启动并设置开机自启
sudo systemctl start fail2ban
sudo systemctl enable fail2ban

Fail2Ban 的默认配置已经能很好地保护 SSH 了。如果你想自定义,比如修改“拉黑”时长,可以创建一个本地配置文件:

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo vi /etc/fail2ban/jail.local

[sshd] 部分,你可以修改 bantime(拉黑时长)、findtime(检测时间窗口)和 maxretry(最大尝试次数)。

2. 强化密码策略

对于系统内需要使用密码的用户,强制他们使用复杂的密码是个好习惯。

要做啥?

编辑登录配置文件:

sudo vi /etc/security/pwquality.conf

可以设置密码最小长度 minlen 和需要的字符类别 minclass(比如要求大小写字母、数字、特殊符号至少包含3种)。

minlen = 10
minclass = 3

3. 限制 su 命令的使用

不是所有用户都需要 su 到 root 的权限。我们可以限制只有特定组的用户才能这么做。

要做啥?

编辑 su 的 PAM 配置文件:

sudo vi /etc/pam.d/su

找到 auth sufficient pam_rootok.so 这一行,在它下面加上:

auth required pam_wheel.so use_uid

这行配置的意思是,只有 wheel 组的用户才能使用 su 命令切换到 root。所以,你只需要把信任的用户加入 wheel 组就行了。

总结:安全是一场持久战

恭喜你!完成了以上这些步骤,你的 CentOS 服务器已经比互联网上 90% 的服务器要安全了。

但请记住,安全不是一劳永逸的。 它是一个持续的过程,你需要:

  • 定期更新系统
  • 定期审查日志,看看有没有异常活动。
  • 关注安全新闻,了解最新的漏洞和攻击手法。

希望这篇指南能帮你打好服务器安全的基础。现在,去尽情施展你的才华吧!


  目录