说实话,刚接触云服务器的时候,我也像个无头苍蝇一样乱撞。那时候不懂什么安全组、什么端口映射,就把服务器密码设成了 123456,还开着 22 端口直接面向全网。结果第三天,就被黑客入侵了,服务器变成挖矿机,扣了我几百块冤枉钱。从那以后,我开始死磕 Linux 安全配置,踩过的坑能写成一本书。今天我就把这些血泪教训掰开了揉碎了讲给你听,顺便聊聊为什么在 Ubuntu 上折腾开源软件是个明智之选。
一、先说最痛的:安全配置的那些坑
1. 默认 root 登录是自杀行为
很多新手教程上来就让你 ssh root@你的IP,觉得这样最简单。大错特错!root 是超级用户,一旦密码泄露,对方拥有你服务器的最高权限,删库跑路只需一行命令。
正确做法:禁用 root 远程登录,创建一个普通用户,然后通过 sudo 提权。
# 创建新用户,比如叫 deploy
sudo adduser deploy
# 把用户加入 sudo 组,获得管理员权限
sudo usermod -aG sudo deploy
# 切换到新用户使用 sudo
su - deploy
# 编辑 SSH 配置文件
sudo nano /etc/ssh/sshd_config
找到这一行:
PermitRootLogin prohibit-password
改成:
PermitRootLogin no
然后重启 SSH 服务:
sudo systemctl restart sshd
这样,即使黑客拿到 root 密码,也远程进不来。
2. 改默认 SSH 端口不是万能药,但很有用
默认 22 端口就像你家门牌号写在大门口,黑客扫描工具第一时间就会检测到。改成其他端口,比如 2222,能挡掉 90% 的自动化扫描攻击。
# 编辑 SSH 配置
sudo nano /etc/ssh/sshd_config
# 找到 Port 22,改成你喜欢的端口,比如 2222
Port 2222
注意:改完后,你连接服务器的方式也要变:
ssh -p 2222 deploy@你的IP
还有,你必须在云服务商的控制台(比如阿里云、腾讯云、AWS)的安全组里,开放这个新端口,否则你自己也连不上了。
3. 密钥登录比密码靠谱一万倍
密码再复杂,也有被暴力破解的风险。密钥登录用的是非对称加密,私钥在你本地,公钥在服务器上,除非对方同时拿到你的私钥,否则几乎不可能破解。
生成密钥对(在你本地电脑执行):
ssh-keygen -t ed25519 -C "your_email@example.com"
一路回车,或者设置个密码保护私钥。然后复制公钥到服务器:
ssh-copy-id -p 2222 deploy@你的IP
禁用密码登录(在服务器上执行):
sudo nano /etc/ssh/sshd_config
# 找到并修改以下选项
PasswordAuthentication no
PubkeyAuthentication yes
重启 SSH:
sudo systemctl restart sshd
现在,只有持有私钥的人才能登录,密码登录完全失效。
4. 防火墙:UFW 是 Linux 上的好帮手
Ubuntu 自带 UFW(Uncomplicated Firewall),简单易用。默认情况下,你应该只开放必要的端口。
# 安装并启用 UFW
sudo ufw enable
# 允许 SSH 新端口(比如 2222)
sudo ufw allow 2222
# 允许 Web 服务
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
# 默认拒绝所有入站连接
sudo ufw default deny incoming
# 允许所有出站连接
sudo ufw default allow outgoing
查看当前规则:
sudo ufw status verbose
这样,你的服务器就像只有几扇门的大楼,其余全是墙。
二、性能调优:别让服务器跑成蜗牛
1. 定期更新系统,但别手贱
sudo apt update && sudo apt upgrade -y
定期更新能修补安全漏洞。但别在生产环境直接跑 apt upgrade,先测试!有些新内核或关键包可能导致服务异常。建议先:
sudo apt list --upgradable
看看要升级什么,再决定。
2. 关闭不需要的服务
Ubuntu 默认装了一堆服务,很多你根本用不上。比如 bluetooth、cups(打印服务)、avahi-daemon 等。关掉它们能节省内存和 CPU。
# 查看正在运行的服务
systemctl list-units --type=service --state=running
# 禁用蓝牙服务
sudo systemctl disable bluetooth
sudo systemctl stop bluetooth
3. 优化 Swap 分区
内存不够时,Swap 是救命稻草。但默认配置可能不是最优。
查看 Swap 状态:
free -h
swapon --show
调整 Swappiness(系统使用 Swap 的倾向):
# 临时调整
sudo sysctl vm.swappiness=10
# 永久生效,编辑配置文件
sudo nano /etc/sysctl.conf
添加或修改:
vm.swappiness=10
vm.swappiness=10 表示只有当内存非常紧张时才使用 Swap,平时优先用物理内存,性能更好。
4. 监控服务器状态
装个 htop 和 netstat 工具,随时查看资源占用。
sudo apt install htop net-tools -y
htop
netstat -tuln
还有 fail2ban,能自动封禁多次登录失败的 IP,防暴力破解效果极佳。
sudo apt install fail2ban -y
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
三、为什么 Ubuntu 是开源平台的最佳拍档?
1. 社区生态强大,遇到问题随手可得答案
Ubuntu 拥有全球最大的 Linux 社区之一。你遇到任何报错,直接复制粘贴到 Google,大概率能找到几页的解决方案。相比之下,一些小众发行版可能让你搜到自闭。
比如你想搭一个 Nextcloud 私有云盘,Ubuntu 上有详尽的官方文档和第三方教程。装 Docker、配 Nginx、搞 SSL 证书,一条龙服务。
2. 软件包管理干净利落
apt 包管理器是 Ubuntu 的一大亮点。安装软件不用去官网下载 .deb 包,然后手动处理依赖关系。一条命令搞定:
sudo apt install nginx
sudo apt install postgresql
sudo apt install docker-ce
依赖自动解决,版本自动管理。卸载也方便:
sudo apt remove nginx
sudo apt autoremove
3. 长期支持版(LTS)稳定可靠
Ubuntu 每年发布两个版本,其中偶数年是 LTS 版本,提供 5 年安全更新。比如 Ubuntu 22.04 LTS,支持到 2027 年。对于服务器来说,稳定性比新功能重要得多。你不需要频繁升级系统,安心跑你的服务就好。
4. 容器化首选
Docker 和 Kubernetes 在 Ubuntu 上支持最好。很多开源项目的官方镜像都优先测试 Ubuntu 环境。你想跑一个 WordPress 博客?
docker run -d --name wordpress -p 8080:80 -e WORDPRESS_DB_HOST=mysql -e WORDPRESS_DB_PASSWORD=yourpass wordpress:latest
一行命令,博客就跑起来了。想换数据库?换个镜像就行,隔离干净,不污染系统。
四、常见误区:这些坑我帮你填了
误区 1:“买最贵的服务器,性能一定好”
不一定!配置是否合理,比硬件参数更重要。比如你跑一个个人博客,8 核 16G 内存完全浪费。一台 2 核 2G 的服务器,配合 Nginx 缓存和合理的代码优化,照样跑得飞快。
建议:先用低配测试,观察负载。监控工具 htop 和 atop 能告诉你真实情况。如果 CPU 长期低于 20%,内存余量很大,说明配置过剩;反之则需升级。
误区 2:“防火墙关了,访问更快”
错!防火墙不是性能瓶颈,它是安全底线。关掉防火墙,你的服务器就暴露在 Internet 上,任何扫描工具都能探测到开放端口。2023 年,全球每天有数亿次针对服务器的暴力破解尝试。关防火墙等于裸奔。
正确做法:配置严格的防火墙规则,只开放必要端口。速度影响微乎其微。
误区 3:“开源软件免费,所以不用担心版权”
免费不等于无限制。开源协议(如 GPL、MIT、Apache)有不同的要求。比如你用 GPL 软件,必须公开你的修改代码;MIT 协议则宽松很多。商用时要仔细阅读许可证,避免法律风险。
误区 4:“备份不重要,云服务商有冗余”
大错特错!云服务商的冗余是防硬件故障,不是防误操作、勒索病毒或数据泄露。2022 年,某大公司运维人员误删了生产数据库,云服务商也无法恢复,因为备份是他们自己的事。
必须做备份:
# 定期备份数据库
mysqldump -u root -p yourdb > backup_$(date +%Y%m%d).sql
# 备份到远程服务器或对象存储
scp backup_*.sql user@remote-server:/backups/
# 或者用 rclone 上传到 AWS S3、阿里云 OSS 等
五、实例:搭建一个安全的 LAMP 栈
假设你要在 Ubuntu 22.04 上搭一个 PHP 网站(Linux + Apache + MySQL + PHP)。
第一步:更新系统并创建用户
sudo apt update && sudo apt upgrade -y
sudo adduser webdev
sudo usermod -aG sudo webdev
第二步:配置 SSH 密钥登录并禁用密码
(参考前面第三节内容)
第三步:安装 Apache
sudo apt install apache2 -y
sudo systemctl enable apache2
sudo systemctl start apache2
第四步:安装 MySQL
sudo apt install mysql-server -y
sudo systemctl enable mysql
sudo systemctl start mysql
运行安全脚本,设置 root 密码,移除测试数据库:
sudo mysql_secure_installation
第五步:安装 PHP
sudo apt install php libapache2-mod-php php-mysql -y
第六步:配置防火墙
sudo ufw allow 2222/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw status
第七步:测试 PHP
sudo nano /var/www/html/info.php
写入:
<?php phpinfo(); ?>
访问 http://你的IP/info.php,看到 PHP 信息页面就成功了。
第八步:设置定期备份
用 cron 定时任务,每天凌晨备份数据库:
crontab -e
添加:
0 3 * * * mysqldump -u root -p你的密码 yourdb > /backups/db_$(date +\%Y\%m\%d).sql
六、最后唠叨几句
云服务器就像租了一套房子,你不只是租客,还是保安、电工、水管工。Ubuntu 给了你一把好用的瑞士军刀,但怎么用它,全看你的经验和细心程度。
别怕犯错,但每次犯错后都要记录、复盘。把配置写成脚本,方便以后复用。比如我把 SSH 加固、防火墙设置、基础软件安装都写成了一个 shell 脚本,新服务器部署时间从半天缩短到十分钟。
记住:安全是底线,备份是后路,监控是眼睛。做到这三点,你的服务器就能稳稳当当跑很多年。
希望这篇避坑指南能帮你少走弯路。如果有具体问题,欢迎在评论区交流,我们一起折腾。