AWS国际站 AWS亚马逊云服务器防御木马教程
别等木马敲门才装锁:AWS云服务器防木马不是选修课,是必修急救课
你有没有过这种经历?某天凌晨三点,收到CloudWatch告警:CPU飙到99%,出站流量突增10倍;登录EC2一看,top里飘着个叫svchostd的进程,查文档没这玩意儿,ps aux一搜,它正偷偷往境外IP发数据包……恭喜,你的AWS服务器刚被木马“认领”了。
很多人误以为:「我在AWS上跑,自带防火墙+IAM+加密,应该很安全」——错!AWS只管基础设施层(IaaS),而木马专挑你亲手部署的应用层、配置层、运维习惯层下手。它不黑AWS,它黑的是你没改默认密码的Redis、暴露在公网的Jenkins、以及那个写着chmod 777 /tmp的启动脚本。
下面这套防御组合拳,我们不用高大上的EDR产品,全靠AWS原生工具+Linux原生命令+一点点强迫症式习惯,成本为零,效果拉满。
第一道防线:让木马连门都摸不到
安全组不是摆设,是智能门禁系统
别再把SSH端口(22)对0.0.0.0/0开放了!这不是“方便”,这是在门口贴张纸:「小偷请走正门」。正确姿势:
- SSH只允许可信IP段(比如公司办公网、跳板机IP),用
aws ec2 authorize-security-group-ingress动态更新; - Web服务(80/443)放开,但数据库(3306/5432)、Redis(6379)、Elasticsearch(9200)一律禁止公网访问;
- 新增一条「拒绝所有入站」规则(优先级最低),堵住漏网之鱼。
AWS国际站 顺手检查:在EC2控制台→安全组→入站规则,右上角点「查找冲突规则」——AWS会自动标红重复或冗余规则,删掉那些写着「允许全部TCP」却从未用过的僵尸规则。
密钥管理:别让.pem文件躺在桌面当传家宝
你的my-server-key.pem如果满足以下任意一条,请立刻停下手头工作去处理:
• 存在微信/QQ传输记录
• 权限是-rw-r--r--(非-rw-------)
• 曾用chmod 644「修复权限失败」
正确操作:
chmod 400 ~/Downloads/my-server-key.pem
然后把它移出下载目录,放进~/.ssh/aws-keys/,并用ssh-agent加载:eval $(ssh-agent); ssh-add ~/.ssh/aws-keys/my-server-key.pem。
从此告别ssh -i xxx.pem,输入一次密码,当天所有连接自动复用密钥。
第二道防线:砍掉木马的「生存权」
用户权限:root不是主角,是反派
新购EC2默认以ec2-user(Amazon Linux)或ubuntu(Ubuntu)登录,但很多人干的第一件事就是sudo su -切root,然后一路狂敲命令。木马一旦得手,直接获得上帝权限。
实战建议:
• 禁用root远程登录:sudo passwd -l root;
• 所有日常操作用普通用户,仅需提权时用sudo(且visudo中限制其只能执行必要命令,如/bin/systemctl restart nginx,而非/bin/bash);
• 关键目录设为不可写:sudo chown root:root /etc/cron*,防止木马注入定时任务。
进程与服务:定期给系统做「CT扫描」
木马最爱伪装成合法进程。每月执行一次「三查」:
- 查异常父进程:
ps auxf | grep -v 'sshd\|systemd\|bash' | head -20——重点看PPID(父进程ID)是不是1(systemd)或sshd,若发现PPID=1234(某个已退出的shell),高度可疑; - 查隐藏线程:
ls /proc/[0-9]*/comm 2>/dev/null | xargs -I{} sh -c 'echo {}; cat {} 2>/dev/null',比ps更底层,能揪出ptrace隐藏的进程; - 查网络后门:
sudo ss -tulpn | grep ':[1-65535]' | grep -v '127.0.0.1\|::1',凡是有LISTEN状态且绑定非127.0.0.1的端口,必须人工确认用途。
第三道防线:让木马无处藏身
文件扫描:用clamav给磁盘做「病毒快筛」
别嫌麻烦,5分钟装好ClamAV,胜过三天排查:
sudo yum install -y clamav-update clamav # Amazon Linux
sudo freshclam # 更新病毒库
sudo clamscan -r --bell -i /home/ec2-user /var/www # 只扫用户目录和网站根目录
加个定时任务每天凌晨扫一次:0 3 * * * /usr/bin/clamscan -r --remove=yes /home/ec2-user 2>/dev/null。
注意:别扫/全盘!既慢又易误删系统文件。聚焦/tmp、/var/tmp、/home/*、/var/www这四个重灾区。
日志审计:不是记流水账,是建「行为指纹库」
启用auditd监控关键动作:
sudo auditctl -w /etc/passwd -p wa -k identity_change
sudo auditctl -w /etc/shadow -p wa -k shadow_change
sudo auditctl -w /usr/bin/ -p x -k binary_exec
然后用ausearch -k binary_exec | ausearch -m execve | head -10,就能看到最近10次谁执行了什么二进制文件。某天发现/tmp/.x被运行了?立刻溯源!
日志存哪?别只留本地!配置/etc/rsyslog.conf把auth,authpriv.* @your-central-syslog-server:514,或者直接推送到CloudWatch Logs——毕竟木马删你本地日志,可删不了云端副本。
终极保险:自动化响应,让防御自己动起来
用Lambda+EventBridge,实现「发现即隔离」
当CloudWatch检测到异常出站流量(比如单小时>5GB),自动触发Lambda函数:
- 调用EC2 API停止该实例;
- 发送SNS通知到运维钉钉群;
- 生成取证快照(snapshot)并打标签
quarantine:true。
代码无需复杂,核心就三行Python:ec2.stop_instances(InstanceIds=[event['detail']['instance-id']])sns.publish(TopicArn='xxx', Message='木马嫌疑实例已隔离')ec2.create_snapshot(VolumeId=vol_id, TagSpecifications=[...])
这招不求100%拦截,但能把损失控制在10分钟内——而多数木马,前15分钟才是黄金窃取期。
最后送你一张「木马防御自查清单」
- □ 安全组是否禁用22端口公网访问?
- □
.pem文件权限是否为400且不在共享目录? - □ 是否禁用root远程登录?
sudo权限是否最小化? - □ 是否每周手动执行
ps auxf+ss -tulpn双查? - □ ClamAV是否已安装并配置每日扫描?
- □ 关键目录(
/etc/cron*,/etc/init.d)是否属主为root且不可写? - □ CloudWatch是否设置了CPU/网络/磁盘IO异常阈值告警?
划重点:安全不是一次性工程,而是每天早上喝咖啡时顺手敲的三行命令。今天少查一次ps,明天就多一份勒索信PDF。现在,打开你的终端,先执行ps aux | grep -E '(sh|bash|python)' | grep -v grep——看看有没有你没见过的shell正在后台呼吸。

