网络安全实战指南:常用Linux命令与应急响应排查技巧

📅 发布时间:2026/9/20 3:53:45
网络安全实战指南:常用Linux命令与应急响应排查技巧
搞网络安全这一行绕不开Linux命令。不管是日常巡检、日志分析还是出了安全事件之后的应急响应你手上那几行Linux命令就是最趁手的工具。我见过不少刚入行的朋友一上来就抱着扫描器、框架啃结果真到了服务器上连哪个端口被占、哪条日志在报错都查不明白。这篇文章就把网络安全场景下最常用的Linux命令整理成一套偏实战的用法配合排查思路和踩坑记录来讲适合刚接触安全岗位的新人也适合做运维、开发但经常跟安全打交道的朋友。内容不追求覆盖全部参数保证你在机器上直接能敲、能出结果。1. 网络排查命令先搞清楚流量从哪儿来、到哪儿去拿到一台服务器第一步永远是确认它的“身份”网卡上有哪些IP、默认路由指向哪里、当前有哪些连接。很多安全事件比如异常外连、端口扫描、服务被爆破都会在网络层留下痕迹。如果把排查比作看病网络命令就是最基础的“量体温”先把异常范围缩小再深入进程和文件。1.1 网络接口与地址ip addr 比 ifconfig 好用在哪老教程里还在让你用 ifconfig但现在的发行版基本默认不装了。现代系统统一推荐 iproute2 系列命令最常用的就是ip addr。ip addr这一条就能看到所有网卡的IP、MAC地址、状态以及IPv6地址。排查安全问题时我习惯先跑它原因很简单你需要知道自己这台机器在哪个网络段外网IP和内网IP各是什么哪些网卡是Down状态。比如有一次客户说服务器被扫描我登上去第一件事就是ip addr发现除了业务网卡还多了一块没见过的虚拟网卡顺藤摸瓜找到了一个遗留的测试服务。看路由用ip route输出里default via 网关IP dev eth0这一行就是默认路由。排查横向渗透时经常要确认默认网关是否被改动过如果默认路由指向了奇怪的地址那基本可以判断网络层面被动了手脚。临时给网卡加一个IP做测试也可以用它ip addr add 192.168.1.50/24 dev eth0 ip addr del 192.168.1.50/24 dev eth0这只是临时生效重启网络服务就没了适合在自建靶场里验证东西不建议在业务服务器上乱加。1.2 连接与监听状态ss 与 netstat 的取舍老运维习惯敲netstat -anp但 new 一点的系统里 netstat 属于 net-tools 包不一定默认安装。ss是 iproute2 自带的读取的是内核 socket 信息输出更快信息更全。ss -tnp这个命令是我应急响应时的“本命命令”列出所有TCP连接包括本地地址、远端地址、状态和进程PID。加-n是不做域名反解加-p是显示进程这两项缺一不可。ss -unp # UDP连接 ss -lntp # 只看监听端口 ss -s # 统计各类连接数量排查高危连接时我通常先看 ESTABLISHED 状态的数量有没有异常暴涨。比如深夜两点一台没对外业务的机器出现成百上千条到同一目标IP的连接不用想多半被利用做了跳板。用ss -tnp | grep 目标IP直接把相关PID拉出来再配合后面的进程排查很快就能定位到元凶。netstat 也不是完全没用一些老旧脚本和文档还在用至少你要能看懂输出。参数对应关系是-tTCP-uUDP-l监听-p进程-n不做反解。搜连接数量可以用netstat -ant | wc -l跟ss -s的结论对照一下心里更有底。1.3 抓包分析tcpdump 几个最常用的过滤姿势排查网络问题光看连接状态还不够有时候需要真正看到包的内容。比如怀疑主机在向陌生IP发送数据但对端IP是动态的不知道从哪里查起这时候抓包是最直接的证据。tcpdump -i eth0 -nn -c 100-i指定网卡-nn不做IP和端口反解-c 100只抓100个包就停。先随便抓一点看看流量长什么样再决定下一步过滤条件。针对某个IP过滤tcpdump -i eth0 -nn host 192.168.1.10按端口过滤tcpdump -i eth0 -nn port 80 tcpdump -i eth0 -nn tcp port 8080组合条件用 and/or比如tcpdump -i eth0 -nn host 192.168.1.10 and port not 22实际排查中我经常用这个组合来排除SSH干扰流量只看目标主机的其他通信。想把抓包结果存下来事后分析tcpdump -i eth0 -nn -w /tmp/capture.pcap抓回来的 pcap 文件可以拉到本机用图形化工具慢慢看。注意生产环境抓包前一定要评估流量大小我见过有人直接在大流量网卡上tcpdump -i eth0不设任何过滤条件几分钟就写满磁盘业务直接卡死。正确的做法是先加过滤条件或者加-c限制包数量再或者用-G按时间分割文件总之别让抓包变成事故。2. 端口连通性与占用排查telnet、nc、lsof 与 nmap第二类高频场景是端口排查。安全巡检时最常回答的问题就是“这个端口到底通不通”“这个端口被什么进程占着”。应对这些场景telnet、nc、lsof、fuser 和 nmap 各有分工。2.1 telnet ip 端口 怎么看通不通很多人问“telnet ip 端口 命令怎么看通不通”老牌排查方法就是这个telnet 192.168.1.10 22如果端口通屏幕上会显示Connected to 192.168.1.10然后进入一个黑屏状态表示连接成功此时按Ctrl ]进入telnet命令行再输入quit退出。如果端口不通通常有两种表现一种是卡住不动直到超时说明主机可达但端口被防火墙拦了另一种是直接报Connection refused说明对端服务没起来或者服务没监听在这个端口。有一点要提醒新版 CentOS/RHEL 默认不装 telnet 客户端Debian/Ubuntu 也不一定装。先确认一下which telnet没有的话Debian系装apt install telnetRedHat系装yum install telnet。但注意telnet 本身是明文协议在加固过的环境里经常被禁用这时候就轮到 nc 出场。2.2 用 nc 做批量端口探测nc 的全称是 netcat在网络排查和应急响应里它比 telnet 更灵活。最经典的探测命令是nc -vz -w 3 192.168.1.10 22-v显示详细信息-z只扫描端口不发送数据-w设置超时时间秒。通了会显示succeeded不通会显示Connection refused或超时。批量扫多个端口写成一个循环for port in 22 80 443 3306 6379; do nc -vz -w 2 192.168.1.10 $port 21; done这个命令在排查“内网哪些机器开了敏感端口”时很好用不需要额外装扫描工具默认就能跑。很多个人维护的小服务器没有部署复杂监控手动用这个命令定期过一遍开放端口比事后出了问题再查要省心得多。2.3 本机端口被谁占用lsof 和 fuser确认端口通不通是第一步确认端口被谁占用是第二步。查端口对应进程我几乎不用 netstat直接用 lsoflsof -i:8080输出里能看到进程名、PID、用户和协议。没有输出说明这个端口当前没有被监听可能服务挂了也可能监听在其他地址上。如果只需要PID配合-t跟 kill 连用lsof -t -i:8080fuser 也可以干这个事而且更粗暴fuser -v 8080/tcp fuser -k 8080/tcp-k会直接杀掉占用进程这个命令我是慎用的生产环境一不小心就会把核心服务干掉。每次用它之前我都会再确认一遍端口号毕竟我踩过“把测试环境的Redis当成业务端口给杀了”的坑。2.4 主动探测nmap 的授权自测用法nmap 是网络安全场景绕不开的扫描工具但一定要记住授权边界。我这里的建议很明确在自己维护的服务器、公司授权范围内的资产、或者自己搭的靶场里用别拿它去扫别人的系统。最基础的探测nmap -sn 192.168.1.0/24-sn只做主机发现不扫端口相当于 ping 扫描。扫端口nmap -sT -Pn 192.168.1.10 -p 22,80,443,3306,6379-sT是TCP全连接扫描对目标影响小也比较稳-Pn是跳过主机发现直接把目标当存活主机处理。加-A可以做指纹识别、服务版本和操作系统探测nmap -A 192.168.1.10但-A很吵可能会被对方的安全设备盯上在自测环境无所谓在有监控的系统上操作要留意时间窗口。还有一个常见参数是-sS半开扫描效率高但需要root权限在某些网络环境下反而容易被无视。我自己在靶场里喜欢用-sT少惹麻烦。3. 日志审计与痕迹追踪事件发生后靠什么还原现场网络安全工作中日志是还原攻击链最重要的证据。系统登录记录、认证日志、行为日志都会在各自的文件里留痕。很多新手以为日志排查就是翻文件实际上关键在于“带着目的去查”先想清楚要回答什么问题再选对命令。3.1 登录记录last、lastb、who 与 w先看谁登录过last这个命令读取/var/log/wtmp显示历史登录会话包括用户名、登录终端、来源IP和时间。排查被入侵时我第一反应就是last看看有没有非工作时间的异常登录记录。查看登录失败的记录lastb这个命令读取/var/log/btmp专门记录失败的登录尝试。如果lastb输出一大片来自不同IP的 Failed 尝试基本可以确定这台机器正在被暴力破解。当前登录的用户和会话who ww比who多了负载、登录时长、空闲时间、当前执行命令可以快速确认有没有人正在机器上干活。有一次排查我用w看到一个陌生用户在跑一个长命令顺着PID查到进程确定是被植入的后门在定时执行整个处理过程非常快。3.2 认证日志里的暴力破解痕迹认证日志的位置因系统而异RHEL/CentOS 通常是/var/log/secureDebian/Ubuntu 是/var/log/auth.log。核心是检索关键字Failed password。grep Failed password /var/log/secure输出会很多直接统计来源IPgrep Failed password /var/log/secure | awk {print $(NF-3)} | sort | uniq -c | sort -nr | head -20这条命令是我应急响应里的常客。awk {print $(NF-3)}的作用是取出倒数第4列也就是来源IPsort | uniq -c统计次数sort -nr按次数降序排列。跑完大概长这样2316 45.155.205.xxx 1893 103.210.44.xxx 872 118.31.22.xxx看到这种输出第一件事不是封IP而是先确认有没有被成功登录过。对应做法是查Accepted passwordgrep Accepted /var/log/secure只要在暴力破解时间附近出现了Accepted就要当入侵事件处理立刻隔离主机、备份日志、排查账户和计划任务。3.3 系统消息与实时追踪journalctl 和 tail现在很多系统用 systemd 管日志统一入口是journalctl。常用的排查姿势journalctl -xe-x显示附加帮助信息-e跳到日志末尾这个组合在服务启动失败时特别有用。看最近5分钟的日志journalctl --since 5 minutes ago持续跟踪日志输出journalctl -f传统日志文件也可以实时跟踪tail -f /var/log/messages tail -f /var/log/syslog我自己的习惯是排查时先用journalctl --since -30 minutes | grep -i error把报错捞出来缩小范围后再去翻对应的应用日志避免在成堆的日志里大海捞针。还有一个细节取证时别直接在原文件上反复操作。正确做法是先复制一份cp /var/log/secure /tmp/secure_backup后续的分析都在备份副本里做既避免改动原始痕迹也方便留存证据。3.4 命令历史与用户行为history 的边界history是很多人喜欢看的但它只能反映当前shell的命令记录而且用户完全可以通过unset HISTFILE或者清理文件来规避所以它的作用很有限。history cat ~/.bash_history真正有参考价值的是通过 root 的.bash_history发现攻击者执行过哪些下载、编译、提权命令通过/var/log/auth.log交叉对比还原整个操作时间线。但注意history 只是辅助不能作为唯一依据。有些攻击者会往.bash_history里塞大量无关内容来干扰分析我见过这种反取证手法务必结合日志和进程记录综合判断。4. 文件与权限排查攻击面藏在细节里安全排查的第四块是文件系统和权限。攻击者获取权限后通常会往系统里投递脚本、二进制文件然后设置特殊权限让自己持久化。能不能及时找到这些“异常文件”往往决定了事件影响范围。4.1 find 找可疑文件find 是文件排查的主力。按时间找最近被修改的文件find /tmp -type f -mtime -3 -ls按文件名猜可疑脚本find / -type f \( -name *.sh -o -name *.py -o -name *.pl \) -mtime -7 -ls 2/dev/null按大小找异常文件find / -type f -size 100M -ls 2/dev/null这几个命令组合起来能把最近被投放的脚本和体积异常的程序快速捞出来。排查时重点看这几类目录/tmp、/var/tmp、/dev/shm、/home/它们默认权限宽松是攻击者最爱放文件的去处。stat可以看文件的详细时间stat /tmp/evil.sh输出里有Access、Modify、Change三个时间含义分别是最近访问、内容最近修改、文件元数据权限、属主等最近变更。应急时把 mtime 和前面对接的 SSHD 登录时间一对照基本能判断这个文件是不是入侵后出现的。4.2 权限位与 SUID/SGID用ls -l看权限是一个基本功但很多运维只关心够不够用没想过权限设计本身也是攻击面。举个典型例子一个 Web 目录下如果出现-rwxrwxrwx的脚本说明任何用户都可以写、可以执行攻击者只需要篡改脚本就能获得执行权限这是非常常见的一条提权链。排查时优先找权限过宽的目录和文件find / -type f -perm -0002 -ls 2/dev/null还要重点排查 SUID/SGID 文件。SUID 程序会以属主身份运行如果某个可执行文件是 root 属主且带 SUID普通用户运行它就能继承 root 权限这是高危对象。find / -perm -4000 -ls 2/dev/null find / -perm -2000 -ls 2/dev/null正常系统里 SUID 文件数量是有限的大概几十个基本都是passwd、sudo、mount这类系统程序。如果发现陌生的 SUID 文件比如在/tmp下有一个 777 权限的 SUID 程序那基本可以确定被植入了后门。4.3 chmod、chown、chattr 加固排查发现问题后权限加固也是 Linux 日常操作的一部分。最基本的chmod 755 /opt/script.sh chown root:root /opt/script.sh原则是最小权限能不给执行权限就不给能只读就不要写。如果遇到需要防止文件被篡改的情况可以用chattr给文件加不可变属性chattr i /etc/hosts chattr -i /etc/hosts加了i后即使 root 也无法正常修改或删除这个文件必须先把i去掉。这个技巧用来保护/etc/hosts、关键脚本、日志文件很有效。但也别滥用我见过有人给系统关键二进制全部加了锁后来升级软件时死活装不上排查了半天才想起来是 chattr 锁住了文件。把i加在真正需要保护的地方就行别图省事一把梭。5. 进程排查与应急响应发现异常进程并收尾网络连接、文件异常往往都会落到一个“正在运行的进程”上。排查进程是应急响应里最紧张的一步因为它直接对应“现在有没有攻击者在干活”。这部分我用一套组合打法先看进程列表再找连接对应关系最后再决定怎么处置。5.1 ps 与 top 的定位手法第一步列出所有进程ps aux ps -ef两个命令输出内容大同小异ps aux的 CPU 和内存百分比更直观ps -ef在脚本处理时更好解析。找可疑进程的关键是发现“不和谐”的名字比如系统根本没有的xmr挖矿进程、字符串乱码的进程名、权限完全不对劲的脚本进程。如果 CPU 异常飙高直接toptop -bn1 | head -20-b是批处理模式-n1只输出一次适合在脚本里用。top里按 P 键按CPU排序按 M 键按内存排序。挖矿木马经常会把 CPU 吃满靠这个命令一眼就能看到是谁在偷跑。5.2 网络连接与进程对应关系看进程不结合网络就太被动了。真正高效的做法是“由网到程”ss -tnp | grep 可疑IP拿到 PID 后立刻看它对应的程序路径和启动命令ls -l /proc/PID/exe cat /proc/PID/cmdline ls -l /proc/PID/cwd/proc/PID/exe是指向程序二进制的符号链接/proc/PID/cwd是进程的工作目录。很多恶意程序会把自己的文件和工作目录隐藏得很深这两个命令基本能把它扒得干干净净。举一个实际例子有次排查发现一台机器不断向陌生IP发送数据包我用ss -tnp找到了PIDls -l /proc/PID/exe发现程序路径指向/tmp/.hidden/update再配合lsof -p PID看到它正在读取/tmp/.hidden/config.json整个文件布局立刻清楚了。后续就是备份文件、杀进程、清理残留。5.3 异常进程的处置顺序确认是异常进程后不要急着kill -9。我的建议是kill -TERM PID先发终止信号让程序有机会进入正常退出流程也能让攻击者脚本里的“退出清理”代码有机会执行但这不是必需的。大多数恶意程序自己在退出时会把临时文件删掉反而是帮我们清理了现场不过要想取证就得在杀之前把文件先复制走。如果kill -TERM杀不掉再用kill -9 PID杀完之后重新检查一遍进程列表ps aux | grep 进程名 ss -tnp | grep PID如果是系统服务被改了还要恢复服务的正常配置。这里我多说一句杀进程只是应急的第一步真正要紧的是找到“为什么会被植入”否则杀完还会复活。常见做法是检查计划任务、启动项和服务配置把后门入口堵上才行。6. 综合实战与常见问题速查6.1 一条完整的异常外连排查流程把上面这些命令串成一条实际排查流程直观感受一下假设你收到告警服务器有异常外连。登上去依次执行ip addr确认当前机器的IP和网卡判断告警的IP是不是本机业务IP。ss -tnp | grep 异常目标IP找出这条异常连接对应的本地端口和PID。ls -l /proc/PID/exe cat /proc/PID/cmdline确认进程对应的程序和启动命令判断是不是合法路径。lsof -p PID看在跑这个进程时还打开了哪些文件。find / -type f -mtime -7 2/dev/null | xargs ls -l看看最近有没有新出现的可疑文件。grep Failed password /var/log/secure | awk {print $(NF-3)} | sort | uniq -c | sort -nr | head查一下这台机器有没有被暴力破解过以及哪些IP在尝试。等到信息收集得差不多再决定是隔离、杀进程还是清权限。这套流程不需要额外安装任何工具纯手边的 Linux 命令就能完成一次基础的应急响应。6.2 常见问题速查表现象可能原因排查命令telnet 端口显示通但服务访问不了服务只监听了 127.0.0.1ss -lntp查看监听地址ss 看不到进程信息权限不足加sudo或换 root 执行端口明明有服务telnet ip 端口卡住防火墙拦截iptables -L -n或firewall-cmd --list-all确认策略日志文件太大grep 很慢一次加载了整份文件先用tail -n 5000 文件截取末尾再管道给 grepfind 满屏 permission denied权限不足扫了无权限目录命令末尾加2/dev/null过滤错误服务起不来但日志没有报错SELinux 阻止端口绑定执行getenforce看状态结合/var/log/audit/audit.log排查最新文件总是被修改可能被写了定时任务crontab -l、ls /etc/cron.d/检查计划任务端口进程正常但 CPU 高进程内部有问题top -bn1 -p PID看线程strace -p PID看系统调用这张表是我平时排障中遇到频次最高的几个问题。前两个尤其常见很多刚接触服务部署的人默认服务配置只监听回环地址外部连不上还以为是防火墙的问题结果从ss -lntp里一眼就能看出来。6.3 命令练习与学习路线建议命令这种东西光看永远记不住。我自己练命令的方式是用虚拟机搭一个 Kali 环境在本地靶场里重复这些排查操作。你想系统学的话大致路径是先完成 Linux 基础命令学习包括文件、权限、进程、网络、日志这五块然后安装一个 Kali Linux 虚拟机作为练习环境配合靶场机器反复练习应急响应流程。网络安全比赛或者面试里ss、tcpdump、find、last这些命令也都是常客而且往往不是让你默写参数而是给你一个场景让你说排查思路所以把命令放进场景里练是最好的方式。日常还离不开 vim 命令处理配置文件、改脚本时高效编辑是基础。不用背太多先掌握:set nu显示行号、dd删行、yy复制、p粘贴、/关键字搜索再学会:wq保存退出足够应付绝大多数排查场景。最后分享一个小技巧处理完一轮排查把用过的命令整理成自己的清单按“网络、端口、日志、文件、进程”分类保存。下次再遇到类似问题直接翻出清单按顺序执行效率会比你临时回忆高很多。这个习惯我跟很多同事推荐过谁用谁知道。