尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

Linux服务器安全加固实战:超越改端口的纵深防御与入侵排查

Linux服务器安全加固实战:超越改端口的纵深防御与入侵排查 1. 项目概述为什么“改端口”只是安全的第一步如果你管理过Linux服务器尤其是暴露在公网上的那种那么“修改SSH默认端口22”这个操作大概率是你安全清单上的第一条。这没错把门牌号从众所周知的22换成一个不常用的端口确实能过滤掉99%的自动化扫描脚本。但如果你认为这就高枕无忧了那可能就危险了。我见过太多案例管理员自信地改了端口结果服务器CPU还是莫名其妙飙到100%一查被植入了挖矿木马。问题出在哪攻击者的手段早已升级。他们不再仅仅依赖对22端口的暴力破解。一旦你的服务器有任何其他服务比如一个有漏洞的Web应用被攻破攻击者就能以此为跳板在内部横向移动。此时无论你的SSH端口是2222还是55555在已经取得系统权限的攻击者面前都形同虚设。他们的目标很明确利用你的计算资源悄无声息地“挖矿”赚取加密货币。所以今天要聊的是一套超越“改端口”的、面向实战的Linux服务器安全加固组合拳。这套方案的核心思想是“纵深防御”从网络边界、访问控制、系统监控到入侵排查层层设防。我会手把手带你配置并附上那些在真实应急响应中救过我无数次的排查命令。目标很简单让你的服务器从“看起来安全”变得“真正难啃”。2. 安全加固的核心思路与架构设计面对挖矿、勒索软件等恶意软件我们的防御不能是单点的而应该是一个立体的体系。这套体系我习惯称之为“四层防御网”。2.1 第一层网络访问控制缩小攻击面这是最外层防线目标是尽可能减少服务器暴露在外的“入口”。只改SSH端口属于这一层但远远不够。我们需要防火墙精细化策略严格遵循“最小权限原则”。除了业务必需的端口如HTTP/80, HTTPS/443, 自定义SSH端口其他所有入站端口一律关闭。出站连接也应适当限制防止木马向外通信。SSH访问源IP限制如果可能将SSH访问权限限定在固定的、可信的IP地址段如公司办公网IP。这能从根本上阻断绝大部分远程爆破尝试。禁用密码登录强制密钥对认证这是提升SSH安全性的最关键一步。密码再复杂也有被暴力破解或撞库的风险而基于非对称加密的密钥对几乎无法破解。2.2 第二层系统与服务加固提升自身免疫力即使攻击者找到了入口我们也要让系统本身难以被利用。及时更新系统与软件老生常谈但至关重要。很多挖矿木马都是通过已知但未修复的漏洞如Web框架、数据库漏洞传入的。启用自动安全更新是一个好习惯。最小化安装与运行服务卸载任何不需要的软件包停止并禁用任何非必需的系统服务如rpcbind,telnet。每多一个服务就多一个潜在的攻击点。配置安全增强模块如SELinux或AppArmor。虽然配置稍复杂但它们能有效限制进程的权限即使某个服务被攻破攻击者也很难进行提权或访问敏感文件。2.3 第三层入侵检测与监控布下警报网假设前两层被突破我们需要有能力快速发现异常。系统资源监控持续监控CPU、内存、网络流量的异常波动。挖矿程序最显著的特征就是CPU持续高占用。文件完整性检查监控系统关键文件如/bin,/sbin,/usr/bin,/etc/passwd,/etc/shadow等是否被篡改。很多木马会替换系统命令来隐藏自己。日志集中分析与告警系统日志/var/log/auth.log,secure,syslog和审计日志auditd是宝贵的线索来源。需要定期审查并对失败登录、sudo提权等关键事件设置告警。2.4 第四层应急响应与排查最后的防线当监控告警响起你需要有一套熟练的“外科手术”流程快速定位并清除威胁。这就是本文后半部分重点要讲的“实战排查命令”。注意安全是一个持续的过程没有一劳永逸的“银弹”。这套分层防御的思路旨在增加攻击者的成本和被发现的风险。下面我们就从第一层开始进行具体配置。3. 实战加固配置一步步构建你的防御体系理论说再多不如动手操作一遍。我们假设你有一台新安装的Ubuntu 22.04或CentOS 8/Rocky Linux 8服务器将以它为例进行配置。请根据你的发行版调整部分命令如包管理器。3.1 网络层加固配置防火墙与SSH第一步配置防火墙以UFW/firewalld为例UFWUncomplicated Firewall是Ubuntu上简化的iptables前端firewalld则是CentOS/RHEL系列的标配。Ubuntu (使用UFW):# 1. 启用UFW sudo ufw enable # 2. 默认拒绝所有入站允许所有出站这是一个安全的起点 sudo ufw default deny incoming sudo ufw default allow outgoing # 3. 放行业务端口例如SSH(自定义为2222)、HTTP、HTTPS sudo ufw allow 2222/tcp comment SSH Custom Port sudo ufw allow 80/tcp comment HTTP sudo ufw allow 443/tcp comment HTTPS # 4. 查看规则 sudo ufw status numbered verboseCentOS/Rocky Linux (使用firewalld):# 1. 启动并启用firewalld sudo systemctl start firewalld sudo systemctl enable firewalld # 2. 将默认区域设为public默认拒绝入站 sudo firewall-cmd --set-default-zonepublic # 3. 放行业务端口 sudo firewall-cmd --zonepublic --add-port2222/tcp --permanent sudo firewall-cmd --zonepublic --add-servicehttp --permanent sudo firewall-cmd --zonepublic --add-servicehttps --permanent # 4. 重载配置 sudo firewall-cmd --reload # 5. 查看活动区域和规则 sudo firewall-cmd --list-all第二步强化SSH服务配置编辑SSH服务端配置文件/etc/ssh/sshd_config以下是一些关键参数sudo vim /etc/ssh/sshd_config找到并修改如下行如果行首有#注释请删除# 1. 修改监听端口避开常用端口扫描范围 Port 2222 # 2. 禁止root用户直接登录先用普通用户登录再su或sudo PermitRootLogin no # 3. 强制使用密钥认证禁用密码认证确保你已部署公钥后再启用 PasswordAuthentication no PubkeyAuthentication yes # 4. 限制认证尝试次数和用户可选但推荐 MaxAuthTries 3 AllowUsers your_username # 只允许特定用户登录多个用户用空格隔开 # 5. 使用更现代的密钥交换、加密和MAC算法 KexAlgorithms curve25519-sha256libssh.org,diffie-hellman-group-exchange-sha256 Ciphers chacha20-poly1305openssh.com,aes256-gcmopenssh.com,aes128-gcmopenssh.com,aes256-ctr,aes192-ctr,aes128-ctr MACs hmac-sha2-512-etmopenssh.com,hmac-sha2-256-etmopenssh.com,umac-128-etmopenssh.com重要提示在将PasswordAuthentication设置为no之前必须先将你的SSH公钥添加到服务器的~/.ssh/authorized_keys文件中并测试用密钥可以成功登录。否则你会把自己锁在服务器外面修改完成后重启SSH服务sudo systemctl restart sshd # Ubuntu # 或 sudo systemctl restart sshd # CentOS/Rocky Linux务必保持当前连接窗口不要关闭新开一个终端用密钥连接测试确认成功后再关闭原会话。3.2 系统层加固更新、精简与审计第一步系统与软件更新# Ubuntu/Debian sudo apt update sudo apt upgrade -y # 启用自动安全更新可选但推荐 sudo apt install unattended-upgrades sudo dpkg-reconfigure --prioritylow unattended-upgrades # CentOS/Rocky Linux/RHEL sudo dnf update -y # 启用自动更新通过dnf-automatic sudo dnf install dnf-automatic -y sudo systemctl enable --now dnf-automatic-install.timer第二步移除不必要的网络服务# 查看监听端口的服务 sudo ss -tulnp # 或使用老牌命令 sudo netstat -tulnp # 对于不需要的服务停止并禁用。例如如果不需要NFS相关服务 # Ubuntu sudo systemctl stop rpcbind sudo systemctl disable rpcbind # CentOS sudo systemctl stop rpcbind.service rpcbind.socket sudo systemctl disable rpcbind.service rpcbind.socket第三步安装并配置入侵检测工具AIDEAIDEAdvanced Intrusion Detection Environment是一个文件完整性检查工具它会为系统文件创建一个数据库之后可以定期检查文件是否被篡改。# 安装 sudo apt install aide -y # Ubuntu sudo dnf install aide -y # CentOS # 初始化数据库这可能需要一些时间因为它要扫描大量文件 sudo aideinit # 将新生成的数据库移动到标准位置 sudo mv /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz # 进行第一次检查 sudo aide.wrapper --check你可以设置一个Cron任务每天或每周运行一次aide --check并将报告通过邮件发送给你。3.3 配置监控与告警对于单台服务器我们可以用一些轻量级脚本结合Cron来实现基础监控。创建一个简单的资源监控脚本/usr/local/bin/monitor_server.sh#!/bin/bash # 监控CPU、内存、磁盘和网络异常 LOG_FILE/var/log/server_monitor.log THRESHOLD_CPU80 # CPU使用率告警阈值% THRESHOLD_MEM90 # 内存使用率告警阈值% THRESHOLD_DISK85 # 磁盘使用率告警阈值% # 获取当前时间 DATE$(date %Y-%m-%d %H:%M:%S) # 检查CPU使用率取1分钟负载对应的使用率估算更精确可用mpstat CPU_USAGE$(top -bn1 | grep Cpu(s) | awk {print $2} | cut -d% -f1) # 检查内存使用率 MEM_USAGE$(free | grep Mem | awk {print $3/$2 * 100.0}) # 检查根分区磁盘使用率 DISK_USAGE$(df -h / | awk NR2 {print $5} | tr -d %) # 检查异常进程CPU持续30%超过1分钟这里简化处理 HIGH_CPU_PROCESS$(ps aux --sort-%cpu | head -10 | awk {if($330) print $0}) # 日志记录 echo $DATE - CPU: ${CPU_USAGE}%, Mem: ${MEM_USAGE}%, Disk: ${DISK_USAGE}% $LOG_FILE # 告警逻辑这里只是记录到日志可以扩展为发送邮件/钉钉/Telegram if (( $(echo $CPU_USAGE $THRESHOLD_CPU | bc -l) )); then echo $DATE [ALERT] CPU usage is high: ${CPU_USAGE}% $LOG_FILE echo $DATE [INFO] Top processes: $LOG_FILE ps aux --sort-%cpu | head -5 $LOG_FILE fi if (( $(echo $MEM_USAGE $THRESHOLD_MEM | bc -l) )); then echo $DATE [ALERT] Memory usage is high: ${MEM_USAGE}% $LOG_FILE fi if (( $(echo $DISK_USAGE $THRESHOLD_DISK | bc -l) )); then echo $DATE [ALERT] Disk usage is high: ${DISK_USAGE}% $LOG_FILE fi if [ ! -z $HIGH_CPU_PROCESS ]; then echo $DATE [WARNING] Found high CPU process: $LOG_FILE echo $HIGH_CPU_PROCESS $LOG_FILE fi赋予脚本执行权限并添加到Cron每5分钟运行一次sudo chmod x /usr/local/bin/monitor_server.sh sudo crontab -e # 添加一行 */5 * * * * /usr/local/bin/monitor_server.sh4. 实战排查当怀疑被入侵时你的“手术刀”命令集假设监控脚本告警CPU持续100%或者你通过其他方式怀疑服务器被入侵并植入了挖矿木马。不要慌按照以下流程像外科手术一样精准排查。4.1 第一步快速定位异常进程与网络连接1. 综合查看系统资源与进程替代top的更强工具# 使用 htop更直观支持鼠标操作和树状视图 sudo apt install htop -y # 或 sudo dnf install htop htop在htop中按F6可以按不同指标如%CPU排序一眼就能看到哪个进程在“吃”CPU。挖矿进程通常持续占用单核或多核的接近100%。2. 定位可疑网络连接挖矿进程需要与矿池通信一定会建立网络连接。# 查看所有TCP/UDP连接并显示关联的进程名(PID/Program name) sudo netstat -tunap # 更现代的命令是 ss (socket statistics) sudo ss -tunap # 重点关注对外连接特别是连接到非常见端口如3333, 4444, 5555, 6666, 7777, 8888, 9999或奇怪域名的连接 sudo ss -tunap | grep -E :(3333|4444|5555|6666|7777|8888|9999) # 查看实时的网络流量按流量排序 sudo iftop -nNP # 需要安装 iftop3. 深入分析可疑进程假设通过上面命令发现可疑进程PID为12345。# 查看进程的详细信息 ps auxf | grep 12345 # 查看命令行参数挖矿进程命令行中常包含矿池地址、钱包地址 cat /proc/12345/cmdline | xargs -0 echo # 另一种查看完整命令行的方式 # 查看进程打开的文件和网络连接 sudo lsof -p 12345 # 特别关注 TYPE 为 IPv4/IPv6 的网络连接以及 REG 类型的可执行文件路径 # 查看进程的工作目录 sudo ls -la /proc/12345/cwd # 查看进程的环境变量有时会在这里藏匿参数 sudo cat /proc/12345/environ | tr \0 \n4.2 第二步检查系统定时任务与启动项挖矿木马为了持久化通常会将自己添加到定时任务或系统启动项中。1. 检查系统级和用户级Cron# 查看系统cron任务 sudo cat /etc/crontab sudo ls -la /etc/cron.d/ /etc/cron.hourly/ /etc/cron.daily/ /etc/cron.weekly/ /etc/cron.monthly/ # 查看当前用户的cron如果攻击者添加了 crontab -l # 查看所有用户的cron需要root sudo for user in $(cut -f1 -d: /etc/passwd); do echo Crontab for $user ; sudo crontab -u $user -l 2/dev/null; done重点关注那些指向/tmp,/dev/shm等临时目录或者下载并执行远程脚本curl | bash,wget -O- | sh的任务。2. 检查系统服务与启动项# 查看所有系统服务状态 sudo systemctl list-units --typeservice --staterunning # 查看是否有可疑的、名字奇怪的服务 sudo systemctl list-unit-files --typeservice | grep enabled # 检查经典的启动项位置 ls -la /etc/init.d/ # SysV init ls -la /etc/systemd/system/ # systemd 用户自定义服务 ls -la ~/.config/systemd/user/ # 用户级systemd服务4.3 第三步文件系统排查与清理1. 查找近期被修改的可执行文件# 查找 /usr/bin, /usr/sbin, /bin, /sbin 下最近7天内被修改的文件 sudo find /usr/bin /usr/sbin /bin /sbin -type f -mtime -7 -exec ls -la {} \; # 查找整个系统下属主是可疑用户或大小异常的可执行文件 sudo find / -type f -perm /111 \( -user nobody -o -user www-data -o -size 10M \) 2/dev/null | head -202. 检查常见的挖矿木马藏匿路径攻击者喜欢把二进制文件放在临时目录或隐藏目录。# 检查 /tmp, /dev/shm, /var/tmp ls -la /tmp /dev/shm /var/tmp | grep -E \.(elf|out|bin|sh)$ # 检查隐藏目录和文件以点开头 sudo find / -name “.*” -type f -exec file {} \; | grep -i executable 2/dev/null # 检查 /etc/ 下是否有可疑的配置文件可能包含矿池URL sudo grep -r “pool” /etc/ 2/dev/null | grep -v “#” | head -103. 使用文件完整性检查工具AIDE如果你之前配置了AIDE现在就是用它的时候。sudo aide.wrapper --check报告会详细列出哪些文件被添加、删除或修改。重点关注/bin,/sbin,/usr/bin下的系统命令是否被替换。4.4 第四步清除与恢复1. 终止恶意进程# 先终止进程树防止有守护进程 sudo kill -9 12345 # 或者使用 pkill 按进程名终止确保名字唯一 sudo pkill -9 xmrig2. 清理持久化项目根据前面排查出的Cron任务、系统服务、启动文件逐一删除。# 例如删除可疑的cron任务 sudo crontab -e # 手动编辑删除或 sudo rm /etc/cron.d/suspicious_job # 禁用并删除可疑系统服务 sudo systemctl stop malicious-service sudo systemctl disable malicious-service sudo rm /etc/systemd/system/malicious-service.service sudo systemctl daemon-reload3. 删除恶意文件# 在删除前建议先备份一份到隔离区以备后续分析 sudo mkdir /root/malware_quarantine sudo cp /path/to/malicious/file /root/malware_quarantine/ # 然后删除原文件 sudo rm -f /path/to/malicious/file # 如果恶意文件在运行中无法删除可能是进程没杀干净或文件被锁定可以重启到救援模式或使用 chattr -i 解除锁定后再删。4. 检查并修复被篡改的系统命令如果发现ps,top,netstat,ls,find等命令被替换通常是为了隐藏恶意进程需要从干净的安装介质或同版本系统中恢复。# 例如从包管理器重新安装核心工具包 # Ubuntu sudo apt install --reinstall procps net-tools coreutils # CentOS/RHEL sudo dnf reinstall procps-ng net-tools coreutils5. 高级防御与持续安全建议完成一次应急响应后更重要的是反思并加强防御避免重蹈覆辙。5.1 部署基于主机的入侵检测系统HIDS像OSSEC、Wazuh这样的开源HIDS可以提供更强大的日志分析、文件完整性监控、rootkit检测和主动响应功能远超我们手写的脚本。以Wazuh Agent安装为例简化# 在需要监控的服务器上安装Agent # Ubuntu curl -sO https://packages.wazuh.com/4.7/wazuh-agent-4.7.3-1.deb sudo WAZUH_MANAGER‘your_wazuh_manager_ip’ dpkg -i ./wazuh-agent-4.7.3-1.deb sudo systemctl daemon-reload sudo systemctl enable wazuh-agent sudo systemctl start wazuh-agent # CentOS/RHEL curl -sO https://packages.wazuh.com/4.7/wazuh-agent-4.7.3-1.rpm sudo WAZUH_MANAGER‘your_wazuh_manager_ip’ rpm -ihv ./wazuh-agent-4.7.3-1.rpm sudo systemctl daemon-reload sudo systemctl enable wazuh-agent sudo systemctl start wazuh-agent你需要单独部署一个Wazuh管理服务器来接收和分析所有Agent的数据。5.2 实施网络层隔离与审计对于多台服务器尤其是拥有内网的环境划分网络区域使用VLAN或防火墙将Web服务器、数据库服务器、管理服务器隔离在不同的网段。部署网络入侵检测系统NIDS如Suricata或Zeek监控关键网段的异常流量模式如向未知IP的高频连接。集中化日志管理使用Rsyslog或Syslog-ng将所有服务器的日志集中发送到一台受保护的日志服务器避免攻击者篡改本地日志。5.3 建立安全运维习惯最小权限原则为每个服务或应用创建专属的低权限用户来运行。定期审计每周或每月审查一次用户列表、sudo权限、计划任务和监听端口。备份与恢复演练确保系统配置和重要数据有定期备份并真正演练过恢复流程。在遭受勒索软件攻击时干净的备份是最后的救命稻草。保持警惕关注安全社区动态及时了解与你所用软件相关的漏洞信息。安全加固不是一次性的任务而是一场攻防双方持续博弈的马拉松。从简单的“改端口”升级到一套立体的防御和响应体系需要你投入时间和精力去理解和配置。但这份投入是值得的它能让你在深夜被告警电话吵醒时心里有底手上有招快速定位问题并解决而不是对着满屏的异常进程束手无策。
返回列表