别让默认设置成为漏洞入口
很多人在搭建网站或部署内部系统时,习惯性地使用软件的默认配置。比如安装完 Apache 或 Nginx,没改端口、没关列目录、连默认欢迎页都留着。这就像买了把新锁,钥匙却插在门外——攻击者扫到这类服务,基本不用费力就能找到突破口。
一个常见的例子是数据库服务暴露在公网。有人装完 Redis,没设密码,也没绑定本地地址,直接监听 0.0.0.0:6379。结果没几天,数据就被清空,留下一行“Pay Bitcoin to XXX”。这种事每年都在大量发生,根源就是配置太“裸”。
最小权限原则要落到实处
给服务账户赋予过高权限,是另一个高频问题。比如用 root 跑 Web 服务,一旦被攻破,整个服务器就归别人了。正确的做法是创建专用用户,比如 www-data,并限制其只能访问必要的目录。
以 Nginx 为例,配置文件里加上这一行:
user www-data;再配合文件权限设置:
chown -R www-data:www-data /var/www/html
find /var/www/html -type d -exec chmod 750 {} \;
find /var/www/html -type f -exec chmod 640 {} \;这样即使 Webshell 被上传,也很难读取其他用户的文件。
关闭不必要的功能和服务
很多服务自带一些辅助功能,比如 PHP 的 expose_php = On,会让服务器在响应头里暴露 PHP 版本。攻击者一看版本老旧,马上就能匹配已知漏洞。
在 php.ini 中关闭它:
expose_php = Off同样,Apache 的 ServerTokens 和 ServerSignature 也别留着:
ServerTokens Prod
ServerSignature Off这样返回的 HTTP 头里只会显示“Apache”,不会带版本号,增加信息搜集难度。
加密通信不是选修课
现在连登录后台都该走 HTTPS,更别说涉及用户数据的服务。Let's Encrypt 提供免费证书,配合 Certbot 几分钟就能配好。Nginx 配置示例:
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512;
}顺便把 HTTP 自动跳转 HTTPS,避免明文传输。
日志和监控不能流于形式
开了日志但不看,等于没开。定期检查 access.log 和 error.log,能发现异常请求模式。比如突然出现大量 /wp-admin 页面的 404 请求,可能是有人在暴力猜管理员路径。
可以加一条简单的监控脚本:
tail -f /var/log/nginx/access.log | grep -E '(wp-login|xmlrpc|phpmyadmin)'一旦发现可疑行为,结合防火墙临时封 IP,能有效延缓攻击节奏。
自动化工具帮你查漏补缺
手动检查容易遗漏,可以用 OpenSCAP、Lynis 这类工具做一次全面扫描。比如 Lynis 执行:
lynis audit system它会提示“建议禁用 ICMP 重定向”、“SSH 应禁用 root 登录”等具体改进项。每一条都不难改,积少成多,安全水位就上去了。