嘿,哥们儿!刚拿到一台崭新的 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% 的服务器要安全了。
但请记住,安全不是一劳永逸的。 它是一个持续的过程,你需要:
- 定期更新系统。
- 定期审查日志,看看有没有异常活动。
- 关注安全新闻,了解最新的漏洞和攻击手法。
希望这篇指南能帮你打好服务器安全的基础。现在,去尽情施展你的才华吧!