linux网络防御自动化巡检需聚焦异常连接、可疑进程、后门服务及配置偏差,脚本应轻量可维护,分初始化、检测、聚合三模块,通过白名单、函数化检测、日志轮转与定时执行实现低干扰运维。

Linux系统网络防御的自动化巡检,核心在于及时发现异常连接、可疑进程、未授权服务和配置风险。脚本不追求大而全,而要轻量、可读、可维护,且能融入日常运维节奏。
关键巡检项与对应检测逻辑
巡检不是盲目扫描,应聚焦高风险面:
-
异常网络连接:用
ss -tuln或netstat -tuln筛选监听端口,排除已知合规服务(如22/80/443),重点关注非常用高危端口(如6666、6667、5555)或非root用户启动的监听进程 -
隐藏或可疑进程:结合
ps aux --forest和lsof -i比对,检查无对应二进制文件的进程(ls -l /proc/PID/exe返回“no such file”)、CPU/内存占用突增但无业务关联的进程 -
后门类服务残留:检查
/etc/init.d/、/etc/systemd/system/、/usr/lib/systemd/system/中非标准单元文件;用systemctl list-unit-files --state=enabled审查启用但非系统默认的服务 -
基础安全配置偏差:验证 SSH 是否禁用 root 登录(
grep "^PermitRootLogin" /etc/ssh/sshd_config)、是否关闭密码认证(grep "^PasswordAuthentication" /etc/ssh/sshd_config)、防火墙是否启用(systemctl is-active firewalld || ufw status | grep -q "active")
Shell脚本结构设计建议
一个实用的巡检脚本应包含初始化、检测模块、结果聚合与输出三部分:
- 开头定义白名单变量(如
ALLOWED_PORTS="22 80 443 8080"、TRUSTED_USERS="root www-data"),便于集中维护 - 每个检测项封装为函数(如
check_suspicious_listeners),返回 0(正常)或 1(告警),便于后续条件判断 - 结果统一写入临时日志,并标记时间戳;发现异常时,追加关键上下文(如进程PID、启动命令、监听IP)
- 末尾汇总:统计异常项数,仅当存在风险才输出详情,避免信息过载
部署与执行策略
脚本价值取决于能否稳定、低干扰地运行:
- 保存为
/usr/local/bin/netdefend-check.sh,赋予执行权限:chmod +x /usr/local/bin/netdefend-check.sh - 通过
crontab -e添加定时任务,例如每6小时执行一次:0 */6 * * * /usr/local/bin/netdefend-check.sh >> /var/log/netdefend-check.log 2>&1 - 日志按天轮转,避免单文件膨胀:可用
logrotate配置,或脚本内加入mv /var/log/netdefend-check.log /var/log/netdefend-check.log.$(date +\%Y\%m\%d)简单归档 - 关键告警可触发轻量通知:如写入
/var/log/security-alert并用inotifywait监控该文件变化,联动短信或企业微信机器人(需提前配置API)
注意事项与避坑点
自动化不等于无人值守,需预设边界和容错:
- 避免在生产环境直接调用
kill或systemctl stop—— 巡检脚本只负责发现和记录,处置交由人工确认 - 注意不同发行版命令差异:CentOS 7 默认无
ss,Ubuntu 可能未预装lsof,脚本开头应做依赖检查并提示缺失项 - 权限最小化:用普通用户运行(配合
sudo白名单授权必要命令),而非 root 全权限执行,降低误操作风险 - 首次部署前,在测试机完整跑通并人工验证每条告警是否合理,避免规则过严导致大量误报,消磨运维信任
脚本不是银弹,但把重复性判断交给机器,能让安全响应从“事后补救”转向“事中感知”。持续迭代检测逻辑,比追求一次性完美更重要。










