别让默认设置害了你
刚买来的服务器,系统装好第一件事做什么?很多人直接开跑业务,连SSH端口都没改。这就跟买了新房子,钥匙还是开发商给的原装钥匙一样,谁都能试着来开一开。
Linux 服务器默认 SSH 端口是 22,攻击者扫描 IP 段的时候,专门盯着这个端口猛攻。改个非常用端口,能筛掉一大半自动化脚本攻击。编辑配置文件:
sudo nano /etc/ssh/sshd_config
找到 Port 22 这一行,改成比如 Port 28437,保存后重启 SSH 服务:
sudo systemctl restart sshd
改完之后记得防火墙放行新端口,不然自己也连不上,那就尴尬了。
密码越复杂,越容易出事
很多人觉得密码设得长就安全,于是整出一串“P@ssw0rd2024!Server!”这种看似复杂实则套路明显的密码。更离谱的是,好几个服务器都用同一个密码。一旦一个被撞库,全盘皆输。
真正靠谱的做法是关掉密码登录,改用 SSH 密钥认证。本地生成一对密钥,公钥扔到服务器上,私钥自己保管好。这样就算别人知道用户名,没有私钥也登不进来。
生成密钥命令:
ssh-keygen -t rsa -b 4096 -C "admin@myserver"
把生成的公钥(一般是 id_rsa.pub)内容追加到服务器的 ~/.ssh/authorized_keys 里。然后在 /etc/ssh/sshd_config 中设置:
PasswordAuthentication no
PubkeyAuthentication yes
再重启 sshd,密码登录这条路就被彻底堵死了。
少装软件,少留后门
有些运维为了省事,装系统时勾选“一键安装所有工具包”,结果一堆用不上的服务在后台跑着:FTP、Telnet、MySQL、Apache 全开着。哪个服务有漏洞,黑客就能从哪个钻进来。
正确的做法是按需安装。比如只做静态网站,就只装 Nginx;跑 Python 应用,就只装 Python 和 Gunicorn。其他没用的服务一律关闭:
sudo systemctl disable --now telnet
sudo systemctl disable --now ftpd
定期检查当前开放的端口:
sudo netstat -tulnp
看到不认识的服务占着端口,就得查清楚是干什么的,该删就删。
权限不是越大越好
很多脚本一上来就要求用 root 执行,你不假思索就给了。结果脚本里藏了个 wget 下载恶意程序,直接就在最高权限下运行了。
日常操作应该用普通用户,只有必要时才通过 sudo 提权。创建一个管理员用户:
sudo adduser deployer
sudo usermod -aG sudo deployer
以后登录都用 deployer,需要 root 权限时加 sudo。这样即使账号泄露,攻击者也不能立刻为所欲为。
自动更新比手动补漏强十倍
系统内核、OpenSSL、Nginx 这些组件爆出漏洞,往往几天内就会被大规模利用。等你发现新闻再去打补丁,黄花菜都凉了。
Ubuntu 系统可以装 unattended-upgrades 自动更新安全补丁:
sudo apt install unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades
开启后,系统会在后台自动下载并安装重要安全更新,不用你操心。当然,生产环境要注意避免自动升级导致服务中断,可以设置只更新安全包,不升级整个系统。
日志不是摆设
服务器被黑了才发现问题?太晚了。每天扫一眼关键日志,能提前发现不少异常。
比如查看 SSH 登录记录:
sudo grep "Failed password" /var/log/auth.log | tail -20
如果看到大量来自不同 IP 的失败尝试,说明有人在暴力破解。这时候就可以配合 fail2ban 工具,自动封禁频繁尝试的 IP。
安装并启用 fail2ban:
sudo apt install fail2ban
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
它会监控日志,发现异常登录行为就自动更新防火墙规则,把攻击者拒之门外。